From a1241193532a4b5ae21437a09cd07512141ffaa7 Mon Sep 17 00:00:00 2001 From: Quentin Date: Wed, 20 Jan 2021 16:03:44 -0600 Subject: [PATCH] Added linux venv --- venv-linux/bin/activate | 76 + venv-linux/bin/activate.csh | 37 + venv-linux/bin/activate.fish | 75 + venv-linux/bin/chardetect | 11 + venv-linux/bin/easy_install | 11 + venv-linux/bin/easy_install-3.6 | 11 + venv-linux/bin/pip | 11 + venv-linux/bin/pip3 | 11 + venv-linux/bin/pip3.6 | 11 + venv-linux/bin/python | 1 + venv-linux/bin/python3 | 1 + .../PyMySQL-0.10.1.dist-info/INSTALLER | 1 + .../PyMySQL-0.10.1.dist-info/LICENSE | 19 + .../PyMySQL-0.10.1.dist-info/METADATA | 189 + .../PyMySQL-0.10.1.dist-info/RECORD | 49 + .../PyMySQL-0.10.1.dist-info/WHEEL | 6 + .../PyMySQL-0.10.1.dist-info/pbr.json | 1 + .../PyMySQL-0.10.1.dist-info/top_level.txt | 1 + .../__pycache__/easy_install.cpython-36.pyc | Bin 0 -> 275 bytes .../__pycache__/idna_ssl.cpython-36.pyc | Bin 0 -> 942 bytes .../typing_extensions.cpython-36.pyc | Bin 0 -> 69935 bytes .../aiohttp-3.6.3.dist-info/INSTALLER | 1 + .../aiohttp-3.6.3.dist-info/LICENSE.txt | 201 + .../aiohttp-3.6.3.dist-info/METADATA | 661 + .../aiohttp-3.6.3.dist-info/RECORD | 124 + .../aiohttp-3.6.3.dist-info/WHEEL | 5 + .../aiohttp-3.6.3.dist-info/top_level.txt | 1 + .../site-packages/aiohttp/__init__.py | 226 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 5186 bytes .../aiohttp/__pycache__/abc.cpython-36.pyc | Bin 0 -> 8172 bytes .../__pycache__/base_protocol.cpython-36.pyc | Bin 0 -> 2646 bytes .../aiohttp/__pycache__/client.cpython-36.pyc | Bin 0 -> 26625 bytes .../client_exceptions.cpython-36.pyc | Bin 0 -> 10321 bytes .../__pycache__/client_proto.cpython-36.pyc | Bin 0 -> 5920 bytes .../__pycache__/client_reqrep.cpython-36.pyc | Bin 0 -> 26613 bytes .../__pycache__/client_ws.cpython-36.pyc | Bin 0 -> 8712 bytes .../__pycache__/connector.cpython-36.pyc | Bin 0 -> 30340 bytes .../__pycache__/cookiejar.cpython-36.pyc | Bin 0 -> 9038 bytes .../__pycache__/formdata.cpython-36.pyc | Bin 0 -> 4291 bytes .../__pycache__/frozenlist.cpython-36.pyc | Bin 0 -> 2641 bytes .../aiohttp/__pycache__/hdrs.cpython-36.pyc | Bin 0 -> 3607 bytes .../__pycache__/helpers.cpython-36.pyc | Bin 0 -> 22403 bytes .../aiohttp/__pycache__/http.cpython-36.pyc | Bin 0 -> 1559 bytes .../http_exceptions.cpython-36.pyc | Bin 0 -> 4223 bytes .../__pycache__/http_parser.cpython-36.pyc | Bin 0 -> 15253 bytes .../__pycache__/http_websocket.cpython-36.pyc | Bin 0 -> 14428 bytes .../__pycache__/http_writer.cpython-36.pyc | Bin 0 -> 4840 bytes .../aiohttp/__pycache__/locks.cpython-36.pyc | Bin 0 -> 1652 bytes .../aiohttp/__pycache__/log.cpython-36.pyc | Bin 0 -> 414 bytes .../__pycache__/multipart.cpython-36.pyc | Bin 0 -> 26127 bytes .../__pycache__/payload.cpython-36.pyc | Bin 0 -> 13167 bytes .../payload_streamer.cpython-36.pyc | Bin 0 -> 3171 bytes .../__pycache__/pytest_plugin.cpython-36.pyc | Bin 0 -> 9356 bytes .../__pycache__/resolver.cpython-36.pyc | Bin 0 -> 3535 bytes .../__pycache__/signals.cpython-36.pyc | Bin 0 -> 1260 bytes .../__pycache__/streams.cpython-36.pyc | Bin 0 -> 18216 bytes .../__pycache__/tcp_helpers.cpython-36.pyc | Bin 0 -> 1462 bytes .../__pycache__/test_utils.cpython-36.pyc | Bin 0 -> 20780 bytes .../__pycache__/tracing.cpython-36.pyc | Bin 0 -> 13043 bytes .../__pycache__/typedefs.cpython-36.pyc | Bin 0 -> 1177 bytes .../aiohttp/__pycache__/web.cpython-36.pyc | Bin 0 -> 11258 bytes .../__pycache__/web_app.cpython-36.pyc | Bin 0 -> 14936 bytes .../__pycache__/web_exceptions.cpython-36.pyc | Bin 0 -> 12726 bytes .../web_fileresponse.cpython-36.pyc | Bin 0 -> 7251 bytes .../__pycache__/web_log.cpython-36.pyc | Bin 0 -> 7192 bytes .../web_middlewares.cpython-36.pyc | Bin 0 -> 3847 bytes .../__pycache__/web_protocol.cpython-36.pyc | Bin 0 -> 14407 bytes .../__pycache__/web_request.cpython-36.pyc | Bin 0 -> 22026 bytes .../__pycache__/web_response.cpython-36.pyc | Bin 0 -> 19432 bytes .../__pycache__/web_routedef.cpython-36.pyc | Bin 0 -> 7731 bytes .../__pycache__/web_runner.cpython-36.pyc | Bin 0 -> 11715 bytes .../__pycache__/web_server.cpython-36.pyc | Bin 0 -> 2686 bytes .../web_urldispatcher.cpython-36.pyc | Bin 0 -> 41214 bytes .../aiohttp/__pycache__/web_ws.cpython-36.pyc | Bin 0 -> 12955 bytes .../aiohttp/__pycache__/worker.cpython-36.pyc | Bin 0 -> 6841 bytes .../site-packages/aiohttp/_cparser.pxd | 140 + .../site-packages/aiohttp/_find_header.c | 10000 +++++++ .../site-packages/aiohttp/_find_header.h | 14 + .../site-packages/aiohttp/_find_header.pxd | 2 + .../site-packages/aiohttp/_frozenlist.c | 7355 +++++ ...frozenlist.cpython-36m-x86_64-linux-gnu.so | Bin 0 -> 313395 bytes .../site-packages/aiohttp/_frozenlist.pyx | 108 + .../site-packages/aiohttp/_headers.pxi | 84 + .../site-packages/aiohttp/_helpers.c | 5342 ++++ .../_helpers.cpython-36m-x86_64-linux-gnu.so | Bin 0 -> 217557 bytes .../site-packages/aiohttp/_helpers.pyi | 8 + .../site-packages/aiohttp/_helpers.pyx | 35 + .../site-packages/aiohttp/_http_parser.c | 24148 ++++++++++++++++ ...ttp_parser.cpython-36m-x86_64-linux-gnu.so | Bin 0 -> 1586366 bytes .../site-packages/aiohttp/_http_parser.pyx | 846 + .../site-packages/aiohttp/_http_writer.c | 5805 ++++ ...ttp_writer.cpython-36m-x86_64-linux-gnu.so | Bin 0 -> 200464 bytes .../site-packages/aiohttp/_http_writer.pyx | 152 + .../site-packages/aiohttp/_websocket.c | 3562 +++ ..._websocket.cpython-36m-x86_64-linux-gnu.so | Bin 0 -> 102842 bytes .../site-packages/aiohttp/_websocket.pyx | 54 + .../python3.6/site-packages/aiohttp/abc.py | 208 + .../site-packages/aiohttp/base_protocol.py | 81 + .../python3.6/site-packages/aiohttp/client.py | 1151 + .../aiohttp/client_exceptions.py | 292 + .../site-packages/aiohttp/client_proto.py | 239 + .../site-packages/aiohttp/client_reqrep.py | 1052 + .../site-packages/aiohttp/client_ws.py | 301 + .../site-packages/aiohttp/connector.py | 1193 + .../site-packages/aiohttp/cookiejar.py | 368 + .../site-packages/aiohttp/formdata.py | 150 + .../site-packages/aiohttp/frozenlist.py | 72 + .../site-packages/aiohttp/frozenlist.pyi | 63 + .../python3.6/site-packages/aiohttp/hdrs.py | 100 + .../site-packages/aiohttp/helpers.py | 715 + .../python3.6/site-packages/aiohttp/http.py | 50 + .../site-packages/aiohttp/http_exceptions.py | 108 + .../site-packages/aiohttp/http_parser.py | 764 + .../site-packages/aiohttp/http_websocket.py | 659 + .../site-packages/aiohttp/http_writer.py | 172 + .../python3.6/site-packages/aiohttp/locks.py | 44 + .../python3.6/site-packages/aiohttp/log.py | 8 + .../site-packages/aiohttp/multipart.py | 959 + .../site-packages/aiohttp/payload.py | 456 + .../site-packages/aiohttp/payload_streamer.py | 74 + .../python3.6/site-packages/aiohttp/py.typed | 1 + .../site-packages/aiohttp/pytest_plugin.py | 352 + .../site-packages/aiohttp/resolver.py | 112 + .../site-packages/aiohttp/signals.py | 34 + .../site-packages/aiohttp/signals.pyi | 17 + .../site-packages/aiohttp/streams.py | 634 + .../site-packages/aiohttp/tcp_helpers.py | 63 + .../site-packages/aiohttp/test_utils.py | 670 + .../site-packages/aiohttp/tracing.py | 387 + .../site-packages/aiohttp/typedefs.py | 53 + .../python3.6/site-packages/aiohttp/web.py | 502 + .../site-packages/aiohttp/web_app.py | 514 + .../site-packages/aiohttp/web_exceptions.py | 413 + .../site-packages/aiohttp/web_fileresponse.py | 346 + .../site-packages/aiohttp/web_log.py | 235 + .../site-packages/aiohttp/web_middlewares.py | 120 + .../site-packages/aiohttp/web_protocol.py | 599 + .../site-packages/aiohttp/web_request.py | 754 + .../site-packages/aiohttp/web_response.py | 717 + .../site-packages/aiohttp/web_routedef.py | 194 + .../site-packages/aiohttp/web_runner.py | 337 + .../site-packages/aiohttp/web_server.py | 57 + .../aiohttp/web_urldispatcher.py | 1135 + .../python3.6/site-packages/aiohttp/web_ws.py | 456 + .../python3.6/site-packages/aiohttp/worker.py | 242 + .../async_timeout-3.0.1.dist-info/INSTALLER | 1 + .../async_timeout-3.0.1.dist-info/LICENSE | 201 + .../async_timeout-3.0.1.dist-info/METADATA | 165 + .../async_timeout-3.0.1.dist-info/RECORD | 9 + .../async_timeout-3.0.1.dist-info/WHEEL | 5 + .../top_level.txt | 1 + .../site-packages/async_timeout/__init__.py | 115 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 3425 bytes .../site-packages/async_timeout/py.typed | 1 + .../python3.6/site-packages/attr/__init__.py | 76 + .../python3.6/site-packages/attr/__init__.pyi | 433 + .../attr/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 1733 bytes .../attr/__pycache__/_compat.cpython-36.pyc | Bin 0 -> 5863 bytes .../attr/__pycache__/_config.cpython-36.pyc | Bin 0 -> 694 bytes .../attr/__pycache__/_funcs.cpython-36.pyc | Bin 0 -> 9650 bytes .../attr/__pycache__/_make.cpython-36.pyc | Bin 0 -> 67675 bytes .../attr/__pycache__/_next_gen.cpython-36.pyc | Bin 0 -> 3356 bytes .../__pycache__/_version_info.cpython-36.pyc | Bin 0 -> 2372 bytes .../__pycache__/converters.cpython-36.pyc | Bin 0 -> 2319 bytes .../__pycache__/exceptions.cpython-36.pyc | Bin 0 -> 3259 bytes .../attr/__pycache__/filters.cpython-36.pyc | Bin 0 -> 1711 bytes .../attr/__pycache__/setters.cpython-36.pyc | Bin 0 -> 1562 bytes .../__pycache__/validators.cpython-36.pyc | Bin 0 -> 11626 bytes .../python3.6/site-packages/attr/_compat.py | 231 + .../python3.6/site-packages/attr/_config.py | 23 + .../python3.6/site-packages/attr/_funcs.py | 390 + .../lib/python3.6/site-packages/attr/_make.py | 2765 ++ .../python3.6/site-packages/attr/_next_gen.py | 160 + .../site-packages/attr/_version_info.py | 85 + .../site-packages/attr/_version_info.pyi | 9 + .../site-packages/attr/converters.py | 85 + .../site-packages/attr/converters.pyi | 11 + .../site-packages/attr/exceptions.py | 92 + .../site-packages/attr/exceptions.pyi | 17 + .../python3.6/site-packages/attr/filters.py | 52 + .../python3.6/site-packages/attr/filters.pyi | 5 + .../lib/python3.6/site-packages/attr/py.typed | 0 .../python3.6/site-packages/attr/setters.py | 77 + .../python3.6/site-packages/attr/setters.pyi | 18 + .../site-packages/attr/validators.py | 379 + .../site-packages/attr/validators.pyi | 66 + .../attrs-20.3.0.dist-info/AUTHORS.rst | 11 + .../attrs-20.3.0.dist-info/INSTALLER | 1 + .../attrs-20.3.0.dist-info/LICENSE | 21 + .../attrs-20.3.0.dist-info/METADATA | 241 + .../attrs-20.3.0.dist-info/RECORD | 39 + .../attrs-20.3.0.dist-info/WHEEL | 6 + .../attrs-20.3.0.dist-info/top_level.txt | 1 + .../chardet-3.0.4.dist-info/DESCRIPTION.rst | 70 + .../chardet-3.0.4.dist-info/INSTALLER | 1 + .../chardet-3.0.4.dist-info/METADATA | 96 + .../chardet-3.0.4.dist-info/RECORD | 91 + .../chardet-3.0.4.dist-info/WHEEL | 6 + .../chardet-3.0.4.dist-info/entry_points.txt | 3 + .../chardet-3.0.4.dist-info/metadata.json | 1 + .../chardet-3.0.4.dist-info/top_level.txt | 1 + .../site-packages/chardet/__init__.py | 39 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 786 bytes .../__pycache__/big5freq.cpython-36.pyc | Bin 0 -> 54673 bytes .../__pycache__/big5prober.cpython-36.pyc | Bin 0 -> 1062 bytes .../chardistribution.cpython-36.pyc | Bin 0 -> 6258 bytes .../charsetgroupprober.cpython-36.pyc | Bin 0 -> 2169 bytes .../__pycache__/charsetprober.cpython-36.pyc | Bin 0 -> 3395 bytes .../codingstatemachine.cpython-36.pyc | Bin 0 -> 2826 bytes .../chardet/__pycache__/compat.cpython-36.pyc | Bin 0 -> 302 bytes .../__pycache__/cp949prober.cpython-36.pyc | Bin 0 -> 1069 bytes .../chardet/__pycache__/enums.cpython-36.pyc | Bin 0 -> 2560 bytes .../__pycache__/escprober.cpython-36.pyc | Bin 0 -> 2551 bytes .../chardet/__pycache__/escsm.cpython-36.pyc | Bin 0 -> 7308 bytes .../__pycache__/eucjpprober.cpython-36.pyc | Bin 0 -> 2355 bytes .../__pycache__/euckrfreq.cpython-36.pyc | Bin 0 -> 24059 bytes .../__pycache__/euckrprober.cpython-36.pyc | Bin 0 -> 1070 bytes .../__pycache__/euctwfreq.cpython-36.pyc | Bin 0 -> 54682 bytes .../__pycache__/euctwprober.cpython-36.pyc | Bin 0 -> 1070 bytes .../__pycache__/gb2312freq.cpython-36.pyc | Bin 0 -> 38324 bytes .../__pycache__/gb2312prober.cpython-36.pyc | Bin 0 -> 1078 bytes .../__pycache__/hebrewprober.cpython-36.pyc | Bin 0 -> 2912 bytes .../__pycache__/jisfreq.cpython-36.pyc | Bin 0 -> 44468 bytes .../chardet/__pycache__/jpcntx.cpython-36.pyc | Bin 0 -> 38607 bytes .../langbulgarianmodel.cpython-36.pyc | Bin 0 -> 24822 bytes .../langcyrillicmodel.cpython-36.pyc | Bin 0 -> 30373 bytes .../__pycache__/langgreekmodel.cpython-36.pyc | Bin 0 -> 24500 bytes .../langhebrewmodel.cpython-36.pyc | Bin 0 -> 23354 bytes .../langhungarianmodel.cpython-36.pyc | Bin 0 -> 24796 bytes .../__pycache__/langthaimodel.cpython-36.pyc | Bin 0 -> 23333 bytes .../langturkishmodel.cpython-36.pyc | Bin 0 -> 23351 bytes .../__pycache__/latin1prober.cpython-36.pyc | Bin 0 -> 2883 bytes .../mbcharsetprober.cpython-36.pyc | Bin 0 -> 2174 bytes .../mbcsgroupprober.cpython-36.pyc | Bin 0 -> 1065 bytes .../chardet/__pycache__/mbcssm.cpython-36.pyc | Bin 0 -> 17518 bytes .../sbcharsetprober.cpython-36.pyc | Bin 0 -> 2927 bytes .../sbcsgroupprober.cpython-36.pyc | Bin 0 -> 1555 bytes .../__pycache__/sjisprober.cpython-36.pyc | Bin 0 -> 2381 bytes .../universaldetector.cpython-36.pyc | Bin 0 -> 5776 bytes .../__pycache__/utf8prober.cpython-36.pyc | Bin 0 -> 1912 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 381 bytes .../site-packages/chardet/big5freq.py | 386 + .../site-packages/chardet/big5prober.py | 47 + .../site-packages/chardet/chardistribution.py | 233 + .../chardet/charsetgroupprober.py | 106 + .../site-packages/chardet/charsetprober.py | 145 + .../site-packages/chardet/cli/__init__.py | 1 + .../cli/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 138 bytes .../cli/__pycache__/chardetect.cpython-36.pyc | Bin 0 -> 3026 bytes .../site-packages/chardet/cli/chardetect.py | 85 + .../chardet/codingstatemachine.py | 88 + .../python3.6/site-packages/chardet/compat.py | 34 + .../site-packages/chardet/cp949prober.py | 49 + .../python3.6/site-packages/chardet/enums.py | 76 + .../site-packages/chardet/escprober.py | 101 + .../python3.6/site-packages/chardet/escsm.py | 246 + .../site-packages/chardet/eucjpprober.py | 92 + .../site-packages/chardet/euckrfreq.py | 195 + .../site-packages/chardet/euckrprober.py | 47 + .../site-packages/chardet/euctwfreq.py | 387 + .../site-packages/chardet/euctwprober.py | 46 + .../site-packages/chardet/gb2312freq.py | 283 + .../site-packages/chardet/gb2312prober.py | 46 + .../site-packages/chardet/hebrewprober.py | 292 + .../site-packages/chardet/jisfreq.py | 325 + .../python3.6/site-packages/chardet/jpcntx.py | 233 + .../chardet/langbulgarianmodel.py | 228 + .../chardet/langcyrillicmodel.py | 333 + .../site-packages/chardet/langgreekmodel.py | 225 + .../site-packages/chardet/langhebrewmodel.py | 200 + .../chardet/langhungarianmodel.py | 225 + .../site-packages/chardet/langthaimodel.py | 199 + .../site-packages/chardet/langturkishmodel.py | 193 + .../site-packages/chardet/latin1prober.py | 145 + .../site-packages/chardet/mbcharsetprober.py | 91 + .../site-packages/chardet/mbcsgroupprober.py | 54 + .../python3.6/site-packages/chardet/mbcssm.py | 572 + .../site-packages/chardet/sbcharsetprober.py | 132 + .../site-packages/chardet/sbcsgroupprober.py | 73 + .../site-packages/chardet/sjisprober.py | 92 + .../chardet/universaldetector.py | 286 + .../site-packages/chardet/utf8prober.py | 82 + .../site-packages/chardet/version.py | 9 + .../discord-1.0.1.dist-info/INSTALLER | 1 + .../discord-1.0.1.dist-info/METADATA | 16 + .../discord-1.0.1.dist-info/RECORD | 5 + .../discord-1.0.1.dist-info/WHEEL | 5 + .../discord-1.0.1.dist-info/top_level.txt | 1 + .../discord.py-1.5.1.dist-info/INSTALLER | 1 + .../discord.py-1.5.1.dist-info/LICENSE | 21 + .../discord.py-1.5.1.dist-info/METADATA | 149 + .../discord.py-1.5.1.dist-info/RECORD | 129 + .../discord.py-1.5.1.dist-info/WHEEL | 5 + .../discord.py-1.5.1.dist-info/authors.sh | 5 + .../discord.py-1.5.1.dist-info/top_level.txt | 1 + .../site-packages/discord/__init__.py | 73 + .../site-packages/discord/__main__.py | 303 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2835 bytes .../__pycache__/__main__.cpython-36.pyc | Bin 0 -> 9240 bytes .../discord/__pycache__/abc.cpython-36.pyc | Bin 0 -> 35985 bytes .../__pycache__/activity.cpython-36.pyc | Bin 0 -> 23726 bytes .../__pycache__/appinfo.cpython-36.pyc | Bin 0 -> 5456 bytes .../discord/__pycache__/asset.cpython-36.pyc | Bin 0 -> 7498 bytes .../__pycache__/audit_logs.cpython-36.pyc | Bin 0 -> 11866 bytes .../__pycache__/backoff.cpython-36.pyc | Bin 0 -> 3367 bytes .../discord/__pycache__/calls.cpython-36.pyc | Bin 0 -> 6108 bytes .../__pycache__/channel.cpython-36.pyc | Bin 0 -> 45082 bytes .../discord/__pycache__/client.cpython-36.pyc | Bin 0 -> 48317 bytes .../discord/__pycache__/colour.cpython-36.pyc | Bin 0 -> 9554 bytes .../context_managers.cpython-36.pyc | Bin 0 -> 2827 bytes .../discord/__pycache__/embeds.cpython-36.pyc | Bin 0 -> 17306 bytes .../discord/__pycache__/emoji.cpython-36.pyc | Bin 0 -> 8205 bytes .../discord/__pycache__/enums.cpython-36.pyc | Bin 0 -> 14367 bytes .../discord/__pycache__/errors.cpython-36.pyc | Bin 0 -> 8294 bytes .../discord/__pycache__/file.cpython-36.pyc | Bin 0 -> 3542 bytes .../discord/__pycache__/flags.cpython-36.pyc | Bin 0 -> 33966 bytes .../__pycache__/gateway.cpython-36.pyc | Bin 0 -> 26631 bytes .../discord/__pycache__/guild.cpython-36.pyc | Bin 0 -> 71766 bytes .../discord/__pycache__/http.cpython-36.pyc | Bin 0 -> 36582 bytes .../__pycache__/integrations.cpython-36.pyc | Bin 0 -> 7181 bytes .../discord/__pycache__/invite.cpython-36.pyc | Bin 0 -> 15091 bytes .../__pycache__/iterators.cpython-36.pyc | Bin 0 -> 20408 bytes .../discord/__pycache__/member.cpython-36.pyc | Bin 0 -> 24438 bytes .../__pycache__/mentions.cpython-36.pyc | Bin 0 -> 5041 bytes .../__pycache__/message.cpython-36.pyc | Bin 0 -> 40567 bytes .../discord/__pycache__/mixins.cpython-36.pyc | Bin 0 -> 2014 bytes .../discord/__pycache__/object.cpython-36.pyc | Bin 0 -> 3103 bytes .../__pycache__/oggparse.cpython-36.pyc | Bin 0 -> 3345 bytes .../discord/__pycache__/opus.cpython-36.pyc | Bin 0 -> 8785 bytes .../__pycache__/partial_emoji.cpython-36.pyc | Bin 0 -> 5310 bytes .../__pycache__/permissions.cpython-36.pyc | Bin 0 -> 20429 bytes .../discord/__pycache__/player.cpython-36.pyc | Bin 0 -> 23019 bytes .../__pycache__/raw_models.cpython-36.pyc | Bin 0 -> 8296 bytes .../__pycache__/reaction.cpython-36.pyc | Bin 0 -> 7096 bytes .../__pycache__/relationship.cpython-36.pyc | Bin 0 -> 2977 bytes .../discord/__pycache__/role.cpython-36.pyc | Bin 0 -> 9848 bytes .../discord/__pycache__/shard.cpython-36.pyc | Bin 0 -> 18838 bytes .../discord/__pycache__/state.cpython-36.pyc | Bin 0 -> 39114 bytes .../discord/__pycache__/team.cpython-36.pyc | Bin 0 -> 4954 bytes .../__pycache__/template.cpython-36.pyc | Bin 0 -> 6438 bytes .../discord/__pycache__/user.cpython-36.pyc | Bin 0 -> 30446 bytes .../discord/__pycache__/utils.cpython-36.pyc | Bin 0 -> 19110 bytes .../__pycache__/voice_client.cpython-36.pyc | Bin 0 -> 20101 bytes .../__pycache__/webhook.cpython-36.pyc | Bin 0 -> 27817 bytes .../discord/__pycache__/widget.cpython-36.pyc | Bin 0 -> 9452 bytes .../python3.6/site-packages/discord/abc.py | 1131 + .../site-packages/discord/activity.py | 766 + .../site-packages/discord/appinfo.py | 153 + .../python3.6/site-packages/discord/asset.py | 233 + .../site-packages/discord/audit_logs.py | 365 + .../site-packages/discord/backoff.py | 85 + .../discord/bin/libopus-0.x64.dll | Bin 0 -> 423142 bytes .../discord/bin/libopus-0.x86.dll | Bin 0 -> 380885 bytes .../python3.6/site-packages/discord/calls.py | 155 + .../site-packages/discord/channel.py | 1312 + .../python3.6/site-packages/discord/client.py | 1482 + .../python3.6/site-packages/discord/colour.py | 247 + .../site-packages/discord/context_managers.py | 67 + .../python3.6/site-packages/discord/embeds.py | 598 + .../python3.6/site-packages/discord/emoji.py | 219 + .../python3.6/site-packages/discord/enums.py | 457 + .../python3.6/site-packages/discord/errors.py | 201 + .../discord/ext/commands/__init__.py | 20 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 611 bytes .../__pycache__/_types.cpython-36.pyc | Bin 0 -> 1412 bytes .../commands/__pycache__/bot.cpython-36.pyc | Bin 0 -> 32848 bytes .../commands/__pycache__/cog.cpython-36.pyc | Bin 0 -> 13457 bytes .../__pycache__/context.cpython-36.pyc | Bin 0 -> 10699 bytes .../__pycache__/converter.cpython-36.pyc | Bin 0 -> 21359 bytes .../__pycache__/cooldowns.cpython-36.pyc | Bin 0 -> 9426 bytes .../commands/__pycache__/core.cpython-36.pyc | Bin 0 -> 61091 bytes .../__pycache__/errors.cpython-36.pyc | Bin 0 -> 31708 bytes .../commands/__pycache__/help.cpython-36.pyc | Bin 0 -> 45270 bytes .../commands/__pycache__/view.cpython-36.pyc | Bin 0 -> 4820 bytes .../discord/ext/commands/_types.py | 30 + .../site-packages/discord/ext/commands/bot.py | 1019 + .../site-packages/discord/ext/commands/cog.py | 430 + .../discord/ext/commands/context.py | 324 + .../discord/ext/commands/converter.py | 656 + .../discord/ext/commands/cooldowns.py | 292 + .../discord/ext/commands/core.py | 2046 ++ .../discord/ext/commands/errors.py | 794 + .../discord/ext/commands/help.py | 1331 + .../discord/ext/commands/view.py | 194 + .../discord/ext/tasks/__init__.py | 487 + .../tasks/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 15730 bytes .../python3.6/site-packages/discord/file.py | 110 + .../python3.6/site-packages/discord/flags.py | 937 + .../site-packages/discord/gateway.py | 906 + .../python3.6/site-packages/discord/guild.py | 2147 ++ .../python3.6/site-packages/discord/http.py | 948 + .../site-packages/discord/integrations.py | 206 + .../python3.6/site-packages/discord/invite.py | 397 + .../site-packages/discord/iterators.py | 642 + .../python3.6/site-packages/discord/member.py | 708 + .../site-packages/discord/mentions.py | 117 + .../site-packages/discord/message.py | 1116 + .../python3.6/site-packages/discord/mixins.py | 42 + .../python3.6/site-packages/discord/object.py | 78 + .../site-packages/discord/oggparse.py | 98 + .../python3.6/site-packages/discord/opus.py | 282 + .../site-packages/discord/partial_emoji.py | 147 + .../site-packages/discord/permissions.py | 553 + .../python3.6/site-packages/discord/player.py | 655 + .../site-packages/discord/raw_models.py | 207 + .../site-packages/discord/reaction.py | 199 + .../site-packages/discord/relationship.py | 78 + .../python3.6/site-packages/discord/role.py | 299 + .../python3.6/site-packages/discord/shard.py | 521 + .../python3.6/site-packages/discord/state.py | 1223 + .../python3.6/site-packages/discord/team.py | 129 + .../site-packages/discord/template.py | 166 + .../python3.6/site-packages/discord/user.py | 894 + .../python3.6/site-packages/discord/utils.py | 552 + .../site-packages/discord/voice_client.py | 639 + .../site-packages/discord/webhook.py | 871 + .../python3.6/site-packages/discord/widget.py | 268 + .../python3.6/site-packages/easy_install.py | 5 + .../idna-2.10.dist-info/INSTALLER | 1 + .../idna-2.10.dist-info/LICENSE.rst | 34 + .../idna-2.10.dist-info/METADATA | 243 + .../site-packages/idna-2.10.dist-info/RECORD | 22 + .../site-packages/idna-2.10.dist-info/WHEEL | 6 + .../idna-2.10.dist-info/top_level.txt | 1 + .../python3.6/site-packages/idna/__init__.py | 2 + .../idna/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 197 bytes .../idna/__pycache__/codec.cpython-36.pyc | Bin 0 -> 3044 bytes .../idna/__pycache__/compat.cpython-36.pyc | Bin 0 -> 557 bytes .../idna/__pycache__/core.cpython-36.pyc | Bin 0 -> 9254 bytes .../idna/__pycache__/idnadata.cpython-36.pyc | Bin 0 -> 30689 bytes .../idna/__pycache__/intranges.cpython-36.pyc | Bin 0 -> 1758 bytes .../__pycache__/package_data.cpython-36.pyc | Bin 0 -> 152 bytes .../idna/__pycache__/uts46data.cpython-36.pyc | Bin 0 -> 246354 bytes .../lib/python3.6/site-packages/idna/codec.py | 118 + .../python3.6/site-packages/idna/compat.py | 12 + .../lib/python3.6/site-packages/idna/core.py | 400 + .../python3.6/site-packages/idna/idnadata.py | 2050 ++ .../python3.6/site-packages/idna/intranges.py | 53 + .../site-packages/idna/package_data.py | 2 + .../python3.6/site-packages/idna/uts46data.py | 8357 ++++++ .../idna_ssl-1.1.0.dist-info/DESCRIPTION.rst | 62 + .../idna_ssl-1.1.0.dist-info/INSTALLER | 1 + .../idna_ssl-1.1.0.dist-info/METADATA | 84 + .../idna_ssl-1.1.0.dist-info/RECORD | 9 + .../idna_ssl-1.1.0.dist-info/WHEEL | 5 + .../idna_ssl-1.1.0.dist-info/metadata.json | 1 + .../idna_ssl-1.1.0.dist-info/top_level.txt | 1 + .../lib/python3.6/site-packages/idna_ssl.py | 40 + .../multidict-4.7.6.dist-info/INSTALLER | 1 + .../multidict-4.7.6.dist-info/LICENSE | 201 + .../multidict-4.7.6.dist-info/METADATA | 130 + .../multidict-4.7.6.dist-info/RECORD | 26 + .../multidict-4.7.6.dist-info/WHEEL | 5 + .../multidict-4.7.6.dist-info/top_level.txt | 1 + .../site-packages/multidict/__init__.py | 48 + .../site-packages/multidict/__init__.pyi | 152 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 883 bytes .../multidict/__pycache__/_abc.cpython-36.pyc | Bin 0 -> 1744 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 451 bytes .../_multidict_base.cpython-36.pyc | Bin 0 -> 3586 bytes .../__pycache__/_multidict_py.cpython-36.pyc | Bin 0 -> 16784 bytes .../python3.6/site-packages/multidict/_abc.py | 39 + .../site-packages/multidict/_compat.py | 14 + .../site-packages/multidict/_multidict.c | 1641 ++ ..._multidict.cpython-36m-x86_64-linux-gnu.so | Bin 0 -> 432724 bytes .../multidict/_multidict_base.py | 144 + .../site-packages/multidict/_multidict_py.py | 513 + .../site-packages/multidict/_multilib/defs.h | 22 + .../site-packages/multidict/_multilib/dict.h | 24 + .../site-packages/multidict/_multilib/istr.h | 85 + .../site-packages/multidict/_multilib/iter.h | 238 + .../multidict/_multilib/pair_list.h | 1244 + .../site-packages/multidict/_multilib/views.h | 464 + .../site-packages/multidict/py.typed | 1 + .../pip-9.0.1.dist-info/DESCRIPTION.rst | 39 + .../pip-9.0.1.dist-info/INSTALLER | 1 + .../pip-9.0.1.dist-info/METADATA | 70 + .../site-packages/pip-9.0.1.dist-info/RECORD | 123 + .../site-packages/pip-9.0.1.dist-info/WHEEL | 6 + .../pip-9.0.1.dist-info/entry_points.txt | 5 + .../pip-9.0.1.dist-info/metadata.json | 1 + .../pip-9.0.1.dist-info/top_level.txt | 1 + .../python3.6/site-packages/pip/__init__.py | 338 + .../python3.6/site-packages/pip/__main__.py | 19 + .../pip/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 8498 bytes .../pip/__pycache__/__main__.cpython-36.pyc | Bin 0 -> 374 bytes .../__pycache__/basecommand.cpython-36.pyc | Bin 0 -> 7210 bytes .../pip/__pycache__/baseparser.cpython-36.pyc | Bin 0 -> 9271 bytes .../pip/__pycache__/cmdoptions.cpython-36.pyc | Bin 0 -> 12929 bytes .../pip/__pycache__/download.cpython-36.pyc | Bin 0 -> 20838 bytes .../pip/__pycache__/exceptions.cpython-36.pyc | Bin 0 -> 10483 bytes .../pip/__pycache__/index.cpython-36.pyc | Bin 0 -> 30245 bytes .../pip/__pycache__/locations.cpython-36.pyc | Bin 0 -> 3869 bytes .../pip/__pycache__/pep425tags.cpython-36.pyc | Bin 0 -> 7464 bytes .../__pycache__/status_codes.cpython-36.pyc | Bin 0 -> 338 bytes .../pip/__pycache__/wheel.cpython-36.pyc | Bin 0 -> 21655 bytes .../site-packages/pip/_vendor/__init__.py | 111 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2797 bytes .../site-packages/pip/basecommand.py | 337 + .../python3.6/site-packages/pip/baseparser.py | 293 + .../python3.6/site-packages/pip/cmdoptions.py | 633 + .../site-packages/pip/commands/__init__.py | 86 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2028 bytes .../commands/__pycache__/check.cpython-36.pyc | Bin 0 -> 1269 bytes .../__pycache__/completion.cpython-36.pyc | Bin 0 -> 2600 bytes .../__pycache__/download.cpython-36.pyc | Bin 0 -> 5385 bytes .../__pycache__/freeze.cpython-36.pyc | Bin 0 -> 2582 bytes .../commands/__pycache__/hash.cpython-36.pyc | Bin 0 -> 1923 bytes .../commands/__pycache__/help.cpython-36.pyc | Bin 0 -> 1074 bytes .../__pycache__/install.cpython-36.pyc | Bin 0 -> 10221 bytes .../commands/__pycache__/list.cpython-36.pyc | Bin 0 -> 9685 bytes .../__pycache__/search.cpython-36.pyc | Bin 0 -> 4164 bytes .../commands/__pycache__/show.cpython-36.pyc | Bin 0 -> 5335 bytes .../__pycache__/uninstall.cpython-36.pyc | Bin 0 -> 2560 bytes .../commands/__pycache__/wheel.cpython-36.pyc | Bin 0 -> 5422 bytes .../site-packages/pip/commands/check.py | 39 + .../site-packages/pip/commands/completion.py | 81 + .../site-packages/pip/commands/download.py | 212 + .../site-packages/pip/commands/freeze.py | 87 + .../site-packages/pip/commands/hash.py | 57 + .../site-packages/pip/commands/help.py | 35 + .../site-packages/pip/commands/install.py | 455 + .../site-packages/pip/commands/list.py | 337 + .../site-packages/pip/commands/search.py | 133 + .../site-packages/pip/commands/show.py | 154 + .../site-packages/pip/commands/uninstall.py | 76 + .../site-packages/pip/commands/wheel.py | 208 + .../site-packages/pip/compat/__init__.py | 164 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 3957 bytes .../__pycache__/dictconfig.cpython-36.pyc | Bin 0 -> 13604 bytes .../site-packages/pip/compat/dictconfig.py | 565 + .../python3.6/site-packages/pip/download.py | 926 + .../python3.6/site-packages/pip/exceptions.py | 244 + .../lib/python3.6/site-packages/pip/index.py | 1102 + .../python3.6/site-packages/pip/locations.py | 182 + .../site-packages/pip/models/__init__.py | 4 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 223 bytes .../models/__pycache__/index.cpython-36.pyc | Bin 0 -> 827 bytes .../site-packages/pip/models/index.py | 16 + .../site-packages/pip/operations/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 137 bytes .../__pycache__/check.cpython-36.pyc | Bin 0 -> 1424 bytes .../__pycache__/freeze.cpython-36.pyc | Bin 0 -> 2881 bytes .../site-packages/pip/operations/check.py | 49 + .../site-packages/pip/operations/freeze.py | 132 + .../python3.6/site-packages/pip/pep425tags.py | 324 + .../site-packages/pip/req/__init__.py | 10 + .../req/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 404 bytes .../req/__pycache__/req_file.cpython-36.pyc | Bin 0 -> 8419 bytes .../__pycache__/req_install.cpython-36.pyc | Bin 0 -> 30120 bytes .../req/__pycache__/req_set.cpython-36.pyc | Bin 0 -> 20967 bytes .../__pycache__/req_uninstall.cpython-36.pyc | Bin 0 -> 6282 bytes .../site-packages/pip/req/req_file.py | 342 + .../site-packages/pip/req/req_install.py | 1204 + .../site-packages/pip/req/req_set.py | 798 + .../site-packages/pip/req/req_uninstall.py | 195 + .../site-packages/pip/status_codes.py | 8 + .../site-packages/pip/utils/__init__.py | 870 + .../utils/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 22743 bytes .../utils/__pycache__/appdirs.cpython-36.pyc | Bin 0 -> 7701 bytes .../utils/__pycache__/build.cpython-36.pyc | Bin 0 -> 1315 bytes .../__pycache__/deprecation.cpython-36.pyc | Bin 0 -> 1728 bytes .../utils/__pycache__/encoding.cpython-36.pyc | Bin 0 -> 1018 bytes .../__pycache__/filesystem.cpython-36.pyc | Bin 0 -> 583 bytes .../utils/__pycache__/glibc.cpython-36.pyc | Bin 0 -> 1366 bytes .../utils/__pycache__/hashes.cpython-36.pyc | Bin 0 -> 3242 bytes .../utils/__pycache__/logging.cpython-36.pyc | Bin 0 -> 3898 bytes .../utils/__pycache__/outdated.cpython-36.pyc | Bin 0 -> 4223 bytes .../__pycache__/packaging.cpython-36.pyc | Bin 0 -> 1986 bytes .../setuptools_build.cpython-36.pyc | Bin 0 -> 327 bytes .../pip/utils/__pycache__/ui.cpython-36.pyc | Bin 0 -> 9583 bytes .../site-packages/pip/utils/appdirs.py | 248 + .../site-packages/pip/utils/build.py | 42 + .../site-packages/pip/utils/deprecation.py | 76 + .../site-packages/pip/utils/encoding.py | 31 + .../site-packages/pip/utils/filesystem.py | 28 + .../site-packages/pip/utils/glibc.py | 81 + .../site-packages/pip/utils/hashes.py | 92 + .../site-packages/pip/utils/logging.py | 130 + .../site-packages/pip/utils/outdated.py | 162 + .../site-packages/pip/utils/packaging.py | 63 + .../pip/utils/setuptools_build.py | 8 + .../python3.6/site-packages/pip/utils/ui.py | 344 + .../site-packages/pip/vcs/__init__.py | 366 + .../vcs/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 11102 bytes .../pip/vcs/__pycache__/bazaar.cpython-36.pyc | Bin 0 -> 3655 bytes .../pip/vcs/__pycache__/git.cpython-36.pyc | Bin 0 -> 8795 bytes .../vcs/__pycache__/mercurial.cpython-36.pyc | Bin 0 -> 3568 bytes .../vcs/__pycache__/subversion.cpython-36.pyc | Bin 0 -> 7107 bytes .../python3.6/site-packages/pip/vcs/bazaar.py | 116 + .../python3.6/site-packages/pip/vcs/git.py | 300 + .../site-packages/pip/vcs/mercurial.py | 103 + .../site-packages/pip/vcs/subversion.py | 269 + .../lib/python3.6/site-packages/pip/wheel.py | 853 + .../DESCRIPTION.rst | 3 + .../pkg_resources-0.0.0.dist-info/INSTALLER | 1 + .../pkg_resources-0.0.0.dist-info/METADATA | 13 + .../pkg_resources-0.0.0.dist-info/RECORD | 38 + .../pkg_resources-0.0.0.dist-info/WHEEL | 6 + .../metadata.json | 1 + .../site-packages/pkg_resources/__init__.py | 3125 ++ .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 95310 bytes .../__pycache__/py31compat.cpython-36.pyc | Bin 0 -> 657 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 154 bytes .../__pycache__/appdirs.cpython-36.pyc | Bin 0 -> 18580 bytes .../__pycache__/pyparsing.cpython-36.pyc | Bin 0 -> 201076 bytes .../_vendor/__pycache__/six.cpython-36.pyc | Bin 0 -> 24451 bytes .../pkg_resources/_vendor/appdirs.py | 552 + .../_vendor/packaging/__about__.py | 21 + .../_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-36.pyc | Bin 0 -> 690 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 528 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 975 bytes .../__pycache__/_structures.cpython-36.pyc | Bin 0 -> 2832 bytes .../__pycache__/markers.cpython-36.pyc | Bin 0 -> 8855 bytes .../__pycache__/requirements.cpython-36.pyc | Bin 0 -> 3851 bytes .../__pycache__/specifiers.cpython-36.pyc | Bin 0 -> 19794 bytes .../__pycache__/utils.cpython-36.pyc | Bin 0 -> 459 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 10569 bytes .../_vendor/packaging/_compat.py | 30 + .../_vendor/packaging/_structures.py | 68 + .../_vendor/packaging/markers.py | 301 + .../_vendor/packaging/requirements.py | 127 + .../_vendor/packaging/specifiers.py | 774 + .../pkg_resources/_vendor/packaging/utils.py | 14 + .../_vendor/packaging/version.py | 393 + .../pkg_resources/_vendor/pyparsing.py | 5696 ++++ .../pkg_resources/_vendor/six.py | 868 + .../pkg_resources/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2385 bytes .../site-packages/pkg_resources/py31compat.py | 22 + .../site-packages/pymysql/__init__.py | 141 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 4620 bytes .../pymysql/__pycache__/_auth.cpython-36.pyc | Bin 0 -> 7569 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 548 bytes .../__pycache__/_socketio.cpython-36.pyc | Bin 0 -> 3988 bytes .../__pycache__/charset.cpython-36.pyc | Bin 0 -> 8647 bytes .../__pycache__/connections.cpython-36.pyc | Bin 0 -> 33897 bytes .../__pycache__/converters.cpython-36.pyc | Bin 0 -> 10771 bytes .../__pycache__/cursors.cpython-36.pyc | Bin 0 -> 16115 bytes .../pymysql/__pycache__/err.cpython-36.pyc | Bin 0 -> 4894 bytes .../__pycache__/optionfile.cpython-36.pyc | Bin 0 -> 1030 bytes .../__pycache__/protocol.cpython-36.pyc | Bin 0 -> 13183 bytes .../pymysql/__pycache__/times.cpython-36.pyc | Bin 0 -> 716 bytes .../pymysql/__pycache__/util.cpython-36.pyc | Bin 0 -> 436 bytes .../python3.6/site-packages/pymysql/_auth.py | 327 + .../site-packages/pymysql/_compat.py | 21 + .../site-packages/pymysql/_socketio.py | 134 + .../site-packages/pymysql/charset.py | 210 + .../site-packages/pymysql/connections.py | 1273 + .../site-packages/pymysql/constants/CLIENT.py | 31 + .../pymysql/constants/COMMAND.py | 33 + .../site-packages/pymysql/constants/CR.py | 68 + .../site-packages/pymysql/constants/ER.py | 474 + .../pymysql/constants/FIELD_TYPE.py | 33 + .../site-packages/pymysql/constants/FLAG.py | 15 + .../pymysql/constants/SERVER_STATUS.py | 11 + .../pymysql/constants/__init__.py | 0 .../__pycache__/CLIENT.cpython-36.pyc | Bin 0 -> 919 bytes .../__pycache__/COMMAND.cpython-36.pyc | Bin 0 -> 977 bytes .../constants/__pycache__/CR.cpython-36.pyc | Bin 0 -> 2342 bytes .../constants/__pycache__/ER.cpython-36.pyc | Bin 0 -> 15600 bytes .../__pycache__/FIELD_TYPE.cpython-36.pyc | Bin 0 -> 705 bytes .../constants/__pycache__/FLAG.cpython-36.pyc | Bin 0 -> 442 bytes .../__pycache__/SERVER_STATUS.cpython-36.pyc | Bin 0 -> 545 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 144 bytes .../site-packages/pymysql/converters.py | 380 + .../site-packages/pymysql/cursors.py | 505 + .../python3.6/site-packages/pymysql/err.py | 107 + .../site-packages/pymysql/optionfile.py | 23 + .../site-packages/pymysql/protocol.py | 344 + .../python3.6/site-packages/pymysql/times.py | 20 + .../python3.6/site-packages/pymysql/util.py | 13 + .../DESCRIPTION.rst | 36 + .../setuptools-39.0.1.dist-info/INSTALLER | 1 + .../setuptools-39.0.1.dist-info/METADATA | 67 + .../setuptools-39.0.1.dist-info/RECORD | 155 + .../setuptools-39.0.1.dist-info/WHEEL | 6 + .../dependency_links.txt | 2 + .../entry_points.txt | 64 + .../setuptools-39.0.1.dist-info/metadata.json | 1 + .../setuptools-39.0.1.dist-info/top_level.txt | 3 + .../setuptools-39.0.1.dist-info/zip-safe | 1 + .../site-packages/setuptools/__init__.py | 180 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 6246 bytes .../__pycache__/archive_util.cpython-36.pyc | Bin 0 -> 5094 bytes .../__pycache__/build_meta.cpython-36.pyc | Bin 0 -> 5867 bytes .../__pycache__/config.cpython-36.pyc | Bin 0 -> 14323 bytes .../__pycache__/dep_util.cpython-36.pyc | Bin 0 -> 813 bytes .../__pycache__/depends.cpython-36.pyc | Bin 0 -> 5239 bytes .../__pycache__/dist.cpython-36.pyc | Bin 0 -> 36818 bytes .../__pycache__/extension.cpython-36.pyc | Bin 0 -> 1933 bytes .../__pycache__/glibc.cpython-36.pyc | Bin 0 -> 1503 bytes .../__pycache__/glob.cpython-36.pyc | Bin 0 -> 3801 bytes .../__pycache__/launch.cpython-36.pyc | Bin 0 -> 812 bytes .../__pycache__/lib2to3_ex.cpython-36.pyc | Bin 0 -> 2391 bytes .../__pycache__/monkey.cpython-36.pyc | Bin 0 -> 5133 bytes .../__pycache__/msvc.cpython-36.pyc | Bin 0 -> 34498 bytes .../__pycache__/namespaces.cpython-36.pyc | Bin 0 -> 3636 bytes .../__pycache__/package_index.cpython-36.pyc | Bin 0 -> 32218 bytes .../__pycache__/pep425tags.cpython-36.pyc | Bin 0 -> 7296 bytes .../__pycache__/py27compat.cpython-36.pyc | Bin 0 -> 769 bytes .../__pycache__/py31compat.cpython-36.pyc | Bin 0 -> 1508 bytes .../__pycache__/py33compat.cpython-36.pyc | Bin 0 -> 1361 bytes .../__pycache__/py36compat.cpython-36.pyc | Bin 0 -> 2165 bytes .../__pycache__/sandbox.cpython-36.pyc | Bin 0 -> 15681 bytes .../__pycache__/site-patch.cpython-36.pyc | Bin 0 -> 1464 bytes .../__pycache__/ssl_support.cpython-36.pyc | Bin 0 -> 6744 bytes .../__pycache__/unicode_utils.cpython-36.pyc | Bin 0 -> 1127 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 286 bytes .../__pycache__/wheel.cpython-36.pyc | Bin 0 -> 5781 bytes .../windows_support.cpython-36.pyc | Bin 0 -> 969 bytes .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 148 bytes .../__pycache__/pyparsing.cpython-36.pyc | Bin 0 -> 201070 bytes .../_vendor/__pycache__/six.cpython-36.pyc | Bin 0 -> 24445 bytes .../setuptools/_vendor/packaging/__about__.py | 21 + .../setuptools/_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-36.pyc | Bin 0 -> 684 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 522 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 969 bytes .../__pycache__/_structures.cpython-36.pyc | Bin 0 -> 2826 bytes .../__pycache__/markers.cpython-36.pyc | Bin 0 -> 8846 bytes .../__pycache__/requirements.cpython-36.pyc | Bin 0 -> 3839 bytes .../__pycache__/specifiers.cpython-36.pyc | Bin 0 -> 19788 bytes .../__pycache__/utils.cpython-36.pyc | Bin 0 -> 453 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 10563 bytes .../setuptools/_vendor/packaging/_compat.py | 30 + .../_vendor/packaging/_structures.py | 68 + .../setuptools/_vendor/packaging/markers.py | 301 + .../_vendor/packaging/requirements.py | 127 + .../_vendor/packaging/specifiers.py | 774 + .../setuptools/_vendor/packaging/utils.py | 14 + .../setuptools/_vendor/packaging/version.py | 393 + .../setuptools/_vendor/pyparsing.py | 5696 ++++ .../site-packages/setuptools/_vendor/six.py | 868 + .../site-packages/setuptools/archive_util.py | 173 + .../site-packages/setuptools/build_meta.py | 172 + .../site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes .../site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 18 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 699 bytes .../command/__pycache__/alias.cpython-36.pyc | Bin 0 -> 2392 bytes .../__pycache__/bdist_egg.cpython-36.pyc | Bin 0 -> 14373 bytes .../__pycache__/bdist_rpm.cpython-36.pyc | Bin 0 -> 1735 bytes .../__pycache__/bdist_wininst.cpython-36.pyc | Bin 0 -> 936 bytes .../__pycache__/build_clib.cpython-36.pyc | Bin 0 -> 2407 bytes .../__pycache__/build_ext.cpython-36.pyc | Bin 0 -> 10006 bytes .../__pycache__/build_py.cpython-36.pyc | Bin 0 -> 8531 bytes .../__pycache__/develop.cpython-36.pyc | Bin 0 -> 6385 bytes .../__pycache__/dist_info.cpython-36.pyc | Bin 0 -> 1352 bytes .../__pycache__/easy_install.cpython-36.pyc | Bin 0 -> 66239 bytes .../__pycache__/egg_info.cpython-36.pyc | Bin 0 -> 20935 bytes .../__pycache__/install.cpython-36.pyc | Bin 0 -> 3932 bytes .../install_egg_info.cpython-36.pyc | Bin 0 -> 2916 bytes .../__pycache__/install_lib.cpython-36.pyc | Bin 0 -> 5050 bytes .../install_scripts.cpython-36.pyc | Bin 0 -> 2237 bytes .../__pycache__/py36compat.cpython-36.pyc | Bin 0 -> 4582 bytes .../__pycache__/register.cpython-36.pyc | Bin 0 -> 552 bytes .../command/__pycache__/rotate.cpython-36.pyc | Bin 0 -> 2538 bytes .../__pycache__/saveopts.cpython-36.pyc | Bin 0 -> 883 bytes .../command/__pycache__/sdist.cpython-36.pyc | Bin 0 -> 6347 bytes .../command/__pycache__/setopt.cpython-36.pyc | Bin 0 -> 4561 bytes .../command/__pycache__/test.cpython-36.pyc | Bin 0 -> 8120 bytes .../command/__pycache__/upload.cpython-36.pyc | Bin 0 -> 1350 bytes .../__pycache__/upload_docs.cpython-36.pyc | Bin 0 -> 6059 bytes .../site-packages/setuptools/command/alias.py | 80 + .../setuptools/command/bdist_egg.py | 502 + .../setuptools/command/bdist_rpm.py | 43 + .../setuptools/command/bdist_wininst.py | 21 + .../setuptools/command/build_clib.py | 98 + .../setuptools/command/build_ext.py | 331 + .../setuptools/command/build_py.py | 270 + .../setuptools/command/develop.py | 216 + .../setuptools/command/dist_info.py | 36 + .../setuptools/command/easy_install.py | 2389 ++ .../setuptools/command/egg_info.py | 696 + .../setuptools/command/install.py | 125 + .../setuptools/command/install_egg_info.py | 82 + .../setuptools/command/install_lib.py | 148 + .../setuptools/command/install_scripts.py | 65 + .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/py36compat.py | 136 + .../setuptools/command/register.py | 10 + .../setuptools/command/rotate.py | 66 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 200 + .../setuptools/command/setopt.py | 149 + .../site-packages/setuptools/command/test.py | 268 + .../setuptools/command/upload.py | 42 + .../setuptools/command/upload_docs.py | 206 + .../site-packages/setuptools/config.py | 556 + .../site-packages/setuptools/dep_util.py | 23 + .../site-packages/setuptools/depends.py | 186 + .../site-packages/setuptools/dist.py | 1070 + .../site-packages/setuptools/extension.py | 57 + .../setuptools/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2387 bytes .../site-packages/setuptools/glibc.py | 86 + .../site-packages/setuptools/glob.py | 176 + .../site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes .../site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/launch.py | 35 + .../site-packages/setuptools/lib2to3_ex.py | 62 + .../site-packages/setuptools/monkey.py | 197 + .../site-packages/setuptools/msvc.py | 1302 + .../site-packages/setuptools/namespaces.py | 107 + .../site-packages/setuptools/package_index.py | 1119 + .../site-packages/setuptools/pep425tags.py | 316 + .../site-packages/setuptools/py27compat.py | 28 + .../site-packages/setuptools/py31compat.py | 41 + .../site-packages/setuptools/py33compat.py | 54 + .../site-packages/setuptools/py36compat.py | 82 + .../site-packages/setuptools/sandbox.py | 491 + .../setuptools/script (dev).tmpl | 5 + .../site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/site-patch.py | 74 + .../site-packages/setuptools/ssl_support.py | 260 + .../site-packages/setuptools/unicode_utils.py | 44 + .../site-packages/setuptools/version.py | 6 + .../site-packages/setuptools/wheel.py | 163 + .../setuptools/windows_support.py | 29 + .../INSTALLER | 1 + .../LICENSE | 254 + .../METADATA | 43 + .../RECORD | 8 + .../typing_extensions-3.7.4.3.dist-info/WHEEL | 5 + .../top_level.txt | 1 + .../site-packages/typing_extensions.py | 2168 ++ .../yarl-1.5.1.dist-info/INSTALLER | 1 + .../yarl-1.5.1.dist-info/LICENSE | 201 + .../yarl-1.5.1.dist-info/METADATA | 701 + .../site-packages/yarl-1.5.1.dist-info/RECORD | 20 + .../site-packages/yarl-1.5.1.dist-info/WHEEL | 5 + .../yarl-1.5.1.dist-info/top_level.txt | 1 + .../python3.6/site-packages/yarl/__init__.py | 5 + .../python3.6/site-packages/yarl/__init__.pyi | 110 + .../yarl/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 312 bytes .../yarl/__pycache__/_quoting.cpython-36.pyc | Bin 0 -> 486 bytes .../__pycache__/_quoting_py.cpython-36.pyc | Bin 0 -> 4078 bytes .../yarl/__pycache__/_url.cpython-36.pyc | Bin 0 -> 25373 bytes .../python3.6/site-packages/yarl/_quoting.py | 18 + .../python3.6/site-packages/yarl/_quoting_c.c | 12380 ++++++++ ..._quoting_c.cpython-36m-x86_64-linux-gnu.so | Bin 0 -> 570989 bytes .../site-packages/yarl/_quoting_c.pyi | 16 + .../site-packages/yarl/_quoting_c.pyx | 394 + .../site-packages/yarl/_quoting_py.py | 206 + .../lib/python3.6/site-packages/yarl/_url.py | 1106 + .../lib/python3.6/site-packages/yarl/py.typed | 1 + venv-linux/lib64 | 1 + venv-linux/pyvenv.cfg | 3 + .../CacheControl-0.11.7-py2.py3-none-any.whl | Bin 0 -> 18720 bytes .../appdirs-1.4.3-py2.py3-none-any.whl | Bin 0 -> 12139 bytes .../certifi-2018.1.18-py2.py3-none-any.whl | Bin 0 -> 150807 bytes .../chardet-3.0.4-py2.py3-none-any.whl | Bin 0 -> 133328 bytes .../colorama-0.3.7-py2.py3-none-any.whl | Bin 0 -> 19915 bytes .../distlib-0.2.6-py2.py3-none-any.whl | Bin 0 -> 141707 bytes .../distro-1.0.1-py2.py3-none-any.whl | Bin 0 -> 11733 bytes .../html5lib-0.999999999-py2.py3-none-any.whl | Bin 0 -> 112620 bytes .../idna-2.6-py2.py3-none-any.whl | Bin 0 -> 56485 bytes .../ipaddress-0.0.0-py2.py3-none-any.whl | Bin 0 -> 17503 bytes .../lockfile-0.12.2-py2.py3-none-any.whl | Bin 0 -> 13506 bytes .../packaging-17.1-py2.py3-none-any.whl | Bin 0 -> 24058 bytes .../pip-9.0.1-py2.py3-none-any.whl | Bin 0 -> 159285 bytes .../pkg_resources-0.0.0-py2.py3-none-any.whl | Bin 0 -> 115663 bytes .../progress-1.2-py2.py3-none-any.whl | Bin 0 -> 9606 bytes .../pyparsing-2.2.0-py2.py3-none-any.whl | Bin 0 -> 56411 bytes .../requests-2.18.4-py2.py3-none-any.whl | Bin 0 -> 88788 bytes .../retrying-1.3.3-py2.py3-none-any.whl | Bin 0 -> 9480 bytes .../setuptools-39.0.1-py2.py3-none-any.whl | Bin 0 -> 455758 bytes .../six-1.11.0-py2.py3-none-any.whl | Bin 0 -> 10720 bytes .../urllib3-1.22-py2.py3-none-any.whl | Bin 0 -> 125332 bytes .../webencodings-0.5-py2.py3-none-any.whl | Bin 0 -> 11646 bytes .../wheel-0.30.0-py2.py3-none-any.whl | Bin 0 -> 48886 bytes 877 files changed, 209229 insertions(+) create mode 100644 venv-linux/bin/activate create mode 100644 venv-linux/bin/activate.csh create mode 100644 venv-linux/bin/activate.fish create mode 100755 venv-linux/bin/chardetect create mode 100755 venv-linux/bin/easy_install create mode 100755 venv-linux/bin/easy_install-3.6 create mode 100755 venv-linux/bin/pip create mode 100755 venv-linux/bin/pip3 create mode 100755 venv-linux/bin/pip3.6 create mode 120000 venv-linux/bin/python create mode 120000 venv-linux/bin/python3 create mode 100644 venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/LICENSE create mode 100644 venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/pbr.json create mode 100644 venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/top_level.txt create mode 100644 venv-linux/lib/python3.6/site-packages/__pycache__/easy_install.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/__pycache__/idna_ssl.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/__pycache__/typing_extensions.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/LICENSE.txt create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/top_level.txt create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/abc.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/base_protocol.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/client.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/client_exceptions.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/client_proto.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/client_reqrep.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/client_ws.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/connector.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/cookiejar.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/formdata.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/frozenlist.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/hdrs.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/helpers.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/http.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/http_exceptions.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/http_parser.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/http_websocket.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/http_writer.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/locks.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/log.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/multipart.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/payload.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/payload_streamer.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/pytest_plugin.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/resolver.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/signals.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/streams.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/tcp_helpers.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/test_utils.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/tracing.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/typedefs.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_app.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_exceptions.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_fileresponse.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_log.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_middlewares.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_protocol.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_request.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_response.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_routedef.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_runner.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_server.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_urldispatcher.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_ws.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/worker.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_cparser.pxd create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_find_header.c create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_find_header.h create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_find_header.pxd create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_frozenlist.c create mode 100755 venv-linux/lib/python3.6/site-packages/aiohttp/_frozenlist.cpython-36m-x86_64-linux-gnu.so create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_frozenlist.pyx create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_headers.pxi create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.c create mode 100755 venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.cpython-36m-x86_64-linux-gnu.so create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.pyi create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.pyx create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_http_parser.c create mode 100755 venv-linux/lib/python3.6/site-packages/aiohttp/_http_parser.cpython-36m-x86_64-linux-gnu.so create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_http_parser.pyx create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_http_writer.c create mode 100755 venv-linux/lib/python3.6/site-packages/aiohttp/_http_writer.cpython-36m-x86_64-linux-gnu.so create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_http_writer.pyx create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_websocket.c create mode 100755 venv-linux/lib/python3.6/site-packages/aiohttp/_websocket.cpython-36m-x86_64-linux-gnu.so create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/_websocket.pyx create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/abc.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/base_protocol.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/client.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/client_exceptions.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/client_proto.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/client_reqrep.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/client_ws.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/connector.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/cookiejar.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/formdata.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/frozenlist.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/frozenlist.pyi create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/hdrs.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/helpers.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/http.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/http_exceptions.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/http_parser.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/http_websocket.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/http_writer.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/locks.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/log.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/multipart.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/payload.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/payload_streamer.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/py.typed create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/pytest_plugin.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/resolver.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/signals.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/signals.pyi create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/streams.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/tcp_helpers.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/test_utils.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/tracing.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/typedefs.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/web.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/web_app.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/web_exceptions.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/web_fileresponse.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/web_log.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/web_middlewares.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/web_protocol.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/web_request.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/web_response.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/web_routedef.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/web_runner.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/web_server.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/web_urldispatcher.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/web_ws.py create mode 100644 venv-linux/lib/python3.6/site-packages/aiohttp/worker.py create mode 100644 venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/LICENSE create mode 100644 venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/top_level.txt create mode 100644 venv-linux/lib/python3.6/site-packages/async_timeout/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/async_timeout/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/async_timeout/py.typed create mode 100644 venv-linux/lib/python3.6/site-packages/attr/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/attr/__init__.pyi create mode 100644 venv-linux/lib/python3.6/site-packages/attr/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/attr/__pycache__/_compat.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/attr/__pycache__/_config.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/attr/__pycache__/_funcs.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/attr/__pycache__/_make.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/attr/__pycache__/_next_gen.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/attr/__pycache__/_version_info.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/attr/__pycache__/converters.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/attr/__pycache__/exceptions.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/attr/__pycache__/filters.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/attr/__pycache__/setters.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/attr/__pycache__/validators.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/attr/_compat.py create mode 100644 venv-linux/lib/python3.6/site-packages/attr/_config.py create mode 100644 venv-linux/lib/python3.6/site-packages/attr/_funcs.py create mode 100644 venv-linux/lib/python3.6/site-packages/attr/_make.py create mode 100644 venv-linux/lib/python3.6/site-packages/attr/_next_gen.py create mode 100644 venv-linux/lib/python3.6/site-packages/attr/_version_info.py create mode 100644 venv-linux/lib/python3.6/site-packages/attr/_version_info.pyi create mode 100644 venv-linux/lib/python3.6/site-packages/attr/converters.py create mode 100644 venv-linux/lib/python3.6/site-packages/attr/converters.pyi create mode 100644 venv-linux/lib/python3.6/site-packages/attr/exceptions.py create mode 100644 venv-linux/lib/python3.6/site-packages/attr/exceptions.pyi create mode 100644 venv-linux/lib/python3.6/site-packages/attr/filters.py create mode 100644 venv-linux/lib/python3.6/site-packages/attr/filters.pyi create mode 100644 venv-linux/lib/python3.6/site-packages/attr/py.typed create mode 100644 venv-linux/lib/python3.6/site-packages/attr/setters.py create mode 100644 venv-linux/lib/python3.6/site-packages/attr/setters.pyi create mode 100644 venv-linux/lib/python3.6/site-packages/attr/validators.py create mode 100644 venv-linux/lib/python3.6/site-packages/attr/validators.pyi create mode 100644 venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/AUTHORS.rst create mode 100644 venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/LICENSE create mode 100644 venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/top_level.txt create mode 100644 venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/DESCRIPTION.rst create mode 100644 venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/entry_points.txt create mode 100644 venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/metadata.json create mode 100644 venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/top_level.txt create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/big5freq.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/big5prober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/chardistribution.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/charsetgroupprober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/charsetprober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/codingstatemachine.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/compat.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/cp949prober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/enums.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/escprober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/escsm.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/eucjpprober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/euckrfreq.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/euckrprober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/euctwfreq.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/euctwprober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/gb2312freq.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/gb2312prober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/hebrewprober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/jisfreq.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/jpcntx.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langbulgarianmodel.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langcyrillicmodel.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langgreekmodel.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langhebrewmodel.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langhungarianmodel.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langthaimodel.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langturkishmodel.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/latin1prober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/mbcharsetprober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/mbcsgroupprober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/mbcssm.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/sbcharsetprober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/sbcsgroupprober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/sjisprober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/universaldetector.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/utf8prober.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/__pycache__/version.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/big5freq.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/big5prober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/chardistribution.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/charsetgroupprober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/charsetprober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/cli/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/cli/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/cli/__pycache__/chardetect.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/cli/chardetect.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/codingstatemachine.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/compat.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/cp949prober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/enums.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/escprober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/escsm.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/eucjpprober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/euckrfreq.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/euckrprober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/euctwfreq.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/euctwprober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/gb2312freq.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/gb2312prober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/hebrewprober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/jisfreq.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/jpcntx.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/langbulgarianmodel.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/langcyrillicmodel.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/langgreekmodel.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/langhebrewmodel.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/langhungarianmodel.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/langthaimodel.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/langturkishmodel.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/latin1prober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/mbcharsetprober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/mbcsgroupprober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/mbcssm.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/sbcharsetprober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/sbcsgroupprober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/sjisprober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/universaldetector.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/utf8prober.py create mode 100644 venv-linux/lib/python3.6/site-packages/chardet/version.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/top_level.txt create mode 100644 venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/LICENSE create mode 100644 venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/authors.sh create mode 100644 venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/top_level.txt create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__main__.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/__main__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/abc.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/activity.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/appinfo.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/asset.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/audit_logs.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/backoff.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/calls.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/channel.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/client.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/colour.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/context_managers.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/embeds.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/emoji.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/enums.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/errors.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/file.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/flags.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/gateway.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/guild.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/http.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/integrations.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/invite.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/iterators.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/member.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/mentions.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/message.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/mixins.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/object.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/oggparse.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/opus.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/partial_emoji.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/permissions.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/player.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/raw_models.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/reaction.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/relationship.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/role.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/shard.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/state.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/team.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/template.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/user.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/utils.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/voice_client.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/webhook.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/__pycache__/widget.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/abc.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/activity.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/appinfo.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/asset.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/audit_logs.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/backoff.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/bin/libopus-0.x64.dll create mode 100644 venv-linux/lib/python3.6/site-packages/discord/bin/libopus-0.x86.dll create mode 100644 venv-linux/lib/python3.6/site-packages/discord/calls.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/channel.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/client.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/colour.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/context_managers.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/embeds.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/emoji.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/enums.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/errors.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/__pycache__/_types.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/__pycache__/bot.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/__pycache__/cog.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/__pycache__/context.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/__pycache__/converter.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/__pycache__/cooldowns.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/__pycache__/core.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/__pycache__/errors.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/__pycache__/help.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/__pycache__/view.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/_types.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/bot.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/cog.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/context.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/converter.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/cooldowns.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/core.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/errors.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/help.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/commands/view.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/tasks/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/ext/tasks/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/discord/file.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/flags.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/gateway.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/guild.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/http.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/integrations.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/invite.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/iterators.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/member.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/mentions.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/message.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/mixins.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/object.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/oggparse.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/opus.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/partial_emoji.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/permissions.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/player.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/raw_models.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/reaction.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/relationship.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/role.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/shard.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/state.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/team.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/template.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/user.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/utils.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/voice_client.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/webhook.py create mode 100644 venv-linux/lib/python3.6/site-packages/discord/widget.py create mode 100644 venv-linux/lib/python3.6/site-packages/easy_install.py create mode 100644 venv-linux/lib/python3.6/site-packages/idna-2.10.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/idna-2.10.dist-info/LICENSE.rst create mode 100644 venv-linux/lib/python3.6/site-packages/idna-2.10.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/idna-2.10.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/idna-2.10.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/idna-2.10.dist-info/top_level.txt create mode 100644 venv-linux/lib/python3.6/site-packages/idna/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/idna/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/idna/__pycache__/codec.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/idna/__pycache__/compat.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/idna/__pycache__/core.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/idna/__pycache__/idnadata.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/idna/__pycache__/intranges.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/idna/__pycache__/package_data.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/idna/__pycache__/uts46data.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/idna/codec.py create mode 100644 venv-linux/lib/python3.6/site-packages/idna/compat.py create mode 100644 venv-linux/lib/python3.6/site-packages/idna/core.py create mode 100644 venv-linux/lib/python3.6/site-packages/idna/idnadata.py create mode 100644 venv-linux/lib/python3.6/site-packages/idna/intranges.py create mode 100644 venv-linux/lib/python3.6/site-packages/idna/package_data.py create mode 100644 venv-linux/lib/python3.6/site-packages/idna/uts46data.py create mode 100644 venv-linux/lib/python3.6/site-packages/idna_ssl-1.1.0.dist-info/DESCRIPTION.rst create mode 100644 venv-linux/lib/python3.6/site-packages/idna_ssl-1.1.0.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/idna_ssl-1.1.0.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/idna_ssl-1.1.0.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/idna_ssl-1.1.0.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/idna_ssl-1.1.0.dist-info/metadata.json create mode 100644 venv-linux/lib/python3.6/site-packages/idna_ssl-1.1.0.dist-info/top_level.txt create mode 100644 venv-linux/lib/python3.6/site-packages/idna_ssl.py create mode 100644 venv-linux/lib/python3.6/site-packages/multidict-4.7.6.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/multidict-4.7.6.dist-info/LICENSE create mode 100644 venv-linux/lib/python3.6/site-packages/multidict-4.7.6.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/multidict-4.7.6.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/multidict-4.7.6.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/multidict-4.7.6.dist-info/top_level.txt create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/__init__.pyi create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/__pycache__/_abc.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/__pycache__/_compat.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/__pycache__/_multidict_base.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/__pycache__/_multidict_py.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/_abc.py create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/_compat.py create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/_multidict.c create mode 100755 venv-linux/lib/python3.6/site-packages/multidict/_multidict.cpython-36m-x86_64-linux-gnu.so create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/_multidict_base.py create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/_multidict_py.py create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/_multilib/defs.h create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/_multilib/dict.h create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/_multilib/istr.h create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/_multilib/iter.h create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/_multilib/pair_list.h create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/_multilib/views.h create mode 100644 venv-linux/lib/python3.6/site-packages/multidict/py.typed create mode 100644 venv-linux/lib/python3.6/site-packages/pip-9.0.1.dist-info/DESCRIPTION.rst create mode 100644 venv-linux/lib/python3.6/site-packages/pip-9.0.1.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/pip-9.0.1.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/pip-9.0.1.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/pip-9.0.1.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/pip-9.0.1.dist-info/entry_points.txt create mode 100644 venv-linux/lib/python3.6/site-packages/pip-9.0.1.dist-info/metadata.json create mode 100644 venv-linux/lib/python3.6/site-packages/pip-9.0.1.dist-info/top_level.txt create mode 100644 venv-linux/lib/python3.6/site-packages/pip/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/__main__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/__pycache__/__main__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/__pycache__/basecommand.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/__pycache__/baseparser.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/__pycache__/cmdoptions.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/__pycache__/download.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/__pycache__/exceptions.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/__pycache__/index.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/__pycache__/locations.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/__pycache__/pep425tags.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/__pycache__/status_codes.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/__pycache__/wheel.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/_vendor/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/basecommand.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/baseparser.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/cmdoptions.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/__pycache__/check.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/__pycache__/completion.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/__pycache__/download.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/__pycache__/freeze.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/__pycache__/hash.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/__pycache__/help.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/__pycache__/install.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/__pycache__/list.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/__pycache__/search.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/__pycache__/show.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/__pycache__/uninstall.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/__pycache__/wheel.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/check.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/completion.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/download.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/freeze.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/hash.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/help.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/install.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/list.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/search.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/show.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/uninstall.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/commands/wheel.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/compat/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/compat/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/compat/__pycache__/dictconfig.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/compat/dictconfig.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/download.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/exceptions.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/index.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/locations.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/models/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/models/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/models/__pycache__/index.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/models/index.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/operations/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/operations/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/operations/__pycache__/check.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/operations/__pycache__/freeze.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/operations/check.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/operations/freeze.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/pep425tags.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/req/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/req/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/req/__pycache__/req_file.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/req/__pycache__/req_install.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/req/__pycache__/req_set.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/req/__pycache__/req_uninstall.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/req/req_file.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/req/req_install.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/req/req_set.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/req/req_uninstall.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/status_codes.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/__pycache__/appdirs.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/__pycache__/build.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/__pycache__/deprecation.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/__pycache__/encoding.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/__pycache__/filesystem.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/__pycache__/glibc.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/__pycache__/hashes.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/__pycache__/logging.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/__pycache__/outdated.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/__pycache__/packaging.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/__pycache__/setuptools_build.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/__pycache__/ui.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/appdirs.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/build.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/deprecation.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/encoding.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/filesystem.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/glibc.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/hashes.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/logging.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/outdated.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/packaging.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/setuptools_build.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/utils/ui.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/vcs/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/vcs/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/vcs/__pycache__/bazaar.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/vcs/__pycache__/git.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/vcs/__pycache__/mercurial.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/vcs/__pycache__/subversion.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pip/vcs/bazaar.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/vcs/git.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/vcs/mercurial.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/vcs/subversion.py create mode 100644 venv-linux/lib/python3.6/site-packages/pip/wheel.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/metadata.json create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/__pycache__/py31compat.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/appdirs.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_compat.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/_vendor/six.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/extern/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pkg_resources/py31compat.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/__pycache__/_auth.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/__pycache__/_compat.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/__pycache__/_socketio.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/__pycache__/charset.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/__pycache__/connections.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/__pycache__/converters.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/__pycache__/cursors.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/__pycache__/err.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/__pycache__/optionfile.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/__pycache__/protocol.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/__pycache__/times.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/__pycache__/util.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/_auth.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/_compat.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/_socketio.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/charset.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/connections.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/CLIENT.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/COMMAND.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/CR.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/ER.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/FIELD_TYPE.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/FLAG.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/SERVER_STATUS.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/__pycache__/CLIENT.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/__pycache__/COMMAND.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/__pycache__/CR.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/__pycache__/ER.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/__pycache__/FIELD_TYPE.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/__pycache__/FLAG.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/__pycache__/SERVER_STATUS.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/constants/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/converters.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/cursors.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/err.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/optionfile.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/protocol.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/times.py create mode 100644 venv-linux/lib/python3.6/site-packages/pymysql/util.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/DESCRIPTION.rst create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/dependency_links.txt create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/entry_points.txt create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/metadata.json create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/top_level.txt create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools-39.0.1.dist-info/zip-safe create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/archive_util.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/build_meta.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/config.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/dep_util.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/depends.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/dist.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/extension.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/glibc.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/glob.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/launch.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/monkey.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/msvc.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/namespaces.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/package_index.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/pep425tags.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/py27compat.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/py31compat.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/py33compat.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/py36compat.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/sandbox.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/site-patch.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/ssl_support.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/unicode_utils.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/version.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/wheel.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/__pycache__/windows_support.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/six.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/__about__.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/_compat.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/_structures.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/markers.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/requirements.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/specifiers.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/utils.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/packaging/version.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/pyparsing.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/_vendor/six.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/archive_util.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/build_meta.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/cli-32.exe create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/cli-64.exe create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/cli.exe create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/alias.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/build_clib.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/build_ext.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/build_py.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/develop.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/dist_info.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/easy_install.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/egg_info.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/install.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/install_lib.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/install_scripts.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/py36compat.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/register.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/rotate.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/saveopts.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/sdist.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/setopt.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/test.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/upload.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/__pycache__/upload_docs.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/alias.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/bdist_egg.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/bdist_rpm.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/bdist_wininst.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/build_clib.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/build_ext.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/build_py.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/develop.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/dist_info.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/easy_install.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/egg_info.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/install.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/install_egg_info.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/install_lib.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/install_scripts.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/launcher manifest.xml create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/py36compat.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/register.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/rotate.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/saveopts.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/sdist.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/setopt.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/test.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/upload.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/command/upload_docs.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/config.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/dep_util.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/depends.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/dist.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/extension.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/extern/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/extern/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/glibc.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/glob.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/gui-32.exe create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/gui-64.exe create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/gui.exe create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/launch.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/lib2to3_ex.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/monkey.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/msvc.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/namespaces.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/package_index.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/pep425tags.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/py27compat.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/py31compat.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/py33compat.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/py36compat.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/sandbox.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/script (dev).tmpl create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/script.tmpl create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/site-patch.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/ssl_support.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/unicode_utils.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/version.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/wheel.py create mode 100644 venv-linux/lib/python3.6/site-packages/setuptools/windows_support.py create mode 100644 venv-linux/lib/python3.6/site-packages/typing_extensions-3.7.4.3.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/typing_extensions-3.7.4.3.dist-info/LICENSE create mode 100644 venv-linux/lib/python3.6/site-packages/typing_extensions-3.7.4.3.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/typing_extensions-3.7.4.3.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/typing_extensions-3.7.4.3.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/typing_extensions-3.7.4.3.dist-info/top_level.txt create mode 100644 venv-linux/lib/python3.6/site-packages/typing_extensions.py create mode 100644 venv-linux/lib/python3.6/site-packages/yarl-1.5.1.dist-info/INSTALLER create mode 100644 venv-linux/lib/python3.6/site-packages/yarl-1.5.1.dist-info/LICENSE create mode 100644 venv-linux/lib/python3.6/site-packages/yarl-1.5.1.dist-info/METADATA create mode 100644 venv-linux/lib/python3.6/site-packages/yarl-1.5.1.dist-info/RECORD create mode 100644 venv-linux/lib/python3.6/site-packages/yarl-1.5.1.dist-info/WHEEL create mode 100644 venv-linux/lib/python3.6/site-packages/yarl-1.5.1.dist-info/top_level.txt create mode 100644 venv-linux/lib/python3.6/site-packages/yarl/__init__.py create mode 100644 venv-linux/lib/python3.6/site-packages/yarl/__init__.pyi create mode 100644 venv-linux/lib/python3.6/site-packages/yarl/__pycache__/__init__.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/yarl/__pycache__/_quoting.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/yarl/__pycache__/_quoting_py.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/yarl/__pycache__/_url.cpython-36.pyc create mode 100644 venv-linux/lib/python3.6/site-packages/yarl/_quoting.py create mode 100644 venv-linux/lib/python3.6/site-packages/yarl/_quoting_c.c create mode 100755 venv-linux/lib/python3.6/site-packages/yarl/_quoting_c.cpython-36m-x86_64-linux-gnu.so create mode 100644 venv-linux/lib/python3.6/site-packages/yarl/_quoting_c.pyi create mode 100644 venv-linux/lib/python3.6/site-packages/yarl/_quoting_c.pyx create mode 100644 venv-linux/lib/python3.6/site-packages/yarl/_quoting_py.py create mode 100644 venv-linux/lib/python3.6/site-packages/yarl/_url.py create mode 100644 venv-linux/lib/python3.6/site-packages/yarl/py.typed create mode 120000 venv-linux/lib64 create mode 100644 venv-linux/pyvenv.cfg create mode 100644 venv-linux/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/distro-1.0.1-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/idna-2.6-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/packaging-17.1-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/progress-1.2-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/pyparsing-2.2.0-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/requests-2.18.4-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/setuptools-39.0.1-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/six-1.11.0-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl create mode 100644 venv-linux/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl diff --git a/venv-linux/bin/activate b/venv-linux/bin/activate new file mode 100644 index 0000000..eb00f38 --- /dev/null +++ b/venv-linux/bin/activate @@ -0,0 +1,76 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # This should detect bash and zsh, which have a hash command that must + # be called to get it to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r + fi + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + if [ ! "$1" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="/home/officereso/Discord_Bot/venv-linux" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/bin:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + if [ "x(venv-linux) " != x ] ; then + PS1="(venv-linux) ${PS1:-}" + else + if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" + else + PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" + fi + fi + export PS1 +fi + +# This should detect bash and zsh, which have a hash command that must +# be called to get it to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r +fi diff --git a/venv-linux/bin/activate.csh b/venv-linux/bin/activate.csh new file mode 100644 index 0000000..74e306b --- /dev/null +++ b/venv-linux/bin/activate.csh @@ -0,0 +1,37 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. +# Created by Davide Di Blasi . +# Ported to Python 3.3 venv by Andrew Svetlov + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV "/home/officereso/Discord_Bot/venv-linux" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + if ("venv-linux" != "") then + set env_name = "venv-linux" + else + if (`basename "VIRTUAL_ENV"` == "__") then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + set env_name = `basename \`dirname "$VIRTUAL_ENV"\`` + else + set env_name = `basename "$VIRTUAL_ENV"` + endif + endif + set prompt = "[$env_name] $prompt" + unset env_name +endif + +alias pydoc python -m pydoc + +rehash diff --git a/venv-linux/bin/activate.fish b/venv-linux/bin/activate.fish new file mode 100644 index 0000000..e218e26 --- /dev/null +++ b/venv-linux/bin/activate.fish @@ -0,0 +1,75 @@ +# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org) +# you cannot run it directly + +function deactivate -d "Exit virtualenv and return to normal shell environment" + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + functions -e fish_prompt + set -e _OLD_FISH_PROMPT_OVERRIDE + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + end + + set -e VIRTUAL_ENV + if test "$argv[1]" != "nondestructive" + # Self destruct! + functions -e deactivate + end +end + +# unset irrelevant variables +deactivate nondestructive + +set -gx VIRTUAL_ENV "/home/officereso/Discord_Bot/venv-linux" + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/bin" $PATH + +# unset PYTHONHOME if set +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # fish uses a function instead of an env var to generate the prompt. + + # save the current fish_prompt function as the function _old_fish_prompt + functions -c fish_prompt _old_fish_prompt + + # with the original prompt function renamed, we can override with our own. + function fish_prompt + # Save the return status of the last command + set -l old_status $status + + # Prompt override? + if test -n "(venv-linux) " + printf "%s%s" "(venv-linux) " (set_color normal) + else + # ...Otherwise, prepend env + set -l _checkbase (basename "$VIRTUAL_ENV") + if test $_checkbase = "__" + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) + else + printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) + end + end + + # Restore the return status of the previous command. + echo "exit $old_status" | . + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" +end diff --git a/venv-linux/bin/chardetect b/venv-linux/bin/chardetect new file mode 100755 index 0000000..7180376 --- /dev/null +++ b/venv-linux/bin/chardetect @@ -0,0 +1,11 @@ +#!/home/officereso/Discord_Bot/venv-linux/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from chardet.cli.chardetect import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv-linux/bin/easy_install b/venv-linux/bin/easy_install new file mode 100755 index 0000000..2ae8941 --- /dev/null +++ b/venv-linux/bin/easy_install @@ -0,0 +1,11 @@ +#!/home/officereso/Discord_Bot/venv-linux/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv-linux/bin/easy_install-3.6 b/venv-linux/bin/easy_install-3.6 new file mode 100755 index 0000000..2ae8941 --- /dev/null +++ b/venv-linux/bin/easy_install-3.6 @@ -0,0 +1,11 @@ +#!/home/officereso/Discord_Bot/venv-linux/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv-linux/bin/pip b/venv-linux/bin/pip new file mode 100755 index 0000000..7ba57b6 --- /dev/null +++ b/venv-linux/bin/pip @@ -0,0 +1,11 @@ +#!/home/officereso/Discord_Bot/venv-linux/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv-linux/bin/pip3 b/venv-linux/bin/pip3 new file mode 100755 index 0000000..7ba57b6 --- /dev/null +++ b/venv-linux/bin/pip3 @@ -0,0 +1,11 @@ +#!/home/officereso/Discord_Bot/venv-linux/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv-linux/bin/pip3.6 b/venv-linux/bin/pip3.6 new file mode 100755 index 0000000..7ba57b6 --- /dev/null +++ b/venv-linux/bin/pip3.6 @@ -0,0 +1,11 @@ +#!/home/officereso/Discord_Bot/venv-linux/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv-linux/bin/python b/venv-linux/bin/python new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/venv-linux/bin/python @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/venv-linux/bin/python3 b/venv-linux/bin/python3 new file mode 120000 index 0000000..ae65fda --- /dev/null +++ b/venv-linux/bin/python3 @@ -0,0 +1 @@ +/usr/bin/python3 \ No newline at end of file diff --git a/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/INSTALLER b/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/LICENSE b/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/LICENSE new file mode 100644 index 0000000..86b18e1 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2010, 2013 PyMySQL contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/METADATA b/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/METADATA new file mode 100644 index 0000000..09edaae --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/METADATA @@ -0,0 +1,189 @@ +Metadata-Version: 2.1 +Name: PyMySQL +Version: 0.10.1 +Summary: Pure Python MySQL Driver +Home-page: https://github.com/PyMySQL/PyMySQL/ +Author: yutaka.matsubara +Author-email: yutaka.matsubara@gmail.com +Maintainer: Inada Naoki +Maintainer-email: songofacandy@gmail.com +License: "MIT" +Project-URL: Documentation, https://pymysql.readthedocs.io/ +Keywords: MySQL +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Topic :: Database +Provides-Extra: ed25519 +Requires-Dist: PyNaCl (>=1.4.0) ; extra == 'ed25519' +Provides-Extra: rsa +Requires-Dist: cryptography ; extra == 'rsa' + +.. image:: https://readthedocs.org/projects/pymysql/badge/?version=latest + :target: https://pymysql.readthedocs.io/ + :alt: Documentation Status + +.. image:: https://badge.fury.io/py/PyMySQL.svg + :target: https://badge.fury.io/py/PyMySQL + +.. image:: https://travis-ci.org/PyMySQL/PyMySQL.svg?branch=master + :target: https://travis-ci.org/PyMySQL/PyMySQL + +.. image:: https://coveralls.io/repos/PyMySQL/PyMySQL/badge.svg?branch=master&service=github + :target: https://coveralls.io/github/PyMySQL/PyMySQL?branch=master + +.. image:: https://img.shields.io/badge/license-MIT-blue.svg + :target: https://github.com/PyMySQL/PyMySQL/blob/master/LICENSE + + +PyMySQL +======= + +.. contents:: Table of Contents + :local: + +This package contains a pure-Python MySQL client library, based on `PEP 249`_. + +Most public APIs are compatible with mysqlclient and MySQLdb. + +NOTE: PyMySQL doesn't support low level APIs `_mysql` provides like `data_seek`, +`store_result`, and `use_result`. You should use high level APIs defined in `PEP 249`_. +But some APIs like `autocommit` and `ping` are supported because `PEP 249`_ doesn't cover +their usecase. + +.. _`PEP 249`: https://www.python.org/dev/peps/pep-0249/ + + +Requirements +------------- + +* Python -- one of the following: + + - CPython_ : 2.7 and >= 3.5 + - PyPy_ : Latest version + +* MySQL Server -- one of the following: + + - MySQL_ >= 5.5 + - MariaDB_ >= 5.5 + +.. _CPython: https://www.python.org/ +.. _PyPy: https://pypy.org/ +.. _MySQL: https://www.mysql.com/ +.. _MariaDB: https://mariadb.org/ + + +Installation +------------ + +Package is uploaded on `PyPI `_. + +You can install it with pip:: + + $ python3 -m pip install PyMySQL + +To use "sha256_password" or "caching_sha2_password" for authenticate, +you need to install additional dependency:: + + $ python3 -m pip install PyMySQL[rsa] + +To use MariaDB's "ed25519" authentication method, you need to install +additional dependency:: + + $ python3 -m pip install PyMySQL[ed25519] + + +Documentation +------------- + +Documentation is available online: https://pymysql.readthedocs.io/ + +For support, please refer to the `StackOverflow +`_. + +Example +------- + +The following examples make use of a simple table + +.. code:: sql + + CREATE TABLE `users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `email` varchar(255) COLLATE utf8_bin NOT NULL, + `password` varchar(255) COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin + AUTO_INCREMENT=1 ; + + +.. code:: python + + import pymysql.cursors + + # Connect to the database + connection = pymysql.connect(host='localhost', + user='user', + password='passwd', + db='db', + charset='utf8mb4', + cursorclass=pymysql.cursors.DictCursor) + + try: + with connection.cursor() as cursor: + # Create a new record + sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)" + cursor.execute(sql, ('webmaster@python.org', 'very-secret')) + + # connection is not autocommit by default. So you must commit to save + # your changes. + connection.commit() + + with connection.cursor() as cursor: + # Read a single record + sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s" + cursor.execute(sql, ('webmaster@python.org',)) + result = cursor.fetchone() + print(result) + finally: + connection.close() + +This example will print: + +.. code:: python + + {'password': 'very-secret', 'id': 1} + + +Resources +--------- + +* DB-API 2.0: https://www.python.org/dev/peps/pep-0249/ + +* MySQL Reference Manuals: https://dev.mysql.com/doc/ + +* MySQL client/server protocol: + https://dev.mysql.com/doc/internals/en/client-server-protocol.html + +* "Connector" channel in MySQL Community Slack: + https://lefred.be/mysql-community-on-slack/ + +* PyMySQL mailing list: https://groups.google.com/forum/#!forum/pymysql-users + +License +------- + +PyMySQL is released under the MIT License. See LICENSE for more information. + + diff --git a/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/RECORD b/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/RECORD new file mode 100644 index 0000000..f4b49a3 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/RECORD @@ -0,0 +1,49 @@ +pymysql/__init__.py,sha256=KDHcmnEoEDMmRPNO5JFcxb7lsypDmwGn5Td-f-X6xDY,4733 +pymysql/_auth.py,sha256=pEeHBpQ15h2wfj6k7np6LVHVz34whEXSs5KrqeYtDGw,9564 +pymysql/_compat.py,sha256=DSxMV2ib-rhIuQIKiXX44yds_0bN2M_RddfYQiSdB6U,481 +pymysql/_socketio.py,sha256=smsw4wudNM4CKl85uis8QHfjDhz2iXQRvl8QV4TmB1w,4049 +pymysql/charset.py,sha256=zaaRbEQrFiE0iCd3AB52WJY9VqVxQcp8sYcoPDlPdWI,10308 +pymysql/connections.py,sha256=xR0gWxvQ6IxBcFhY9JPmYRCcvs6xSnRKUq-DZ6MpfNY,49010 +pymysql/converters.py,sha256=kUT2KQdkqNTuSxzURVnQKS1ZcatoFTUfYe5b5QSJuRI,11055 +pymysql/cursors.py,sha256=eiP_oTDi1MM5EYLHoecwbv5BXWJ1qEjfK8Uy3SjGEcs,16250 +pymysql/err.py,sha256=Vdrt2rVaSePVlB_uy0JNoeN6zYBt0_mM1UFDighLgNM,3734 +pymysql/optionfile.py,sha256=4yW8A7aAR2Aild7ibLOCzIlTCcYd90PtR8LRGJSZs8o,658 +pymysql/protocol.py,sha256=9hAfVK-g4i53gHMoGj9QrPApywMYVM8oxGAuKb_-PXo,12071 +pymysql/times.py,sha256=_qXgDaYwsHntvpIKSKXp1rrYIgtq6Z9pLyLnO2XNoL0,360 +pymysql/util.py,sha256=jKPts8cOMIXDndjsV3783VW-iq9uMxETWqfHP6Bd-Zo,180 +pymysql/constants/CLIENT.py,sha256=cPMxnQQbBG6xqaEDwqzggTfWIuJQ1Oy7HrIgw_vgpo4,853 +pymysql/constants/COMMAND.py,sha256=ypGdEUmi8m9cdBZ3rDU6mb7bsIyu9ldCDvc4pNF7V70,680 +pymysql/constants/CR.py,sha256=5ojVkbisyw7Qo_cTNpnHYvV6xHRZXK39Qqv8tjGbIbg,2228 +pymysql/constants/ER.py,sha256=cH5wgU-e70wd0uSygNR5IFCnnXcrR9WLwJPMH22bhUw,12296 +pymysql/constants/FIELD_TYPE.py,sha256=yHZLSyQewMxTDx4PLrI1H_iwH2FnsrgBZFa56UG2HiQ,372 +pymysql/constants/FLAG.py,sha256=Fy-PrCLnUI7fx_o5WypYnUAzWAM0E9d5yL8fFRVKffY,214 +pymysql/constants/SERVER_STATUS.py,sha256=KogVCOrV-S5aAFwyVKeKgua13nwdt1WFyHagjCZbcpM,334 +pymysql/constants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +PyMySQL-0.10.1.dist-info/LICENSE,sha256=MUEg3GXwgA9ziksxQAx27hTezR--d86cNUCkIbhup7Y,1070 +PyMySQL-0.10.1.dist-info/METADATA,sha256=SP0KPSfmgNJ2ujhGRrRRiWOodzv62BfYnbY1OXX3DTI,5481 +PyMySQL-0.10.1.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110 +PyMySQL-0.10.1.dist-info/pbr.json,sha256=Lqvh8-9N7qS6SLUlEJ5GDLWioQcvR9n1WWjMEfJ5mv8,47 +PyMySQL-0.10.1.dist-info/top_level.txt,sha256=IKlV-f4o90sOdnMd6HBvo0l2nqfJOGUzkwZeaEEGuRg,8 +PyMySQL-0.10.1.dist-info/RECORD,, +PyMySQL-0.10.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pymysql/__pycache__/connections.cpython-36.pyc,, +pymysql/__pycache__/times.cpython-36.pyc,, +pymysql/__pycache__/_socketio.cpython-36.pyc,, +pymysql/__pycache__/__init__.cpython-36.pyc,, +pymysql/__pycache__/_auth.cpython-36.pyc,, +pymysql/__pycache__/converters.cpython-36.pyc,, +pymysql/__pycache__/_compat.cpython-36.pyc,, +pymysql/__pycache__/optionfile.cpython-36.pyc,, +pymysql/__pycache__/cursors.cpython-36.pyc,, +pymysql/__pycache__/err.cpython-36.pyc,, +pymysql/__pycache__/util.cpython-36.pyc,, +pymysql/__pycache__/charset.cpython-36.pyc,, +pymysql/__pycache__/protocol.cpython-36.pyc,, +pymysql/constants/__pycache__/COMMAND.cpython-36.pyc,, +pymysql/constants/__pycache__/__init__.cpython-36.pyc,, +pymysql/constants/__pycache__/CR.cpython-36.pyc,, +pymysql/constants/__pycache__/CLIENT.cpython-36.pyc,, +pymysql/constants/__pycache__/SERVER_STATUS.cpython-36.pyc,, +pymysql/constants/__pycache__/FLAG.cpython-36.pyc,, +pymysql/constants/__pycache__/ER.cpython-36.pyc,, +pymysql/constants/__pycache__/FIELD_TYPE.cpython-36.pyc,, diff --git a/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/WHEEL b/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/WHEEL new file mode 100644 index 0000000..ef99c6c --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.34.2) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/pbr.json b/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/pbr.json new file mode 100644 index 0000000..127ed08 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/pbr.json @@ -0,0 +1 @@ +{"is_release": false, "git_version": "08bac52"} \ No newline at end of file diff --git a/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/top_level.txt b/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/top_level.txt new file mode 100644 index 0000000..d4a7eda --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/PyMySQL-0.10.1.dist-info/top_level.txt @@ -0,0 +1 @@ +pymysql diff --git a/venv-linux/lib/python3.6/site-packages/__pycache__/easy_install.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/__pycache__/easy_install.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf289103bc9908360558a4cbaf77d64b573f707f GIT binary patch literal 275 zcmYk!y-LJD5C`zt-RK4Jo!F3qr)T`;&`WH-fG*!UjyzEZ%- z%2%**qM{D`=L3e{>3n{0_WX*E0PsfnEl%4dB`&BbXh1W??sT5qj%YRnO>>>T1daZs``o6egu8)t~hw}{h=lU5@( zCsC&%B=1eEet=37iru%`3o>4y->31_K2~+Ip$=VGZimjO<$AsK-nXmzPpbb5RoIRB Sx%Fx=`hpP?CoAJQJ7k~y(oG%! literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/__pycache__/idna_ssl.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/__pycache__/idna_ssl.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6daead4347b2b36b51219d4326f75d79b72b3e6 GIT binary patch literal 942 zcmZuvO>fgc5ZzgS#IchUXo-3SaWNtvRS{e&goKbdMMy1z`eGUHRFs&EQd z{sMRY(n_2-(Ndi`50s1#z17e;fl)&5-Y~Q#f z75zk%yTr}T%Oovmcs%*kzs@*O=i7WG3$Ju7h~4B8S%c#uC99q zup{Nz1}O&J*+RExrY&cC?M){cq9H)x7+TP#;s8&%No|*r(2DgG14Tr@$T?A&T*b(M;6h>kJCJ|W-)MgOxb+QUl}ZEWDX#p0Y$}V=mhm3`U8WY$@l;O literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/__pycache__/typing_extensions.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/__pycache__/typing_extensions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6aca1340eea1636bb5335324201e8895dd2cbaa2 GIT binary patch literal 69935 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, Andrew Svetlov +Maintainer-email: aio-libs@googlegroups.com +License: Apache 2 +Project-URL: Chat: Gitter, https://gitter.im/aio-libs/Lobby +Project-URL: CI: AppVeyor, https://ci.appveyor.com/project/aio-libs/aiohttp +Project-URL: CI: Circle, https://circleci.com/gh/aio-libs/aiohttp +Project-URL: CI: Shippable, https://app.shippable.com/github/aio-libs/aiohttp +Project-URL: CI: Travis, https://travis-ci.com/aio-libs/aiohttp +Project-URL: Coverage: codecov, https://codecov.io/github/aio-libs/aiohttp +Project-URL: Docs: RTD, https://docs.aiohttp.org +Project-URL: GitHub: issues, https://github.com/aio-libs/aiohttp/issues +Project-URL: GitHub: repo, https://github.com/aio-libs/aiohttp +Platform: UNKNOWN +Classifier: License :: OSI Approved :: Apache Software License +Classifier: Intended Audience :: Developers +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Development Status :: 5 - Production/Stable +Classifier: Operating System :: POSIX +Classifier: Operating System :: MacOS :: MacOS X +Classifier: Operating System :: Microsoft :: Windows +Classifier: Topic :: Internet :: WWW/HTTP +Classifier: Framework :: AsyncIO +Requires-Python: >=3.5.3 +Requires-Dist: attrs (>=17.3.0) +Requires-Dist: chardet (<4.0,>=2.0) +Requires-Dist: multidict (<5.0,>=4.5) +Requires-Dist: async-timeout (<4.0,>=3.0) +Requires-Dist: yarl (<1.6.0,>=1.0) +Requires-Dist: idna-ssl (>=1.0) ; python_version < "3.7" +Requires-Dist: typing-extensions (>=3.6.5) ; python_version < "3.7" +Provides-Extra: speedups +Requires-Dist: aiodns ; extra == 'speedups' +Requires-Dist: brotlipy ; extra == 'speedups' +Requires-Dist: cchardet ; extra == 'speedups' + +================================== +Async http client/server framework +================================== + +.. image:: https://raw.githubusercontent.com/aio-libs/aiohttp/master/docs/_static/aiohttp-icon-128x128.png + :height: 64px + :width: 64px + :alt: aiohttp logo + +| + +.. image:: https://travis-ci.com/aio-libs/aiohttp.svg?branch=master + :target: https://travis-ci.com/aio-libs/aiohttp + :align: right + :alt: Travis status for master branch + +.. image:: https://ci.appveyor.com/api/projects/status/tnddy9k6pphl8w7k/branch/master?svg=true + :target: https://ci.appveyor.com/project/aio-libs/aiohttp + :align: right + :alt: AppVeyor status for master branch + +.. image:: https://codecov.io/gh/aio-libs/aiohttp/branch/master/graph/badge.svg + :target: https://codecov.io/gh/aio-libs/aiohttp + :alt: codecov.io status for master branch + +.. image:: https://badge.fury.io/py/aiohttp.svg + :target: https://pypi.org/project/aiohttp + :alt: Latest PyPI package version + +.. image:: https://readthedocs.org/projects/aiohttp/badge/?version=latest + :target: https://docs.aiohttp.org/ + :alt: Latest Read The Docs + +.. image:: https://badges.gitter.im/Join%20Chat.svg + :target: https://gitter.im/aio-libs/Lobby + :alt: Chat on Gitter + +Key Features +============ + +- Supports both client and server side of HTTP protocol. +- Supports both client and server Web-Sockets out-of-the-box and avoids + Callback Hell. +- Provides Web-server with middlewares and pluggable routing. + + +Getting started +=============== + +Client +------ + +To get something from the web: + +.. code-block:: python + + import aiohttp + import asyncio + + async def fetch(session, url): + async with session.get(url) as response: + return await response.text() + + async def main(): + async with aiohttp.ClientSession() as session: + html = await fetch(session, 'http://python.org') + print(html) + + if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(main()) + + +Server +------ + +An example using a simple server: + +.. code-block:: python + + # examples/server_simple.py + from aiohttp import web + + async def handle(request): + name = request.match_info.get('name', "Anonymous") + text = "Hello, " + name + return web.Response(text=text) + + async def wshandle(request): + ws = web.WebSocketResponse() + await ws.prepare(request) + + async for msg in ws: + if msg.type == web.WSMsgType.text: + await ws.send_str("Hello, {}".format(msg.data)) + elif msg.type == web.WSMsgType.binary: + await ws.send_bytes(msg.data) + elif msg.type == web.WSMsgType.close: + break + + return ws + + + app = web.Application() + app.add_routes([web.get('/', handle), + web.get('/echo', wshandle), + web.get('/{name}', handle)]) + + if __name__ == '__main__': + web.run_app(app) + + +Documentation +============= + +https://aiohttp.readthedocs.io/ + + +Demos +===== + +https://github.com/aio-libs/aiohttp-demos + + +External links +============== + +* `Third party libraries + `_ +* `Built with aiohttp + `_ +* `Powered by aiohttp + `_ + +Feel free to make a Pull Request for adding your link to these pages! + + +Communication channels +====================== + +*aio-libs* google group: https://groups.google.com/forum/#!forum/aio-libs + +Feel free to post your questions and ideas here. + +*gitter chat* https://gitter.im/aio-libs/Lobby + +We support `Stack Overflow +`_. +Please add *aiohttp* tag to your question there. + +Requirements +============ + +- Python >= 3.5.3 +- async-timeout_ +- attrs_ +- chardet_ +- multidict_ +- yarl_ + +Optionally you may install the cChardet_ and aiodns_ libraries (highly +recommended for sake of speed). + +.. _chardet: https://pypi.python.org/pypi/chardet +.. _aiodns: https://pypi.python.org/pypi/aiodns +.. _attrs: https://github.com/python-attrs/attrs +.. _multidict: https://pypi.python.org/pypi/multidict +.. _yarl: https://pypi.python.org/pypi/yarl +.. _async-timeout: https://pypi.python.org/pypi/async_timeout +.. _cChardet: https://pypi.python.org/pypi/cchardet + +License +======= + +``aiohttp`` is offered under the Apache 2 license. + + +Keepsafe +======== + +The aiohttp community would like to thank Keepsafe +(https://www.getkeepsafe.com) for its support in the early days of +the project. + + +Source code +=========== + +The latest developer version is available in a GitHub repository: +https://github.com/aio-libs/aiohttp + +Benchmarks +========== + +If you are interested in efficiency, the AsyncIO community maintains a +list of benchmarks on the official wiki: +https://github.com/python/asyncio/wiki/Benchmarks + +========= +Changelog +========= + +.. + You should *NOT* be adding new change log entries to this file, this + file is managed by towncrier. You *may* edit previous change logs to + fix problems like typo corrections or such. + To add a new change log entry, please see + https://pip.pypa.io/en/latest/development/#adding-a-news-entry + we named the news folder "changes". + + WARNING: Don't drop the next directive! + +.. towncrier release notes start + +3.6.3 (2020-10-12) +================== + +Bugfixes +-------- + +- Pin yarl to ``<1.6.0`` to avoid buggy behavior that will be fixed by the next aiohttp + release. + +3.6.2 (2019-10-09) +================== + +Features +-------- + +- Made exceptions pickleable. Also changed the repr of some exceptions. + `#4077 `_ +- Use ``Iterable`` type hint instead of ``Sequence`` for ``Application`` *middleware* + parameter. `#4125 `_ + + +Bugfixes +-------- + +- Reset the ``sock_read`` timeout each time data is received for a + ``aiohttp.ClientResponse``. `#3808 + `_ +- Fix handling of expired cookies so they are not stored in CookieJar. + `#4063 `_ +- Fix misleading message in the string representation of ``ClientConnectorError``; + ``self.ssl == None`` means default SSL context, not SSL disabled `#4097 + `_ +- Don't clobber HTTP status when using FileResponse. + `#4106 `_ + + +Improved Documentation +---------------------- + +- Added minimal required logging configuration to logging documentation. + `#2469 `_ +- Update docs to reflect proxy support. + `#4100 `_ +- Fix typo in code example in testing docs. + `#4108 `_ + + +Misc +---- + +- `#4102 `_ + + +---- + + +3.6.1 (2019-09-19) +================== + +Features +-------- + +- Compatibility with Python 3.8. + `#4056 `_ + + +Bugfixes +-------- + +- correct some exception string format + `#4068 `_ +- Emit a warning when ``ssl.OP_NO_COMPRESSION`` is + unavailable because the runtime is built against + an outdated OpenSSL. + `#4052 `_ +- Update multidict requirement to >= 4.5 + `#4057 `_ + + +Improved Documentation +---------------------- + +- Provide pytest-aiohttp namespace for pytest fixtures in docs. + `#3723 `_ + + +---- + + +3.6.0 (2019-09-06) +================== + +Features +-------- + +- Add support for Named Pipes (Site and Connector) under Windows. This feature requires + Proactor event loop to work. `#3629 + `_ +- Removed ``Transfer-Encoding: chunked`` header from websocket responses to be + compatible with more http proxy servers. `#3798 + `_ +- Accept non-GET request for starting websocket handshake on server side. + `#3980 `_ + + +Bugfixes +-------- + +- Raise a ClientResponseError instead of an AssertionError for a blank + HTTP Reason Phrase. + `#3532 `_ +- Fix an issue where cookies would sometimes not be set during a redirect. + `#3576 `_ +- Change normalize_path_middleware to use 308 redirect instead of 301. + + This behavior should prevent clients from being unable to use PUT/POST + methods on endpoints that are redirected because of a trailing slash. + `#3579 `_ +- Drop the processed task from ``all_tasks()`` list early. It prevents logging about a + task with unhandled exception when the server is used in conjunction with + ``asyncio.run()``. `#3587 `_ +- ``Signal`` type annotation changed from ``Signal[Callable[['TraceConfig'], + Awaitable[None]]]`` to ``Signal[Callable[ClientSession, SimpleNamespace, ...]``. + `#3595 `_ +- Use sanitized URL as Location header in redirects + `#3614 `_ +- Improve typing annotations for multipart.py along with changes required + by mypy in files that references multipart.py. + `#3621 `_ +- Close session created inside ``aiohttp.request`` when unhandled exception occurs + `#3628 `_ +- Cleanup per-chunk data in generic data read. Memory leak fixed. + `#3631 `_ +- Use correct type for add_view and family + `#3633 `_ +- Fix _keepalive field in __slots__ of ``RequestHandler``. + `#3644 `_ +- Properly handle ConnectionResetError, to silence the "Cannot write to closing + transport" exception when clients disconnect uncleanly. + `#3648 `_ +- Suppress pytest warnings due to ``test_utils`` classes + `#3660 `_ +- Fix overshadowing of overlapped sub-application prefixes. + `#3701 `_ +- Fixed return type annotation for WSMessage.json() + `#3720 `_ +- Properly expose TooManyRedirects publicly as documented. + `#3818 `_ +- Fix missing brackets for IPv6 in proxy CONNECT request + `#3841 `_ +- Make the signature of ``aiohttp.test_utils.TestClient.request`` match + ``asyncio.ClientSession.request`` according to the docs `#3852 + `_ +- Use correct style for re-exported imports, makes mypy ``--strict`` mode happy. + `#3868 `_ +- Fixed type annotation for add_view method of UrlDispatcher to accept any subclass of + View `#3880 `_ +- Made cython HTTP parser set Reason-Phrase of the response to an empty string if it is + missing. `#3906 `_ +- Add URL to the string representation of ClientResponseError. + `#3959 `_ +- Accept ``istr`` keys in ``LooseHeaders`` type hints. + `#3976 `_ +- Fixed race conditions in _resolve_host caching and throttling when tracing is enabled. + `#4013 `_ +- For URLs like "unix://localhost/..." set Host HTTP header to "localhost" instead of + "localhost:None". `#4039 `_ + + +Improved Documentation +---------------------- + +- Modify documentation for Background Tasks to remove deprecated usage of event loop. + `#3526 `_ +- use ``if __name__ == '__main__':`` in server examples. + `#3775 `_ +- Update documentation reference to the default access logger. + `#3783 `_ +- Improve documentation for ``web.BaseRequest.path`` and ``web.BaseRequest.raw_path``. + `#3791 `_ +- Removed deprecation warning in tracing example docs + `#3964 `_ + + +---- + + +3.5.4 (2019-01-12) +================== + +Bugfixes +-------- + +- Fix stream ``.read()`` / ``.readany()`` / ``.iter_any()`` which used to return a + partial content only in case of compressed content + `#3525 `_ + + +3.5.3 (2019-01-10) +================== + +Bugfixes +-------- + +- Fix type stubs for ``aiohttp.web.run_app(access_log=True)`` and fix edge case of + ``access_log=True`` and the event loop being in debug mode. `#3504 + `_ +- Fix ``aiohttp.ClientTimeout`` type annotations to accept ``None`` for fields + `#3511 `_ +- Send custom per-request cookies even if session jar is empty + `#3515 `_ +- Restore Linux binary wheels publishing on PyPI + +---- + + +3.5.2 (2019-01-08) +================== + +Features +-------- + +- ``FileResponse`` from ``web_fileresponse.py`` uses a ``ThreadPoolExecutor`` to work + with files asynchronously. I/O based payloads from ``payload.py`` uses a + ``ThreadPoolExecutor`` to work with I/O objects asynchronously. `#3313 + `_ +- Internal Server Errors in plain text if the browser does not support HTML. + `#3483 `_ + + +Bugfixes +-------- + +- Preserve MultipartWriter parts headers on write. Refactor the way how + ``Payload.headers`` are handled. Payload instances now always have headers and + Content-Type defined. Fix Payload Content-Disposition header reset after initial + creation. `#3035 `_ +- Log suppressed exceptions in ``GunicornWebWorker``. + `#3464 `_ +- Remove wildcard imports. + `#3468 `_ +- Use the same task for app initialization and web server handling in gunicorn workers. + It allows to use Python3.7 context vars smoothly. + `#3471 `_ +- Fix handling of chunked+gzipped response when first chunk does not give uncompressed + data `#3477 `_ +- Replace ``collections.MutableMapping`` with ``collections.abc.MutableMapping`` to + avoid a deprecation warning. `#3480 + `_ +- ``Payload.size`` type annotation changed from ``Optional[float]`` to + ``Optional[int]``. `#3484 `_ +- Ignore done tasks when cancels pending activities on ``web.run_app`` finalization. + `#3497 `_ + + +Improved Documentation +---------------------- + +- Add documentation for ``aiohttp.web.HTTPException``. + `#3490 `_ + + +Misc +---- + +- `#3487 `_ + + +---- + + +3.5.1 (2018-12-24) +==================== + +- Fix a regression about ``ClientSession._requote_redirect_url`` modification in debug + mode. + +3.5.0 (2018-12-22) +==================== + +Features +-------- + +- The library type annotations are checked in strict mode now. +- Add support for setting cookies for individual request (`#2387 + `_) +- Application.add_domain implementation (`#2809 + `_) +- The default ``app`` in the request returned by ``test_utils.make_mocked_request`` can + now have objects assigned to it and retrieved using the ``[]`` operator. (`#3174 + `_) +- Make ``request.url`` accessible when transport is closed. (`#3177 + `_) +- Add ``zlib_executor_size`` argument to ``Response`` constructor to allow compression + to run in a background executor to avoid blocking the main thread and potentially + triggering health check failures. (`#3205 + `_) +- Enable users to set ``ClientTimeout`` in ``aiohttp.request`` (`#3213 + `_) +- Don't raise a warning if ``NETRC`` environment variable is not set and ``~/.netrc`` + file doesn't exist. (`#3267 `_) +- Add default logging handler to web.run_app If the ``Application.debug``` flag is set + and the default logger ``aiohttp.access`` is used, access logs will now be output + using a *stderr* ``StreamHandler`` if no handlers are attached. Furthermore, if the + default logger has no log level set, the log level will be set to ``DEBUG``. (`#3324 + `_) +- Add method argument to ``session.ws_connect()``. Sometimes server API requires a + different HTTP method for WebSocket connection establishment. For example, ``Docker + exec`` needs POST. (`#3378 `_) +- Create a task per request handling. (`#3406 + `_) + + +Bugfixes +-------- + +- Enable passing ``access_log_class`` via ``handler_args`` (`#3158 + `_) +- Return empty bytes with end-of-chunk marker in empty stream reader. (`#3186 + `_) +- Accept ``CIMultiDictProxy`` instances for ``headers`` argument in ``web.Response`` + constructor. (`#3207 `_) +- Don't uppercase HTTP method in parser (`#3233 + `_) +- Make method match regexp RFC-7230 compliant (`#3235 + `_) +- Add ``app.pre_frozen`` state to properly handle startup signals in + sub-applications. (`#3237 `_) +- Enhanced parsing and validation of helpers.BasicAuth.decode. (`#3239 + `_) +- Change imports from collections module in preparation for 3.8. (`#3258 + `_) +- Ensure Host header is added first to ClientRequest to better replicate browser (`#3265 + `_) +- Fix forward compatibility with Python 3.8: importing ABCs directly from the + collections module will not be supported anymore. (`#3273 + `_) +- Keep the query string by ``normalize_path_middleware``. (`#3278 + `_) +- Fix missing parameter ``raise_for_status`` for aiohttp.request() (`#3290 + `_) +- Bracket IPv6 addresses in the HOST header (`#3304 + `_) +- Fix default message for server ping and pong frames. (`#3308 + `_) +- Fix tests/test_connector.py typo and tests/autobahn/server.py duplicate loop + def. (`#3337 `_) +- Fix false-negative indicator end_of_HTTP_chunk in StreamReader.readchunk function + (`#3361 `_) +- Release HTTP response before raising status exception (`#3364 + `_) +- Fix task cancellation when ``sendfile()`` syscall is used by static file + handling. (`#3383 `_) +- Fix stack trace for ``asyncio.TimeoutError`` which was not logged, when it is caught + in the handler. (`#3414 `_) + + +Improved Documentation +---------------------- + +- Improve documentation of ``Application.make_handler`` parameters. (`#3152 + `_) +- Fix BaseRequest.raw_headers doc. (`#3215 + `_) +- Fix typo in TypeError exception reason in ``web.Application._handle`` (`#3229 + `_) +- Make server access log format placeholder %b documentation reflect + behavior and docstring. (`#3307 `_) + + +Deprecations and Removals +------------------------- + +- Deprecate modification of ``session.requote_redirect_url`` (`#2278 + `_) +- Deprecate ``stream.unread_data()`` (`#3260 + `_) +- Deprecated use of boolean in ``resp.enable_compression()`` (`#3318 + `_) +- Encourage creation of aiohttp public objects inside a coroutine (`#3331 + `_) +- Drop dead ``Connection.detach()`` and ``Connection.writer``. Both methods were broken + for more than 2 years. (`#3358 `_) +- Deprecate ``app.loop``, ``request.loop``, ``client.loop`` and ``connector.loop`` + properties. (`#3374 `_) +- Deprecate explicit debug argument. Use asyncio debug mode instead. (`#3381 + `_) +- Deprecate body parameter in HTTPException (and derived classes) constructor. (`#3385 + `_) +- Deprecate bare connector close, use ``async with connector:`` and ``await + connector.close()`` instead. (`#3417 + `_) +- Deprecate obsolete ``read_timeout`` and ``conn_timeout`` in ``ClientSession`` + constructor. (`#3438 `_) + + +Misc +---- + +- #3341, #3351 + diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/RECORD b/venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/RECORD new file mode 100644 index 0000000..e68fa31 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/RECORD @@ -0,0 +1,124 @@ +aiohttp/client_proto.py,sha256=ETzD290mCPX_gUP1ioHO3BNcMkbBjw3Ho2Yb_TyTPeU,8037 +aiohttp/cookiejar.py,sha256=yWXa7YUNED17-De0ozYf5xoaortyFL4VURPqkuWIUec,11881 +aiohttp/_find_header.c,sha256=lWc5w3UZiVd3ni60DuFDSSPzsaQUhAQcERDGBOqeML8,189932 +aiohttp/_http_writer.pyx,sha256=vQgnMbmULTuhPvZ5cuZQgBhrqHoyE1caNnKeDtYZe5g,4201 +aiohttp/web_log.py,sha256=ZBiwi0HPOiTuOJNHpolBzUoF1IdRJpRgcO2SoO_iKtI,8255 +aiohttp/client_ws.py,sha256=AQlj-peBA0mGyra1t38sWlfV28MEM0SAATRXp1TsF9I,10694 +aiohttp/_helpers.pyi,sha256=mJRb5YdG8DxYbPfVddGRGmi93qqaJM30L1qFpgSKQuA,204 +aiohttp/tracing.py,sha256=HKVbmVEVIaSYIdPNzk93Uqk-Z7CIMrPDoTdPpuGUzdA,13353 +aiohttp/worker.py,sha256=hekSLWLEJVrHrIrZ3dQga7Jzgtx_Cf3ZW7Zfd1J1G3A,8178 +aiohttp/web_protocol.py,sha256=lWVV7t_VBWXAC0K4hI4MgCP_VoHUv7IZEJyQJmG4DYg,22192 +aiohttp/_cparser.pxd,sha256=tgw30SL6kQSczzGMlMhx2Cuhf_O8P8ZPimVCb85xILc,3959 +aiohttp/formdata.py,sha256=VZCo9kmDb50lQUcRMDfAH3d5lnRxBq_AX38ge8vFI00,5807 +aiohttp/streams.py,sha256=4ZEJXKDDfQu2sEzETcDaggbSee7t5hy2dhD9ipBVAhg,20459 +aiohttp/_find_header.pxd,sha256=0GfwFCPN2zxEKTO1_MA5sYq2UfzsG8kcV3aTqvwlz3g,68 +aiohttp/frozenlist.pyi,sha256=XmrOTtt3PH0evccYlSsFAkgWxqHizm9IyvRxvqSt2MA,1449 +aiohttp/log.py,sha256=kOWU6EcyBQESISm27vc8dVEz_h9zxozLa5WCya1RzhQ,325 +aiohttp/__init__.py,sha256=mLgcCI1IbtpejkbYB11E4_cdnTGXDucIVNlt-6Itres,8201 +aiohttp/abc.py,sha256=lsf2bz-9KtqLhtI-e-tmgp3ynziMypYyEHvwOnFg7lQ,5392 +aiohttp/_http_writer.cpython-36m-x86_64-linux-gnu.so,sha256=zm2He8lS3pa9tXHdRn34DQJa9L24nhsNtRbqHezQ2m4,200464 +aiohttp/client_reqrep.py,sha256=45ITtqQw2yv_xKZBBFrjjqjjH2pAvNsMpvzJg3_gXDc,36012 +aiohttp/_helpers.pyx,sha256=XeLbNft5X_4ifi8QB8i6TyrRuayijMSO3IDHeSA89uM,1049 +aiohttp/resolver.py,sha256=pRF91jOjTNuCll5TMRjTe1OxnGZK4wjAggYLgvzXkGQ,3626 +aiohttp/payload_streamer.py,sha256=ZNWaWwAxOIricwfjH4-YrkCqehowVizM6fJ_JVDR480,2103 +aiohttp/client_exceptions.py,sha256=50ECpb_fyJ0GTop_y-wyU85acaX1g3AOTFtLPF3MXJ8,8494 +aiohttp/web_ws.py,sha256=SUUDB0aQNe2nsv_fYjmkBwJJVjarI05JBzoReS9gCVs,16958 +aiohttp/http.py,sha256=YzihfNgKUAnduXjLdyXfgQFWkJ4GlQpEdGgn8UWTmzs,2133 +aiohttp/helpers.py,sha256=UXx60KcqNxiKnYpb3ruB4SuLA8n8gi_Qpd5cDzxVpUk,22898 +aiohttp/web_app.py,sha256=0Qd7E6EoKMIG6kP8YjmZCO2JDvVK5GMQX5c-Om38kaQ,17265 +aiohttp/_websocket.c,sha256=mhfGw4_fo7qzXsiAKDFclf5VBMwAY2-ccKiJV9uwSPk,136796 +aiohttp/web_fileresponse.py,sha256=VokjofoX_cm00PvOUnQlGQJPrHdKbE1T1Yy6ZgsxYWI,12772 +aiohttp/http_writer.py,sha256=XhGCqy_lzdLyxIzjQ_ufPFfJKTTWx1sb6YZWvrOFUPA,5239 +aiohttp/_websocket.pyx,sha256=tJfygcVwKF_Xb6Pg48a6t50YO2xY4Rg0Wj7LcJJMi-U,1559 +aiohttp/multipart.py,sha256=XWVdsgOQbBPl9QID1mvafkb6v0i8IaNUrjykk36xTFc,32781 +aiohttp/test_utils.py,sha256=hK19Rw-SG7hC1-r60D2TMfkCPDINEURq-sa6NCSNvoI,20860 +aiohttp/web_request.py,sha256=AwcGfvmCYevhzKedtDdYKPg999cX91bTIt9oeVyGqdY,25772 +aiohttp/web.py,sha256=-Eh9m4aXyRXeaBkl7jvv_mlTH3d6IXsaS6llg9Yuido,19438 +aiohttp/base_protocol.py,sha256=k11bt9JrBkKJcEDqTtES6vIguce0haZ9jVhcMDt9LYs,2663 +aiohttp/web_exceptions.py,sha256=e8BRGZO-gJuDv-ZWmDt3Fq84iq_xF4fuKJzzWX7go6Y,10106 +aiohttp/http_parser.py,sha256=v9csKsBv-rmOir1ikRBcDJDAaPMsFen1HoP8_Viz6xE,27912 +aiohttp/web_urldispatcher.py,sha256=z4TIMTja2r8TDV46As7_acBSomTlook6TlAldRWB0Lc,38908 +aiohttp/web_routedef.py,sha256=w_ATxAAzmh28uIvbCCo0guotfEDqYSb1gG0ZJ2QbyEM,6099 +aiohttp/_helpers.c,sha256=RXISYNjuRMMK62Kowg2lfSY4vRfuoGciuNoau4-sOUk,208656 +aiohttp/web_server.py,sha256=527MjryEIqWArFHMJlEABg3TcZgYtyJIFHY19Yvf3AI,2165 +aiohttp/_headers.pxi,sha256=XgJL5FQRwL4uZQfegYShPclsErUlvG_xuMHs7dp_2-o,2027 +aiohttp/http_websocket.py,sha256=IJLApqN53JsuQK-vU5rHgSzNjeeJhecwiS7AwLwWGKk,24741 +aiohttp/py.typed,sha256=E84IaZyFwfLqvXjOVW4LS6WH7QOaKEFpNh9TFyzHNQc,6 +aiohttp/_frozenlist.c,sha256=TJm7lrkQmqxgv34LNKxVSDGYoe_kzCDwe7UJhA9kWEw,288942 +aiohttp/_http_writer.c,sha256=k2DdmpGmsAq-G_evurYCgq8QGsawmOVRS5AtCJNR3nM,211682 +aiohttp/_http_parser.pyx,sha256=oysZhQ4DMVW16NtPL-G0ZZySPa2PfG2C3z62Yy02DnM,28731 +aiohttp/tcp_helpers.py,sha256=1WVYM2C-HZQpgcksTyadRsl2_WeuXh_ECUxCcwji5d8,1631 +aiohttp/signals.py,sha256=_ge2XQXBDWHoyCI4E-nXC-sOEJGVrJm0zYGHH0E5woQ,948 +aiohttp/signals.pyi,sha256=bwT4vJeDdymZ8_gdpmfV4RhIolbI-XwZLCnpaq0xwSU,324 +aiohttp/hdrs.py,sha256=iaXnHXOR_Dx0rvVkvmIZhc-7Egf2ByuSDI9tqskS0kQ,3449 +aiohttp/web_response.py,sha256=KRtJz-oBNuJBHJCXy20Q6DHihQWRN-9ux11Vsl_POAk,25485 +aiohttp/_helpers.cpython-36m-x86_64-linux-gnu.so,sha256=9zR1yTa2Qr7jdP5PLCA09yKvPp2tJDznucUXMey1w6A,217557 +aiohttp/connector.py,sha256=UhBBB1f4ujLLts3TEGTVEoqrFsOOHWJegdyKoy_EhoM,42479 +aiohttp/client.py,sha256=_-g2gD1Hm8XLRJme6ByaBRikIHbnQd_l65cOg_UHHUE,43979 +aiohttp/frozenlist.py,sha256=I4zR368wRHXp402Z3f5lhd5i48b6A66MhHncW1JGkb4,1781 +aiohttp/_frozenlist.pyx,sha256=BD8LcERExsWdo4qzuuQ84f-L_pHVzkUQO0lEAOe3Fog,2605 +aiohttp/_http_parser.c,sha256=7z-M-ctMyF-iV5wv-gYLujX0a7jSsfKpIRcj-eQrVAo,997683 +aiohttp/_frozenlist.cpython-36m-x86_64-linux-gnu.so,sha256=cIpr-ejc-rC_dyesxDD59serSpcpfeFXcOZXeW2Nwwc,313395 +aiohttp/_http_parser.cpython-36m-x86_64-linux-gnu.so,sha256=_1g2iBpaOsqUxha4OehJdic8OPwmTUboCYBlBiObAuQ,1586366 +aiohttp/_websocket.cpython-36m-x86_64-linux-gnu.so,sha256=wmFIAXiPUzcNloVu92BE9HTdthIyZux3TKd-KuX41u0,102842 +aiohttp/http_exceptions.py,sha256=V8sRLSfrsWzKGDuK9TYSx9LWDuJO6a-gOW1BFSDBx5M,2663 +aiohttp/web_middlewares.py,sha256=p45cYhF5l_HO8AAP4pic7dMpYg7qu5HgidFPprluXO0,4190 +aiohttp/typedefs.py,sha256=8UijScgRRbeOOxLtkK9aqMNIFSOoqo65V0-KA40HCXo,1324 +aiohttp/_find_header.h,sha256=5oOgQ85nF6V7rpU8NhyE5vyGkTo1Cgf1GIYrtxSTzQI,170 +aiohttp/pytest_plugin.py,sha256=LOyTRuGLHL0XPAh5ByVaYeCReqRAwZfboXoCwtLxjVY,10835 +aiohttp/payload.py,sha256=QdGUaBQGGhKOARbsRtVeq-EdlL4C__0e8Sm5DSbPPSU,14027 +aiohttp/web_runner.py,sha256=6PqQBGdC8BanrxpYRlMn_33MpsDqstjOIGDftECb2uc,11142 +aiohttp/locks.py,sha256=l-cW8wUbIkHaovghT7gpY8Yp5Vlo-u2G7_CR5xQqEQ8,1234 +aiohttp-3.6.3.dist-info/WHEEL,sha256=ZCgRoodM6cLv8Z9Z-kuTK9QreeQu8GHOdQFY_br7fEU,109 +aiohttp-3.6.3.dist-info/METADATA,sha256=UmObIpkmeVqZFB1rwDUEbIzmKMrVaEaEfDZulA48d_g,24570 +aiohttp-3.6.3.dist-info/top_level.txt,sha256=iv-JIaacmTl-hSho3QmphcKnbRRYx1st47yjz_178Ro,8 +aiohttp-3.6.3.dist-info/RECORD,, +aiohttp-3.6.3.dist-info/LICENSE.txt,sha256=b9UkPpLdf5jsacesN3co50kFcJ_1J6W_mNbQJjwE9bY,11332 +aiohttp-3.6.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +aiohttp/__pycache__/hdrs.cpython-36.pyc,, +aiohttp/__pycache__/cookiejar.cpython-36.pyc,, +aiohttp/__pycache__/web_fileresponse.cpython-36.pyc,, +aiohttp/__pycache__/connector.cpython-36.pyc,, +aiohttp/__pycache__/tracing.cpython-36.pyc,, +aiohttp/__pycache__/web_middlewares.cpython-36.pyc,, +aiohttp/__pycache__/web_runner.cpython-36.pyc,, +aiohttp/__pycache__/formdata.cpython-36.pyc,, +aiohttp/__pycache__/payload.cpython-36.pyc,, +aiohttp/__pycache__/frozenlist.cpython-36.pyc,, +aiohttp/__pycache__/streams.cpython-36.pyc,, +aiohttp/__pycache__/http_exceptions.cpython-36.pyc,, +aiohttp/__pycache__/locks.cpython-36.pyc,, +aiohttp/__pycache__/test_utils.cpython-36.pyc,, +aiohttp/__pycache__/__init__.cpython-36.pyc,, +aiohttp/__pycache__/typedefs.cpython-36.pyc,, +aiohttp/__pycache__/base_protocol.cpython-36.pyc,, +aiohttp/__pycache__/payload_streamer.cpython-36.pyc,, +aiohttp/__pycache__/http_parser.cpython-36.pyc,, +aiohttp/__pycache__/web_request.cpython-36.pyc,, +aiohttp/__pycache__/http.cpython-36.pyc,, +aiohttp/__pycache__/web_routedef.cpython-36.pyc,, +aiohttp/__pycache__/multipart.cpython-36.pyc,, +aiohttp/__pycache__/client_proto.cpython-36.pyc,, +aiohttp/__pycache__/web_response.cpython-36.pyc,, +aiohttp/__pycache__/http_writer.cpython-36.pyc,, +aiohttp/__pycache__/client_reqrep.cpython-36.pyc,, +aiohttp/__pycache__/web.cpython-36.pyc,, +aiohttp/__pycache__/client_ws.cpython-36.pyc,, +aiohttp/__pycache__/web_exceptions.cpython-36.pyc,, +aiohttp/__pycache__/signals.cpython-36.pyc,, +aiohttp/__pycache__/web_app.cpython-36.pyc,, +aiohttp/__pycache__/resolver.cpython-36.pyc,, +aiohttp/__pycache__/web_log.cpython-36.pyc,, +aiohttp/__pycache__/client.cpython-36.pyc,, +aiohttp/__pycache__/helpers.cpython-36.pyc,, +aiohttp/__pycache__/pytest_plugin.cpython-36.pyc,, +aiohttp/__pycache__/web_ws.cpython-36.pyc,, +aiohttp/__pycache__/web_urldispatcher.cpython-36.pyc,, +aiohttp/__pycache__/worker.cpython-36.pyc,, +aiohttp/__pycache__/client_exceptions.cpython-36.pyc,, +aiohttp/__pycache__/log.cpython-36.pyc,, +aiohttp/__pycache__/http_websocket.cpython-36.pyc,, +aiohttp/__pycache__/tcp_helpers.cpython-36.pyc,, +aiohttp/__pycache__/web_server.cpython-36.pyc,, +aiohttp/__pycache__/abc.cpython-36.pyc,, +aiohttp/__pycache__/web_protocol.cpython-36.pyc,, diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/WHEEL b/venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/WHEEL new file mode 100644 index 0000000..a5338f5 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.35.1) +Root-Is-Purelib: false +Tag: cp36-cp36m-manylinux1_x86_64 + diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/top_level.txt b/venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/top_level.txt new file mode 100644 index 0000000..ee4ba4f --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp-3.6.3.dist-info/top_level.txt @@ -0,0 +1 @@ +aiohttp diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__init__.py b/venv-linux/lib/python3.6/site-packages/aiohttp/__init__.py new file mode 100644 index 0000000..e8abb66 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/__init__.py @@ -0,0 +1,226 @@ +__version__ = '3.6.3' + +from typing import Tuple # noqa + +from . import hdrs as hdrs +from .client import BaseConnector as BaseConnector +from .client import ClientConnectionError as ClientConnectionError +from .client import ( + ClientConnectorCertificateError as ClientConnectorCertificateError, +) +from .client import ClientConnectorError as ClientConnectorError +from .client import ClientConnectorSSLError as ClientConnectorSSLError +from .client import ClientError as ClientError +from .client import ClientHttpProxyError as ClientHttpProxyError +from .client import ClientOSError as ClientOSError +from .client import ClientPayloadError as ClientPayloadError +from .client import ClientProxyConnectionError as ClientProxyConnectionError +from .client import ClientRequest as ClientRequest +from .client import ClientResponse as ClientResponse +from .client import ClientResponseError as ClientResponseError +from .client import ClientSession as ClientSession +from .client import ClientSSLError as ClientSSLError +from .client import ClientTimeout as ClientTimeout +from .client import ClientWebSocketResponse as ClientWebSocketResponse +from .client import ContentTypeError as ContentTypeError +from .client import Fingerprint as Fingerprint +from .client import InvalidURL as InvalidURL +from .client import NamedPipeConnector as NamedPipeConnector +from .client import RequestInfo as RequestInfo +from .client import ServerConnectionError as ServerConnectionError +from .client import ServerDisconnectedError as ServerDisconnectedError +from .client import ServerFingerprintMismatch as ServerFingerprintMismatch +from .client import ServerTimeoutError as ServerTimeoutError +from .client import TCPConnector as TCPConnector +from .client import TooManyRedirects as TooManyRedirects +from .client import UnixConnector as UnixConnector +from .client import WSServerHandshakeError as WSServerHandshakeError +from .client import request as request +from .cookiejar import CookieJar as CookieJar +from .cookiejar import DummyCookieJar as DummyCookieJar +from .formdata import FormData as FormData +from .helpers import BasicAuth as BasicAuth +from .helpers import ChainMapProxy as ChainMapProxy +from .http import HttpVersion as HttpVersion +from .http import HttpVersion10 as HttpVersion10 +from .http import HttpVersion11 as HttpVersion11 +from .http import WebSocketError as WebSocketError +from .http import WSCloseCode as WSCloseCode +from .http import WSMessage as WSMessage +from .http import WSMsgType as WSMsgType +from .multipart import ( + BadContentDispositionHeader as BadContentDispositionHeader, +) +from .multipart import BadContentDispositionParam as BadContentDispositionParam +from .multipart import BodyPartReader as BodyPartReader +from .multipart import MultipartReader as MultipartReader +from .multipart import MultipartWriter as MultipartWriter +from .multipart import ( + content_disposition_filename as content_disposition_filename, +) +from .multipart import parse_content_disposition as parse_content_disposition +from .payload import PAYLOAD_REGISTRY as PAYLOAD_REGISTRY +from .payload import AsyncIterablePayload as AsyncIterablePayload +from .payload import BufferedReaderPayload as BufferedReaderPayload +from .payload import BytesIOPayload as BytesIOPayload +from .payload import BytesPayload as BytesPayload +from .payload import IOBasePayload as IOBasePayload +from .payload import JsonPayload as JsonPayload +from .payload import Payload as Payload +from .payload import StringIOPayload as StringIOPayload +from .payload import StringPayload as StringPayload +from .payload import TextIOPayload as TextIOPayload +from .payload import get_payload as get_payload +from .payload import payload_type as payload_type +from .payload_streamer import streamer as streamer +from .resolver import AsyncResolver as AsyncResolver +from .resolver import DefaultResolver as DefaultResolver +from .resolver import ThreadedResolver as ThreadedResolver +from .signals import Signal as Signal +from .streams import EMPTY_PAYLOAD as EMPTY_PAYLOAD +from .streams import DataQueue as DataQueue +from .streams import EofStream as EofStream +from .streams import FlowControlDataQueue as FlowControlDataQueue +from .streams import StreamReader as StreamReader +from .tracing import TraceConfig as TraceConfig +from .tracing import ( + TraceConnectionCreateEndParams as TraceConnectionCreateEndParams, +) +from .tracing import ( + TraceConnectionCreateStartParams as TraceConnectionCreateStartParams, +) +from .tracing import ( + TraceConnectionQueuedEndParams as TraceConnectionQueuedEndParams, +) +from .tracing import ( + TraceConnectionQueuedStartParams as TraceConnectionQueuedStartParams, +) +from .tracing import ( + TraceConnectionReuseconnParams as TraceConnectionReuseconnParams, +) +from .tracing import TraceDnsCacheHitParams as TraceDnsCacheHitParams +from .tracing import TraceDnsCacheMissParams as TraceDnsCacheMissParams +from .tracing import ( + TraceDnsResolveHostEndParams as TraceDnsResolveHostEndParams, +) +from .tracing import ( + TraceDnsResolveHostStartParams as TraceDnsResolveHostStartParams, +) +from .tracing import TraceRequestChunkSentParams as TraceRequestChunkSentParams +from .tracing import TraceRequestEndParams as TraceRequestEndParams +from .tracing import TraceRequestExceptionParams as TraceRequestExceptionParams +from .tracing import TraceRequestRedirectParams as TraceRequestRedirectParams +from .tracing import TraceRequestStartParams as TraceRequestStartParams +from .tracing import ( + TraceResponseChunkReceivedParams as TraceResponseChunkReceivedParams, +) + +__all__ = ( + 'hdrs', + # client + 'BaseConnector', + 'ClientConnectionError', + 'ClientConnectorCertificateError', + 'ClientConnectorError', + 'ClientConnectorSSLError', + 'ClientError', + 'ClientHttpProxyError', + 'ClientOSError', + 'ClientPayloadError', + 'ClientProxyConnectionError', + 'ClientResponse', + 'ClientRequest', + 'ClientResponseError', + 'ClientSSLError', + 'ClientSession', + 'ClientTimeout', + 'ClientWebSocketResponse', + 'ContentTypeError', + 'Fingerprint', + 'InvalidURL', + 'RequestInfo', + 'ServerConnectionError', + 'ServerDisconnectedError', + 'ServerFingerprintMismatch', + 'ServerTimeoutError', + 'TCPConnector', + 'TooManyRedirects', + 'UnixConnector', + 'NamedPipeConnector', + 'WSServerHandshakeError', + 'request', + # cookiejar + 'CookieJar', + 'DummyCookieJar', + # formdata + 'FormData', + # helpers + 'BasicAuth', + 'ChainMapProxy', + # http + 'HttpVersion', + 'HttpVersion10', + 'HttpVersion11', + 'WSMsgType', + 'WSCloseCode', + 'WSMessage', + 'WebSocketError', + # multipart + 'BadContentDispositionHeader', + 'BadContentDispositionParam', + 'BodyPartReader', + 'MultipartReader', + 'MultipartWriter', + 'content_disposition_filename', + 'parse_content_disposition', + # payload + 'AsyncIterablePayload', + 'BufferedReaderPayload', + 'BytesIOPayload', + 'BytesPayload', + 'IOBasePayload', + 'JsonPayload', + 'PAYLOAD_REGISTRY', + 'Payload', + 'StringIOPayload', + 'StringPayload', + 'TextIOPayload', + 'get_payload', + 'payload_type', + # payload_streamer + 'streamer', + # resolver + 'AsyncResolver', + 'DefaultResolver', + 'ThreadedResolver', + # signals + 'Signal', + 'DataQueue', + 'EMPTY_PAYLOAD', + 'EofStream', + 'FlowControlDataQueue', + 'StreamReader', + # tracing + 'TraceConfig', + 'TraceConnectionCreateEndParams', + 'TraceConnectionCreateStartParams', + 'TraceConnectionQueuedEndParams', + 'TraceConnectionQueuedStartParams', + 'TraceConnectionReuseconnParams', + 'TraceDnsCacheHitParams', + 'TraceDnsCacheMissParams', + 'TraceDnsResolveHostEndParams', + 'TraceDnsResolveHostStartParams', + 'TraceRequestChunkSentParams', + 'TraceRequestEndParams', + 'TraceRequestExceptionParams', + 'TraceRequestRedirectParams', + 'TraceRequestStartParams', + 'TraceResponseChunkReceivedParams', +) # type: Tuple[str, ...] + +try: + from .worker import GunicornWebWorker, GunicornUVLoopWebWorker # noqa + __all__ += ('GunicornWebWorker', 'GunicornUVLoopWebWorker') +except ImportError: # pragma: no cover + pass diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/__init__.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98300c63987129a6019c83295c7bbed8c4366406 GIT binary patch literal 5186 zcmeI0SyLO!6~~1T2q6i?ZWaUHjcqn#gBNTA5{od4EC~e1%iKZJLStr8W=6i|KIADM zAfF)b`39-V@??Qoq5`cixq6D=TJqW>;fYPdjv{pR?A?7x%O>c*G=62*Tgqg$0 z9nittfgFJda|F2)I+;6>qY!0|BF7-c97B#noH>r%1zpTt$lcJ*+>M-o1aktp2YQ%$ zkb9w*xfi()`k4EW`=Ot?A9(-hmfzqHRfx`!!XP|j64D(%p=I7 zFv>iNJO*RTW60OxI`ehpaTsSFN1lKQ<_Y9Um}H(rz5zFwZy?`9iW}ZP_fCc7RK9`gqB zKI}7ZB4;4OyrsRhC@}9LAHfmxo_4GQ0P{Zb zdw9>BLH+bVVrgTK4ks2B|x9!fDt?jD1XicrvCO*+rrG^%)-x7ER5F(N^}KG6yUq4RBrASX6}E$O z?Q)xEgzNa_jVt2!Y?_GIB(LhitdetY(gksnGmB@!X?jWm$L8Q7 z=g%vRwTo`3#;LF>mTFM%&b0AG)>P#nyMv|PJy{n@My*^3Rn(hF+9;XWXdox7FT(oe zyocP1lxi2djifZ95 z;$3xMs9&2K4Hj~)vn|tP%`;VO%d`)>QdM2YAo`Y$4b#$7vLj<{ z1h=hPT&+4Z&UmsctH!SEZW%O0Y5yDw%L`V#sW?AJ9hwdEXy|H0sXohSA(zxlIvNV? zi%222i@}#q>jnFif`>JuYqEkfrEuZ`S4>-VaEojSSrIgik#AOKWJ}iRxof6!js@Ht zUiaf=_3?w~KQv63sB~=p!?i2Joj1FueeWMjtCNitXJNv6CDZ9Rz z&gHYmXzO3K&y8Xly~`(>@JSczU05i*JZ- z+os_c!#;NB9NhM&&EDd!$!`|i|DCvq>6j~ailR1CC80RhwWGbSA&8O=h@)_ zG&MXRXy{Ifl8g)8WJ=`A*j}NTHk!5P)Kf#&$iw<>CVwn>D~E;%ZNzs~QRNM>ZkBMo z_&BWT-_Xn-X-8P5*4!xOws02`+eP!1T%_|{QctlsUN2H6#vPPIcbHiXh4%^_s>yG* z$T_%I8f`9n;SnlVd2w4@?IkO!w!qDV(ZhX9V;SVJqzpSL7t3Nx^+zytp$4;w-RLw{ zukx07%e0;5p}B)cr%m-22R6zcytJ1rSBnZ4bCMS%FG-e3UXd)3ye4@=vO=;- zvPP05Ns+9RY>;e{Y>{k}q)FbA?2zn|?2+t~WJunTWJz))d6EN?Ly`i?5y>$LeT%c+ zlYAigh%yzd^=wuRwP;!f-Vz1VIullHsBStq+%e5cqr&<`{UnsVDfoZzaV`GGgYO4) z%B)2t3GWYjtB|BxJ6<$+X<0!Gb}hiMuC*8W<@vuj@O;+!)boMov(Bgf-yV2A$lrVF z8wb7?De^1TXW8=4K6I4u)k?t|jk7>4TozgdC+eqzTBwY#RF{(iX8}JcP>!fY^!f|T zcjSj!*t@meRB&~+xH3^dqJIC^?|n`kwGPX>&Mzeq2-|$O+ni0X#Mig&W)#jX7t;!a z9lWk7-oJ8wsf8s;)-*|i_8&R7_&cr^P3slYa`>I}j{!@g+(Potg;__h%vRLO^hs6K zl zHPrX$)A##rjnzNYhuH7i76|f}UH2>Rf3DO!$UZLmxvJFs6t^$=@U6}4TN@N=4Ynk3 I28ot`0dSxTk^lez literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/abc.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/abc.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..532be8c466842efe40088bf70d220d9acb33c5a5 GIT binary patch literal 8172 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 TtE~&IR;y7&SyLC5S||Pw@zO#o literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/base_protocol.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/base_protocol.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de4e3d37840d1696622da7f9958c4bf164c8b2db GIT binary patch literal 2646 zcmai0+m72r7@n~m$H^wyV^7-_6%bN`)D{(~R24$omX=mROI20^EF{b8nQfDG>@YKF z*;RT&dd(A5-18i~g(a@I>ML-?_mAylciDoY`R9E2{=@g@({8uD``e$RYu_K>{ z_7;l110k5;DGRA~Qa*A*XXJ)1XTlX;>WvyUfLt*W;s*3oO@q$P}O;G{F+EJixA zD|;6h#?E2vytsg|}kgq&L4Kn5)>iyFx_4} z3w`GmpTa8pEp@B3&6E$_8Pm5=!!|RH_^EBvD9y5tldNqDPvn^_+FBYoik_qf_y|bh zmo9Y@P>)uPWR2)NmTFQZ<8AIcJ`bS!fFE8whVA&CIXKcfIe~SvhiH^qSNBktfbJdi zs6BLMFwu7`+w_=mjb|Er?tWX{;TYxY2bMYCm(E!O-GLL%9j-P)6$r4LF>0_oG16MD zSl`ag?n&RTuE&4^S$vTjLJz@eL^8RMS@1pN{^^3ccEz zW8eBu?6=>EodR%yy|!0%yV}G>>LQ6t5bpqX8B-slRKQjiz)rPmbv8VQ!mo@ha$Ne{ zs#qIeLB}uydrtYxdF2>)3L=>~oJ}2&3Y@iyv4*03MKjh1Su)6r)=o`Ys)31;N8B>v z=+441>ZGSGAEClgEaXkB)5P@@d~JSs>6nY2SPYVK<>Bd#Ky70T#7QBVwbAyWmqobl^qVDjTD30t^bD?6 z#8P3G;ui0eHskdxjgU{Ob0mmckFe2El~8v04AYuC0+fl^^|@!Gx0V6#IPX>y9WZxh zQVW$oQ1lZBC;^^eK%O&Ds8!DSxpGRr3iM54C@|Gc)39s&VROca&7e?s${#~ rM&h&g*q9FO->_0A+6HqN)ct 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/client_exceptions.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/client_exceptions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee6cf8e7ca543503dffa29ea6da44b1f6c29d653 GIT binary patch literal 10321 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 pOgJLv=1?9^g~#LL>CA4Zv&=+hoaC(}m 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 L(q~fyC)57}8${3O literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/connector.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/connector.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..90e6a7cddf5fb50e34b20c8842704bb2b4e9fa3f GIT binary patch literal 30340 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 Y}*nA_29 z=HkyHha<1J8*;e8ki+4ef6d_#)pZtSMDr1Ts90tChGwr+yVNf;d7a5?Oy-dA;MQst z{sqSE%W=l~Fyah!2RfSROvhWH#nIu8v;F0)VSVy&nx_?eJfT=otdku;vWH)G)8Kps z9K7kuK1-b6vW~#`TZ*x2T1ga*a*(%_IJEZ23DU}>$OXH2ONOp@ZHoLLQqCC&0=~Ak z=tJ8_E3rgg;9Dc;T?!A?Jnn%GLLIASQ5T^&*Mdo1uI zlP@!&Qtl66|1EgDxNJlR=RYk#xFG(88ve@#|7oNI-pFxzRuX2F5(o4d)_*S(8g}$S z9fAhG##?H^9bD+hPWoyVPyN(6{h!+KZ%VO5z8;A-Yv>fgtN7FD>xnD7AB5- tichlGPtJqx7)p?dMzD32)@b}ibECNr;vZ3bLxg`H$Q>WnSBHlm|KFDwsC57U literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/cookiejar.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/cookiejar.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98fb595d331a04cf207c804d539018b27ced01a7 GIT binary patch literal 9038 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 Z#07P!RD=eH6GqY0qFVXB^nK~={{trxQn>&C literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/formdata.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/formdata.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85d7cb6900163b0a91faff79af6d7c2792839e63 GIT binary patch literal 4291 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/frozenlist.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/frozenlist.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b98fe020cb6d84b15b47558d1d1fdee7fce1ad1 GIT binary patch literal 2641 zcmb7GOK;mo5Z)yzijpY#8NU*z3JMev+So1HqA1`50Su=I&?-e7peZj4S+llfQ>46H z8MPw!Q2BTC-oHekr=Icydg-Y%q#l$iBQ=TLS!#Foo5#1a`m$Uu9{v8O_}gaeFP3>q zIDU>T3a|qP+-Gg>aZY2yH`=CW;@AYsx7s-`$C)(0V~_*;hJh{lz#MSTmbRC_+CYuG z@3d{NfU9!RYgzE@pIESJFs#DJB{h0;ETL#V{s}MJSLr2@Cp&N$h%?F{R?8%KW6rX{j+4)%_C~~OJH^)w;(NCPh;0GXo znf0wC#EI0D7a{IvP}edJW|lOG%=D0?mc;S_4hULRGzTQcZ@h2dx6$W&cw7@&^tSdJ zK@jR{JA~HpRW%J-HA(7-G4AVbpj&Nupj4<*=9pHiD4v$iP#s|Zc z8wofbY~jm5i1~z8>j?UofD<Qkv^^J@zsFNF9a1DvfF z>Foc2iWuXfvxs`YvEH#WynoKn+SJnRy-AWEr)B2p zyX()Y?;fe^+OwL8-(0d1s|G35 zYo&Oh8T!6#>Q)#;JB_2JqKXk0j=MoqhoK)SN=KYOl|C9CsT_VKx}N*v)g%qx%J53x z8UEp*vhS7lCoAI8%XTMJIxYQkT!@{$G>Xrt`b88Bm%D~*y4?BJG7Ro=3$s(<{{n>E BC8+=a literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/hdrs.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/hdrs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cbd5f3c7b3fce88cd1da937dae0b2c5aad7239ed GIT binary patch literal 3607 zcmd6o-B#Pi7RPPyw=rNyNYZ?iewVZkNz?Q*O`}L-TSZ8YBx9I%Eic6yKr2RaC6NZ* z_C0#v7dQ`a9z$!Lt8;Z;;av4UvgBY$?+Xiln!WdEX7>Ki*26}l_TrEK49^<5+<$ZD zeyVtWiof9B3%Q(~qd7ZoFO2gi3v?l$vlr>2U7!WKNQ-ufmh3Vu+Z9@|tF&s@Xw9zE zy1hh~Sb-H;iIrJ}RauSI+0t>9HrRsQ_&raT!DVm-Tme_XRj>&*!8LFVTnE>|E8rFI zDtHy#05`yE;5G0%cpba}-T>bL-vMueH^E!rE$}vY8@vPF0pA7R1vkM>@ICN7@O|)o z@B{Dz@I&xJ@FVae@MG{}@DuP8@Kf+pa0}c5?}B&1&%n>X&%w{Z7T5ysf%m{|a2vc2 z-UlCm55Oc5C3j7-U8vF+Q2K*NM7W@wU4*VYc9()Ww27ds5 z0H1(Qz#qXM!KdI;Pyhw+8TbqoK@pTd2_zr^+h7~)fE}<4c0n1G!JojNz#VW0R6qsX z1$RLeR6z~Yz#iBGpM%dq9n?VsG(ZzH!9Lgr_rN`H01m)?a34GX4?qf1@MrsHBe(TS zbggTez0EGOY~}}>BhL*&%MF8j|KqCP%EtvK2>m#JmzG6MRf%ZEg)R}Kc(FswxFivU zm?SQ1JyX_HBQEv?Q|!ito@SWwVy|z;MN=0<5|@P0h)u$1dCHb}Z218Tqm^__+>vKH z?$OMkSnkoOb;P1Z8ll6$f@p&egPdC)~@xsB_M3`f?XJoz291*&ur#~jx`RV zTW^g>PyRRFT^1gDb`afs>s-xujvP0-eZfgyPrQJ&vNzwk;MUo%rz{9({)^Ky|8#A- zh||$xa-6s!oMJz|6Ir3-xlu#3M#n5mMO;HpTsBHv>pVX=c}sEv?8ZrqtC?|@?U`kk z?&T~-VeV0Q9KDI~M$=X6S;VgN2wOX0Eddi%X*Cy>wVy zkgSl=x`c!{Zt{Lwk{lE|qy-XMN3?`&;!Ly*Iz9_%we9)8S-#EexX|{!6X?+k!l)u2 zLJQ&OIBN1Ii0RN_cFSbWe9;IY&FuH&iip3Fzrb{Lzqgt7AqGZhP^BCmKV zWhotIZ;uO#uEunK0WD4SK}$W~Iy$kUwVv<2K5OwBa!n$gELwkKo7I&T zlg-hx&X7UoM|GWrJ|-T97+f*fs5M|O3~%(3g)J^F+^ehe);(Niu8@s+GZqWIkvER6 z&)dmsXoXJ*qUOA3hn+=hmrM`hlEM5}*iFsA9@1Jan1q&5cxMbp^O6E+xj#Ab(PwCN zw*7dqugg)bA3!P4xr?grS^gPa+;gm`K0qgefVmpt^1$+4-XK;7gTZ_bSN5}M`Xw$8hqgBw4r%q|bR0UiGYWlt*K@S8OU&+2P!H%*@|3ndT1`g0 z|D_>lg0!9(r=2j3Pun4_C9b3=rgM2?Oy{CIrU6Nd%obG?S`tK&^h~-u*RT#80O4>aeC&T zu8n4i(-o8BAQye?N0+IaQAYq7SpB;-#7Ephsv))U+L$(1Il3 ziq$0~L{_KoFG(^AZK7G4LI=%qzlTpWn&o~^)**muThj-EE)j_q+Pbz&3*AJ3avNH} zmzp;D6U5Y(i8M51RfL9MQZ<#N5fu!l`(4LVU%e1r+aaVk6cl+6GZg`)B6~cQvXl<9 zcv?_ob%$1zEHz79jp_ajG|Q=FM2l)I?38*XQkIA6nrP z4BDLc?2rSxcFFXBmJFg}5n96~h5&gj{SDq{%BZ}oz|*`efpWjs(Q)0-Ewlam*Z8Db zAFt!rSVh_Q1pNTrQWj`^AS4RrazM8fbd`4q-Yw^oxH3yRDvtEi)$@i#9?kQXBn^M& z{7tN#{QLj*c6c(`o;Z`%i&JN8x1yKqerO%O+O{0;I1DE<9@~C!Z*mq_9^(spI%ZGu bct`Lr{3{ff77F=GzYCT8@?s_bPyPK1Em0yk literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/helpers.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/helpers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d648d065a5edfed654628f1dd9ee2bf5c9eed686 GIT binary patch literal 22403 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 A9smFU literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/http.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/http.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b2b38a34ed915bdcd0b94f1bb8a9a9945300f332 GIT binary patch literal 1559 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 R{-D?Dxjm=6TfJtl{a=!4PV4{x literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/http_parser.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/http_parser.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea18236c9869a96a962def810c69424c8144fe73 GIT binary patch literal 15253 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/http_websocket.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/http_websocket.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..134b90c36975cc7034ce81ad7ace0b2af8c8b339 GIT binary patch literal 14428 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 Ql1GPg@$4tkC(`-<1!Fm1?f?J) literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/http_writer.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/http_writer.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f16ccbb430362e80c35a0cbaf1ae840e4ad5eef GIT binary patch literal 4840 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/locks.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/locks.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..981f9240579d1c6e0212d17ad383ffdc9a012f23 GIT binary patch literal 1652 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/payload_streamer.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/payload_streamer.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bfa1be63b59a9584db7a75039a5a1a3ce8ca9576 GIT binary patch literal 3171 zcmbtW%Wm676y-}4MN6`sq^Xkz=papNF>vHGMIUhE)`o+&0SdQ30tDcOra2>1f(t z+RWF0{st8BJ5*HjHL6o1(S2REhHpS?Cg#xctzpA&3~k>YHvQ(%@f}^G7HuT0q3gS{ zZzprZw%;Ch{0@xg{qFY~b!h9kMq3lZpNEl4n=op^Xn}Ru{6vSjIogJ~HfvAJiS94L z{DPeC&@Rk(*`l1kLX9Vyw-6?Vrjeh+lOzi%iHCW@hAa(>I7`VO<0Q&>HY(zj2@(oI z!y+U(&yHfsc;9t5VU`GaibSDcE94{_K`$kvTndy220R;*L7cF)HPO(`Wor|C z8}25obhg4Ikv;2C92I5bDPV}b)nU7*m)ACT0WD!vJdv1rCUM~zWwU~A+0GS)gW@Cy zVN+;Dc-{0nm6mbix zLOamM`a~aVfiX6qHpeE^7S({TI=ZeY$r5K}>x`bf11EVGt9hvKZo!hlh3P*uehpUt z{(7|-=Bs&}-`gF<3B7lE$nF>6;ApjC=2<&+>eQY6{G@b(AWq{V2=0I=VMC=^ZQa&S zmoB_fdsK(lXHr5AV`hor$Og}JQ>W?9d{-8nrtIRhq z*yI`fDjenSV};hK>OJV8su7?n2v%Su5d1O< z6ScxIU>w!vXgf!#9FbL;;3a+?hwvz9d`${AE4^!N)140=#GB6I90NL zhCs9ChQc7`75p%e=;@!J2;@(JCy$?m;QOCGtp92n>w1KObO=f{Z4M6=M(#3dHe^Eh7G+hg zx_Ox@>b>vq~kBQ7Go~5w&37oCv1Fc$+<&sc{AgEKHJnUlLJ2t4OvbW!J-Oo~FvPGx1pFrn9B_jKOF?UH^ULvIU;B8ItS za-4xJ$QbWx*$e`jMR0r(#{5I5N*n$#Ko(MY9Al&ShzOAhzBI$#NM`i1Sv`lmg^Mnp z27&T{QG~@?B-rG&wT^XMO6Q?^R=z>53uL%uIFPh%8Et*Ru*`0^+g{KedqMvP98kW! literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/pytest_plugin.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/pytest_plugin.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..263edbb21046258f099d6e5f77c96b9af55035aa GIT binary patch literal 9356 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/tcp_helpers.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/tcp_helpers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..564821ff6432c73e2ee366cd7fda908eb53a4555 GIT binary patch literal 1462 zcmai!&u`;I6vsVd$99~g-G)*YgiwT#*hnlzLRxV^h*E;KY88hj{8%5bT+ejl#PL`& zlZvdusoePoR@}Ms*Nnu8)BX#bcyE%;771x1z44o`pJ(QM-kW^d=|oq*|COe`|sPH|A+k5V^eda^l{(rQ4 zECB5uqhqJvefHsFUe;Xp7FN`ooc3nEdnTSTE}1x~LysEsK&pd^YEw=w5P@2vf^i zeO#|3W^o9nps5^(L?k4;Eb)M7HcJe&8IYmfu}|zNtiKuFfC#(Z+u$ffvx7+26d;E32sd2QS0JzHJdhuusvB#ITl+e=CBNM#7#9NU zCRhaT0Qe7Z;BTEv=f};#>Cp1*x8xpdX8h}HQIx9<DO~F%gB=Ho9AFLXHi@_-#`h0Qkfu!J zX_^F?T2*-=ws!;m88lp;vbfrm%Gay9sGdq}F8nAf%QQ8?G*g+@QUyEudx(44%y y;+q|9R=aKQl+P9t8{CASF9chb{0qDp3abg_gIm)kZR$Z8L%c)QJM_EW;laOB6f=7O literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/test_utils.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/test_utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c3d33758e021be65360a06bd38a38f31e1954b8 GIT binary patch literal 20780 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/tracing.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/tracing.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c95fa13eaf4a81e148f127d9aed77e7a33e60c6 GIT binary patch literal 13043 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 F`X7_>kQ@L2 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/typedefs.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/typedefs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3db499491f5e319591f9a2cb1fd42dc7064666fa GIT binary patch literal 1177 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 Wq*i8zcHNv82H_~Ra`*7@jQ&3Y(t8>J literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_app.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_app.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b493ee0fc4a78320374fe58a24b2e59110bf37eb GIT binary patch literal 14936 zcmbVTTWlQHd7hb_y>NNa@*;}5+3TxBS)we-S6P-NQCC}{6-l=2Nu0@Y&yd>H&MtXo zC{gQW2aB^`|95wB+A#jZNPTihpTHB;EyECoFdK%We@(|! z@0MfX*J@;Z+p$fSWg1yO=j8mnllKcw!S8eW{GwCz`<;G&z!~rdok4%d8S=L{Tl|t! z@`s&af5aK_N1aiB%o+2yI$Qm5XB>UmBHP&JPdF1Qooj6OcQ`xzoz6~wm$S>??d(?h z`Nl*3!_LDhU1*g3N1R7gy07u5|CsZbN*5cC`%gGesC0khNq>*CN2LcEd;LjgQl$qQ z`~0Vzr&M~VvEM)798l>kjVb@2b5NyAji>!X&LNc^ZXEWHI7d`^r16aZtn;i&k2aq3 zpLd>D>9NKO{)^6w{!!GcV7 zyD?{NH?|wj3Fdl-yd(2gPyR{fvaWYT*L6;LTUE_dteNDpM^ERR()HM{GwnU>P2=~p zH|&jgqu#W4MvsTQv)+){ir;h1vbTrhI~WVS7uia;(6yX%=M1q;Y`tq>jFNZW%d?Nw zjB^3`6Ji|sWvG{xmGlkWL;@3VI6A?uZGgA_}66(x#+lfR<_z+lT*f9_Vk%k zZ=6G7_)6vW70xaQFJYX@yvMq?y;--RhQwR$YHc2?Kx#nudBv*;)#pHZawwm0=W5HY z)ZMw&B`LjT=mI?`8;VCcUulYlYMqaBSeSGiEVP;dr%>uy)@g4JdAX~eyoIK@RH+xV zmLw3HJKgdtwPsYjR0(dz>8%P&p18U+dvamnN>X+Fvh*;|`|=0hkd4!|V1cLwBKy&% zQL9$Chta@v!>crx7S2f7l2uYy@)?a2!HtYzcn0N~V|f{23QJ@tgG5f`MM3n5qUaX` zVo(f;Eutib#mM}~s_EEXR*cRWVpP0~XIyN%m-lk@yjSr0wi}@Pe!u~5&>JF;cw3NP zst+SIgxVAL3X1x34tP<3>yfwfo+WmP-FIzg%-brz&6dc0=w9XnW6l&0i}Kw8XWZN7 zO^8QO^HK2_YHnAx9>@C=;z_*kK#M*1OtDu?;%#T#$G&?R@s!w)oL$}^YOwwRF@^Wt z-WFB=pm-W@4}o6?F&Fl5NE}8^*?WYuRyjw+Gk0yQ`_W`2=;>MX^qhDeH6KIG303a} z@uI5tcs!S*;w6+n(JenFURLE##^uMwD=6R7Ek7Yns`9PMwk|-QDYKwH@tn~ z3|4bioI}o2-u`*y5WlMAJW4KzS5a~xuKOBtE{aRYnZk}7RCu02kFSf%$a@-N9#V7u zgt(%{JdB(pD(9-WrgEO?=DZ=^R5{OfbFPcGRL*nWBjRn<$`PMbInSd`pUU}^ct_>D zfSeaq&ZmW|a*m2o?dsc!^NabUs5AS7Bxo3-6QN5dUj(MdP zzKe2NNJTkUc(Y6MQQnnW3T7d`S_{#jdqayGw<70*Xu$Pr0<*nckzNpOO}`}-gQ(=n zrDnPay$4|>^w9g9lA%$*yCA*frQiljvygE?H0HLNkbYW*u?m!rhswxB2Qpk*zzq0u zV<{A^+f7|m)sh9{RvR_SOTV)02DP?_%5j-n4VPzXSiA8N3@Kx3GA|FR<;Sb-PcLhr zXUSXEcWNudWEH+93#uP^3Y|$9Z-zWgaE9P4!8w2^C%teP6_+8ry*u3Ew2FxRnG&G*et4lVlRtE#5GR(^E{9HP}W4QT_1z70h0Q)*NV6kHY_J;$V%qmmhY``G}x73&}i9F!2f+O?H84bre zhN``_n;P$?wslhz;r3P5-_bGZLpJz!@}I5%f^K+3;?8jrLA%$R_ot+Pl<7ZBl%8a<|-%9-{&% zx(OR3h-{{!k<;;z&|TMcQBeuQ|W+I#8M44NahDHW# zB=zAhk-^`9Kd-(o0ybBPm~Ro7HAK;Zs0)=gwk~4O=>w1f>dk;l{>d^!_%gxz_l8AI7$Jgtagd$#^hWeW)NhqCN zZp|?vA$!X$S+2KgO{6MomVK{${)qI587R)NwS4QcPr@u}=hrdIpbMX&dNZ~OzR7iJ zMuFI{z$n{$(4DReQX<--EO=zeyPr!qBem({NO0||kR;TEb+cn0)0}{fu%tk_-i??z z)oysqT{l@x$$Cq^gYp1|h2rTAh*H<8Dyl&x{_;^X8bhKxBQ>9wH=IvQnVV3D@EUrM zKSXz%PNiF`N1k@4Ldpy|83+wcnIPtd*VG6xHEXOxL*8{!!*&0NfpEM*D5URNDcT;1oS0SoG&!AnkK@F?bMrbAKBFuz#9X3ckw`ysrs4a>G*@D;# z@AOi5Y=LMB&!^-aHG!lv8|5nuiqu+b(S|d(V98vBnW8KM@W%!$pbW-8=du*xXSEh> zm(mEOr2|S;rln$Xg>|$ck#`B5gxrA}txZbosIfxjKqIqH?q>>;4=I?3*lie-H2ugB z(4c5@wqw?zERbg}PY^AqjdzAttd3RBQ>B>3;>>kTrWxqi`!s26B9&<qY3gW=A6g`sHR%2G3|`QDmg74@;6GUk-A1a$$C zubL#vglLI!+L>6#vT_k+-^UY>=cs-Q<{0z{%#sYuk<5VE-kL^qx9=V@GSO5qF5|Mm zOjm}}gxh#mqvD#U^UtWI`NV3Er$<|>(jAT)+uhKw$HU1YrL^F7DORmpN|wR=>89*% zD%(xvx~Y6ORnV!h56dX7YJ0vP=>gdkW)r-DF$R|(N6rwoe+LN2tZ#`&8(jDb-UeA? zvC}1mYiB1*+LooI3sXsYUfa|5u(D}SAbY)Gn}tt@aNcO*?4{gBZ7UPq+F+)IoM4kZ zCpuHIMz3U&w~_a+c!Dy30mIXV`I#7=`gbT_vIdkHw$Wa2fbL#!+c({Mn(&)!Jy5`i z;eVq>vh6)qgD&n4!!75dD2zBHh3PFv3S11cO>O=1INmL6%YfRJ3`-Wv@kUrP*Cu1d zODt%|B1GyZ;fv+}gD1AKh%XxO;EHt5$x7|IUb14E87)y`FYEzCs=Z#M(yQ7S z!OFY-Urt*|Ol&dzj`nbxwX~aVNkt|1iA?Hka+$KALkKlt-m^Y1J}~E$cDOr0u_q91 zqs1Vy@o$d5%3jLDZiw;$!@GWLdXP}~VYlp_8X+K&gvJ-ZRIAp{Vh{{uVIT~Jfe_@x zKqktuyQ`Lxv|zXHAlVretD$vSSy;H=xFgN{5=R*W_<~tCz5sTyEL^$n#d6{#_$UFFvD*z6CS@f2sQB1YNay6~~RL^-%P3^c@w8r62wx9WFCKwe{ zVWs|bREY&~;0SI>2FD1AhEY`XS*pCw@p%e3X+?E7N2?~KL$DWqF}&mV%`l7L5#7JcN(PLX z?_}r-YW5tttcEN5@B+)T9xQ(OWAk7;4)m9+m1eW03Os)yyaUaB2?NVjfT)irF-lD% z&V_chg{b%@Epe^7Nu2U2R_u2xLd28<38gHc&$CofVtx)sH7$8(og|NnYmG*U$RV^a zu;&Gca~lvMsz;TsRR%pZG^Gw#(Lzf0mxoX0V?vmx>7MNXxOSCKC?>_)_^t3z1k zR3J2tfpHG}@RyI`{t^ZJ}J*Qz+4_qdQ3?)mMO+DD8-u3wCKx0eT}zG8vzXMG5co$qm!*ojOu(ak z9jk=EWP$t@fGBqpX9x4Cs5Ln%hlk>f@#ElU03gaNrLQL_%AiM}F_fl(|E>8LJPrR_ z>6Tmvn*12URT+`NFNB$#U4Dqa&?N?ZfYPU|6?-My$wHso$CPibow_+#lXd0N3Hu(} zf6e+5BRkod_NDc!SQCbEsG3o~_!wZSGFzQW?h>T0E9@`N!zOrlMOonr0h5-qCAqth zC|qJ^a*$^yNmyIbQ_wQ@O{S=KBpncaesTn!4MGLDd__+FH)N7g`kI*Y`WiofR=i`7Rw?TO81-@}ze z(GTzh+;tEnm6di+Oy!=CB(1hTUBU8#@|qMbYu}<+EXSX#H(E;#LE{vzMguXWTCBx5hHkJ%<>a;d^uPYt0y|K-Ww8euh z_EKuGu`2lZ)y{f2dg3XTx<#{hvS%@$`Kd*zeR8JN^xm1wM|odg)8f^(JB?OF zL0C`CJFLGb(}!Z0X8(l5vx!$H!TE*O_7_9F^A zP#+A35ScYsa-E#~V#ltRQaxku>cjPsRU-)pb+SAbz@1kEHAh#ld-XB-qvaXAZADND zcYZ&g*-o?K=t^PvnNFcTj`Tj57=0_nPEkhTwoV`Jm}EY*R`QGAL%Pt(uUhdskaOKw z{O)z5qYet?069;=hYjyKrq(=>nGAYF)g|mGL>56k^TNMgAODMML1w4hKfG= zKYS)9)Y*Y-B10|^(2(SY1g!>0Lxm@{F<<#|qzETZ-?M@M8f^`yAI3y78w9=7h0Gwz zAV4LzvOIU@t;=VouQ@~B@`6_llc<(rR3|GWu1c!usMxe)qu)RWtVsrw{hG;tA8BnL zo@1ZI)Q~n^p(v+&*F7;XCx4F>`&JZz88FEwk`mTZ=*Eg!c# zYqK?+IO`;VNgVhwBkRS#XEXY@=mI>S8R0wYw`f;y74X4+%NQZ`5V z>E(BiF0UL1gL8i)tH$W2^38k2CvR)uDj5z9|EW8f`|h3S3O$qQL4~>&jo7-{kj=-L zZMCrIf7yH-U7=aI(JcBFqXuXy2T`^nGk2Y)V-r8X|<_1o#cK-nOZZ{oa3|L8o@BZTLe1^-T{bm zt=T%LKC(Go`5ER@d*~zbIi}_bunZhf5ZnY%dQ_d5YMNhUK|r7mB2;LKyr&(8yG-pN z_##1`fbkXiiv&*)FftL1xL3d_h)?n^;8hiHmcPt`q6=b(Gu~tM&k?*&@Ku6S0Kn%O zG6H==ugt=6f+q=R6HDH!kl!HqO@eO{JVrndK|W0ID8Y6DYGX;AA*n&+;{@bO`Nss` zCHNBnI2_tXta@aGHBJWge43T65*z@yj3@XqKmneJW@VhcWGuWT-~Hy$Q)4;X950qK zrOZ%%#4g!GnGxGENBYKxEfaY=6zl`cm4*O|MYFVpzhmgBwAo`@)|gouSFnF5kMF>v zxg7(gM~Bcq&4%uW1atyVKuoON)An%x8uxk4d+NTnx>1`GHYL8CLPacAX-6^>Km4`u zOydbiIy9R2uLNZ<#ezPv=|^wEWkqkf>Zv~l1QB{mgv+++)CKdYwK_An>q$0~e@gIY z1bX1njW+m82~x|>VGv8W<8v>rD^U4}!A0r0x0J{MFMGjYC;#)$uA zAwR?i=ko(R z>Xd8waEIo@KAJl;M0ni>CQpX*>>44d`1xWkKDWfYZC(Mx|3`SgLnWKI>j=*IJ9Ms( zjN)ShYRbr}&O+vgsr^!0#Q@+BxgcdLV?hJZhwU9Pb#xcC=4p1X=48>5!ceW{TS&~q zXj@)R8O-&S%$*Ue1!i2bmg`3IxNU@)n?-rl1a+In+s0xEIW}^HX{^8kY?omA!DOQm zcOB(4v{vk&vEM??w-DQ@<75WP4kt1+`B-bQ1S86l-wX?k4k^?8R}nveY4*O^EQWnT z1+?FX;Z8=IX+K0O365@1_UR>taCzZNd*wZMYFVH1`J4fFd(@=WpBL}Ksd4oW4ejF%Qo0Zd} z$$wyn8F1(NZ99&FA934MOhy?nkZrLkvkRsSjhX=*_-(kAvB!rf{yJ7Cc`F&KFCK6d z$^Bg$K4A$(JdBk7CuczezF|Kx@NQn{R?Ki3IH{|)WqRc3(g|>BFcq# z_n(2hUoskNE;7((WgGE*~ipV1p5IHHguH%D*uLA-ve+8?s@%Z z2KkrF`#!;6v0yB1CB$_CRKKeKm!J(OMF1_fA$2>WZm&q8CQ-DqMp`;W!ioyVw26nm z9fG<908fH>0(5a~z?{epAhq$g+-Ku(Z5)DZ2>igiE4(<(+e^ia4W7_nL@P5BpEdX$ NDCKwzSF-HP{{ti7(q#Yu literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_exceptions.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_exceptions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..19473cd8075fc6897876bb8734f66534d6c25400 GIT binary patch literal 12726 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_log.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_log.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b76dcb708703a7912923222e40c5af11d9f96cb2 GIT binary patch literal 7192 zcmbVR&2t+^cAqbN5CAEPl4;47I_a;`r0w>p6G7&*LS!=hsl(*u| zO)k)0{beBeUH)i?%LLWAdx_vd?=F{vxG%Yy`8D7Dk|$d+8&p)`xxqy$!EB@&YaWHmPXq6$UMc?DkVme{d<(<|%JJW4a6;Z=B{WAbXZ z#%I}aw(!D!Zgfm`f}MOe>&@|5ehkk%KYrTiSf>s4#tVxrvNxYO-U2^?o|F6yzKEHp zUKH4A_SQ28tG@YC&)e*b?m2~?@r-v~IP5HYSGS)&)b6tPbo*O}+Lze-y8Z1#?H{nZ zZaXq(zDv7eyr!{>%$c;{e*KUKA9n+d+N4dW({23)vt ztIOMoo5XGuZ@PiDtkp`z#qTQ_Z1T&xNLA|pl;~#I-(20~Nos)0OL7qOmKxLJ{7x)- zL4x5+^}wxv^OfXcWo?u9lf7^$ADC|D(~4l^Q+JxhWwf5B&9bE?%O9AviV@2qHU0Ch z$V~pcn}j{yNTs-;S(%7Yue)w@i@OlM4TfA9ZuWDQz^!|i_u_=RUu>)djA2RXE>D%? zjyn+X(_J_0xH}S>z^;$EkXVqKCw$fu>;pF3CtJMlCfG6K(|r<1S0;f-I3vAd9$n`N z4;vYSX}kNyx{FO|f%aAyVagUX3xz%o+qA%B;mHcZb#H`1CTK+ARSg~M!eHZbhFt=)vn^KRI0M>~w9zu9bVxLZ76(7|MOGm||Dwn_L{ z^UJ51r8Usnj{9tSUMJPr>&6mfsNmR`)8 z6WS>K%p$#o>_B~OM?RUmSIG>?51F^nq2u?*qsR=rV`DC85)Ry(oiyO2z1n!RUhVjF z%_r4PHl+c+)(kPG{f?iiU}}@Jp;1+4pv**>8_E>Ql*()=v*}sQjxyJk87ea#ULcT2 zfE8lNtxLDwLh+lsyu$?-01T=fK#<{TefhyR%lFq-ykKQ`apmU^R{Vz_Hy-RQ-w$K{ zurazHBpX7u?yNr?H9Ma*hNb2D{lAe98@C&_DyDd&Did%~MZuFD(QgA5^^XDzdZ;ef zK@wx%=$a#Q1h4pamT4qb*X}waYv0_nN4EUw$mkZvHR>B#SB#PUz#18T5l@L(Kw*3M zhcEhJ5(ZHSxS)%hvXa4VhOvZ&p>%_+a|)na9EgJ}4^z%zIJdQlH0f+a3Unv*4G9K8 zo8Tkv4RBKsZqW4XM!1a2wg?Awai$n)nBpzSeY;Us1-S#PRAt`}!M*Q`IdrI5|HhrW zU#>O%YirkTURO5!ftsTo!iZ;>t*V6W<4W020}t77lp}f65vQ?^-o=~uvzcrR_okZh z{dN>c>HB{$ez7ZZ zq>gUN^H$At%!*mDhHp%Jn$@vf4NEg4-o~7^1wy|vo)VsGc;vrl)B|nAsw}E(fpCsof#GPP1AUE@@qr$RAEJMW$l@$Rl5~d%4)FP4q0J2 z_%8_86hU7`0sP$Lh=7$qY642w8AYK$d$$*}ohWS$5`x*(tCF#>0BT-Ap*%PAh2gA(dQ^+j!&| z5aZ3FwP4oFITO@c1a-^>YtEWO%kb?3aCZ=+8wF)!LsiQBxGIl>0_BjKPtlNkA^pZa zQKKRGhY>Qx?Xsv*syi~fq7mvm+Ln#*T1}6zvq5@5x<8B3Cav8P8O$% zJ4qW}Ma@u+@hAyY8Cce#YNK#Sm&&H0l}Q+Uq|nLl!F6gqPQ{!*O5`LLnGPsF7>Xg7 z2|*$9qM?sq=v=AGtFUP+mZ}JV7=)~0AL8#wb~auRJKA!bBecJ9fE79ct^H*brfq~F z%Is?2k2l4hM4gVK*|bv=AI@v%rL(mQb-7xXxcJ2sh&;eovgJRLsziw_;y_jC1>IQS z74~EC`Z9@sBAF^6sa;i$wk&Z#HbQDG8(nU~5h&Os+bO20%ImWrzrzZDTCMW+wyw5f zw(Cc{znN^k{{F3h{?Ywg2lgi`)1s4wB}RfUZ685pssIa~B*8g|c&Gn=u&w65{3sL6 z15D&*PME;JLT=)9hH_={g2 zBbaWYTYLrbquk_9WBuQ!n0d9sSbxc3(4ojvAkU5G=5woq*q&L>%5=}x!Ieg~HW@Ab zXfUM+C-6uYWD}S1;i(4*!S|3LjI3{sZ_RJ5eY<1*z4gesH|5}vj#{f1Qz!Uq%sfIY z^7lVfu28f>-uvnwQP(yO;9hy9ektK!y%NQU9pzON#xs%DEzv$s8jl?EOXPT8W`TBB zwXt`lmH&hGr!zCk2ro__$w97Hvh6A!ZRm7EcK=pm7L+rx_if}z*}IVz8eqtX@Q(bA}dQ8Rm$QL$Sb;mb4fo+^5)qYCox zDn`xFD4iKm?qqalk_s{}bI}+T(@g$rqwhLKQr)hI?@WXKFsjt8kq0x4-x_`EH}J>$ z#DPZz{uB}RaQ?awNHCCsAnc{jp^aH_A7Y6Hh;kUd<%^3{Cr_DLEyX)J<5f=BM?mu) zjV$Q@2B?`lURE=F96C2@uR0^I-03Aq#5=JnJ`N&$@)r+iWs0LzLAQ9;_9u8QDVu?f zL&1~{hW`^|nz2M^9K$V6C2C)6@X%J-&Ymi*SR5; zYrg+zCy271lJB#)jSmIqv4vNegwo0qT$Qo_RD6V9aft}=qDq-6Rq>YoAe^d=l6XO= zB;k_mk*UM+1& rzkupPN{^8O@`)nTlE#|ymDI4V62i(wkTQ%i{i~TSzT@D}s@VSvs>~!d literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_middlewares.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_middlewares.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c3f3e227be3909ec11bca689598954aa6b1d3f9 GIT binary patch literal 3847 zcmZ`+TW=f372eqkNl_Fn%ko8XF54DO%hZ-q=cO=$G_GRTMq$O3g{EDkU9EP8;>vqr zW`>p}kS~!7>!oOcKJ>-Nd;dgU@-G(XQ-J^m@(cWud}o%VC?Q#5XJ>b2&Ybg|bLM<} ze_^4y`{n<_zb#tU|E-y;j{ZlumCY=RTb!j)(o2F-Am`QR?ss2TDp+6gSP3{(+k;Ru!#O@a8cN@kG0KoDZ3P0VwR}$ z`C}F=i_%lyJin=kSP-meK)wDy>AM0>@exxos3 z5i5K4%(qp3kuUL!Vvb*W=|U>~YNEMfiB-P*(&Lx;-1Ay+onOKGRmi@^S0MWh&K_Hx z>#qo$%}%Xc*#66-yWz(DyBmLau=)FP?#@A!=x8?;Wn&{sQ`7Ud2Yq~Sw-5WGtW*1^ zNWKD+R>v+c-{0PT^hn4o%0;fX1W%-hbvYN(_lLz((P3qMOME^MN~7C;tfh#uEus2F zu4r)n@uAWp+bRZHl+7&RJQW9#6y-`@Kx&#CiLf8(UU)i0tM2ssX%a^|De}?_?+x;} z z&Jb^*J9PFvZarzp-*9_qckRarjUgNZAl=Ol3$SY%4rIE04}f}cTI8a1qJBT9Nis^3 zTB=B&ieNs>A|3a_B<~hMyQg(O6whMOCo4LxT!KpS5}IH>N_99frg^&Pzm{CV`0Ly2 zI_t0Zlm5-!L6Y*DM^D6iI_f@MkCKAKPM-&2cLq4M);}z-hH+2CPbT8=G|H)E2v#jL zmff)|wv{caTNLLT}Dy(I4WeOd59 zER-Mlr}6CTUZnkLxGN(<_k>ST>=#{39>>C(|GUHK#3bMI6YXar%GK?rSwwr^^zU%) z7ZPg-DlFDAN>Z9_F!XhS4J+YmGpjx>2FUwr4k;)FB=plL7Tn)G^byr-)h63mJfnP- zWLThlRTMcrp;b4@Iaz5;F!oL2%xoDKlFo_raLp%ih2%o|N!Q;kV6pM4ALZPye7`=i z1S*M~&Lr+96-s3AuRG%v#yoL4aI14pfSE8g`Tfr9cH_lAu&o)Xkb2OaLI-fFyzvhb z=nMy@B2t=gBA4l2p@bh7IZr6N)eQpWAW2iR{UlH)zR1OaL28WfCwXcBCqX;2@xNo# z+nG&*9Y2n8e|L(^nhzxjMzaxlac5f&#EwyX8jMiHM^r#XEJm&fNm}|s%0gCNhLm$# zCu&yIOazcwW2E760~f+w(y_C`=# zWC%-|jZ+n9P7$4K4S=J8E^u0+Fr)~rQ$x-IHZ|nNc@wh%JP0gz?nS8*J8S-@Fk=#P zMhnvFyy@fcJZl4`5UiMb8o^yzR3Tu5ouV*R^~{MzFp=|ai~~Fyq&h(@rnpif9_R%5 zJqg?-rwxo;lXOXrL^oMWNpkeFjVR9xSVtK)NvLUxRZ=>RsX=AE2h~#qgE=cF<&#(x zot6Klv+|dy0GbLYil%ms?SC=3x@V1SsssD(lbXCuPZUnZ?PL2hd*qBW zHyR%~Cro}ewD)VezTe<3_lC}~bIcgdVL8N%x&0>hj#-P|Fl*>=@2X|S9r@+yIQrG7 z#cO{DV=^KG#4Sn-Gc9P4))T5J!0vD+~eo z5nBx{xqwOU;x;tL`e~E3Y@5CHw#1(da2&!oLT#Ekk=pBh9oMk)?wx7pDSxm);IBG3L g&TlXuS=OSTV=>op5sM865VaP)CARFk$Swcw_oUhh*8l(j literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_protocol.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_protocol.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d89ecac37795d26a38f66a8ac323ec3ca0766e8 GIT binary patch literal 14407 zcmbVTTWlQHd7j%|xZGV{L{Zdzbg`tBrPalfFN&gwmMBZMOfeKK*%LdP;hv$m%h`+1 z3{7#p>m**cX@fde^APl+CO}Z6EeaHQX@C}e2%5JdD1ssn#Q@Dq9*P8gYafcBX#4&D zncXER%1OJ#oH^&rx&G%r|M~v^{CqB#%PfBTUrOJ6O6S}WC z>aE9b!!bDDbWFSr->M~?gid8lKUqsTDUMryx;ErwIG*r_Ygs4D@uZ)t<()joQ~pS8 z)ETXfIb*ePXS}w<*-@KtCTcsKowZ44lFR7+E@ziWiy?oiw%gfV+vDs(ep+Pwy|sPL zK8_Fj`)dcB1GR(BK~87UpY7PSL(ZYvVdrq|h;yWN)H%xEa{e>5W6rVKapyRv^Ztoi z!70>EIwv_j;y+tE<(%U9sDHXvbc!4w^Uu`II%hdP?w_ljcg}NshyPsdf^(sE(Yc7U z?L6;|KGNk4jBuC#LhVK8MP2iDct^aGV#3=arXD1`^Gn8V&3OsA=O5_axOZ{4#yOX~ zBVxDM;~lPO6;13F`{>WxRsD?E)785f=khC>*e`Z|q=}v0XS=3z1?dA~66r}!e-7z` zVgl(2Zy&y275ZJRaOfAbxU&U4N(k@WRS%JLu-a@&F9;A%dO_K3Qf}tv!ou9$&<$5P z|90cS15XxGQEuU_xtY?nn={v5yEXetWKP%DqoL_Fw-UOGz89shxxTMrcbZ|PQFr~w zT3By-kyUns@E71BtzbkG(~ChU-EufxE~97F`XKjiC_T4!Usgi&sYltD-N2iZjj&N} z_^3U6&8zqem73RB4Wn#%RZ6cOmO?jJDI}sDH^Z=r!qjf1{$NJRhK$B2bDky~gmbP8 zJQ?LE>z*eA4D#IBXl&kHiwnGtn(hNH%5EBl5#?MSY{_R@L^-tbo+slZhLxLneQx2c z(%kf0x9?0}?^U1oT*0%*h2>^x#q*l3UwMy6oFfv?JS=-mD4OR+Y9KvK^Nt6F_S5rT z&}`HLFUqTt4bpL;n{HkBnA?v2RM-86D-;dJ=Uh&yPB;&JB=7PpTH|i8UN2V~#RZV@ z3$u;7_fC|0WA?S#JNIXQrJq^2Q6|Re{b(7l;t56(c$%XN4Prot2r$58raX%5)@0nF z-2}z46t+ieQJgJUQMy#ByEU&=iZZ2Atsz!@if2oucUN6M{*o${M5A0P{e>n^qd5+K z^}?C3);!a!G*2(CR(x@~wc?!(-KF==xRu5-7PS9f^A=0Zm}QF1bso`YX~YJCwElmZ z%`-Hc)4kcOxq+=X!4tN-1QxZidw5}N`WAp0X_B%)qdrN&vlN`7pg$88D^eacKaFR* zq3uRK{er&*$u|?)vBXWnVz; z7sX5H52k4XGn>>bjUg>ZtdO zcMKywEp9xv#4F+^@{W7^xxZVFP4TLD4LK(^m^XX=xhm zdb`J(cBR(zy&71?C23jAWNiF4Z)ba%w{>7w>g7g_HWD`>l{hQfw?Z(WD*}Wp;B3EA z_fBy`y_{thLg3rF=$C3Lalm6+=@Vf=K=T<)Dem+X2EXFji>}~K13rM%gecSQO{5`J zRS+-qAYfRsffP%a&bksbcB71=Ay9-UH|lk-OeD4+cwu0d{YKznX57mq2q?E^_hoY_ zRA6Aucq-;pw&Aq83 z?vhd ztM*qFoCaN8vU{C;`n-T-HVnLkdDPqxl^HD%?PzMqvQdzD zM$Jp{oZo0PFWEh)WP9&H5}-<>xv3N}Ma_L!qK#b&DlKnA735cHtF?G%@K&*@$hHkE zRXkt(nijas)0>EQ;L}Gi=v?L@^P+rDpp?pu)q02%zrWFd18Qy^SW8Bu{ZdNWZOmB$ zP;AI`w6tjhL?eTic*{m(8!}Wg(fEd}cw3_$2#HP+sCq-Cn!r7dD_ z`3iCeNhNkfpgD4{R3jgbbSZySP{}baGtS`- z4kx(vogAMGceS;)(ayB9?cs1rBtA}}&h9q#xTigYaBrJ>-PcaZAGDK*r@J(^{q-c* z-_LCw;P9Z(fEJRok`VTdcsVug-;vS)DVZcp4Wf%P)?+oVuSM8V0{R@72@tzduY{$N zJcFY0ECuJN(nx&N_IOvG-;^6~Hu)S?xIn>03ZAFn1q4xI2|7h6U!)9L4*3!VmnirQ z1(zuxs4cHh@Hq;0QgD=ls}v9msx{^%CnlFO6x={i$VXP-`Ac$^a_&&@|6>+tH$x@G z-Jk*^Z^qm6XmSltK*P}TStF^_Us_Ka$vB=d(s~@{97DHsga0yd2}+|TQmtL{3U}R9 z+E=khc+##EKq}K}(vRL29^&ud00N;`!Ddyx3Wlh{fU+_qr-V^AgxMuc%9?GZF2CQg z-|t+BhGGce2`4KmK|cj`DjDz9H_#%h9nlc9>pGyA3=6tkpzML>K|~<-kX}=kO5aB+ zNFvZM$8Be$%59nh&4cGa6)|#RS{+se=8)}sYEU|~!bCNRC)G7R z5lE*=R6vC?KQ=yjmCI+i4IjBsqq>kglH<2v=DMj`%yNluphPwyJwrXL7_b`i#C|P#vWzSb)fh2X5imeP${u+Psz1TRB zjmDh9jkGfDhumm6M-G57Eeg?7&X2 zEahleU!+e%3%xzB(!VVB9iv>}nGS*Jhg1j_%X+dq{v9 zputL7=7|!NV%mVNL}NbmncjSqs{Ic+isRMdFu@@X&Ots@ z-=QR*mwa;4dFiB=u$N0-W2wjDRpereZ6W>&a(|8|IEFw2|5|$9=$&Uc)0p35-o{zQ z9R4YbLW9MkBo$75a$RU`u2FY115kn2CCG<5c$PpDWrXdZOL>traduWO%6=V_Wax~^{ zT&Ap~8#eOHtcI(D1;oI~kPYX<#E1I&B&DkWvR(acvtxA3j&)zFf6LOs)JjHvOV>KM zd}*CWsdSZiHWLm*k|5QEeHM^30nUXn537|!E}t~_wYNYBftnvA-qh-Uhqgx0*3aU$ zXg!~7%V;OM=BKt3z6lA28C-f;Y#Z0LcaFVnbdntaVN0uy3iAaV-lb8rJysnjP`t$4 z^6tOgr_t`{q}yqlHPvsYs}o(&BA^%`H*poib+c{a`*+)x3Nfe2`YdWQ4UzW&;#A^; zwysj>d9tl@&y)3|oJ+gei0Nr`hB{W8`lMWS3KQR2vz13!t;&BOV4b$GOKoSytjx;{ zb+2M=C3AI+ViOd&6cCP&#+B-*I9O?ua*95rV&zjI=Q3pt^{)jKdVh&BlWw!=)rC4v z7m?%ej)2JxMmgR{g^Uv2O)8%5>9kHd)=foZky0y3m_%kRco3yx1tLnuYOV<`-n#E{ z#L4|FfO|VFxPcZR>~+hSfS@<@NqrROss#x&s!#RfS$z*SXC5Uc=+vb%7VoT{HuvbG zW)fwAH}`GXMw>dLBjP>R-@J`T4E05kjYMDg=yD$x4q%#vGcmc&w_Zl;^}AlU0mN)D z$FcD%HUt77*|9N@?QQ59Hb8F;unEVfvV&5YS)7q)(XrBsNPzd`R-1CS$}K{+B{l@1At?z)EboCB(?hU-GjOVkSj?X^ybS~FRjYm%@B`TJ*4YHUhbMJ;l$IugM3-^bv@EwixDF?wY zaB$D~GE0-m(qzEU%-Xb;d$vqzLj@>lDXG-NDBUxXV>`moteBflBl^*s9zG*TL&U`B zoK?CEVILSd+Gf`rAVWi0iA-3LaI`XZ`!XuZuTbz+3bryNN|uzR=RQq@`?j`W#zDD) z8CkA;5Jbkxni?=F^3Oy_5262n;yjB<#2 zXN%Yu`-3FLnc70-ez89DY#I_BxHKe1xy^%l8Q-Fzf$=0pzE2%ej{52sU!-Bt#?+pa zVw(!~2S$Zya72WF6j>TrkSAI}xrBX*0j`0xxl8LnepM}b1tAnwSflh6l}ah-$z>Bt zkwBRY+msX-g({v^?9Ec@B6?!YTpb-QCBI6+2MC-DUH+7O2sjz-d2ME9Zu<7Edo!i^ znY*~}oCKDU#s1I3 z+G1H)%tKoi^T|H?#2ZBeWG4I(o*XG%35JT#b75oJ6bnvIG7uWZ|WC%SCM+s?Z8EE!8>Hff6Q@}~k z0~G4gkv9h%RX14I$FV~-fPe@)<+@rA`&9GthiDPTMIaoLk&vN~P&fvhM%p5wwgj6A zH5d<#ZlaTUWVXa3WBrHtq5&;wz$+Ozf#{v#^?Z9+jj5Bsm&8E$F14udnZhySr|E? ze<8K2oe@cldTSrIQG1H({$pI1L;{sgwX|$b^jwn9u5z*6XC(G@yG}cqqM$~M(#vti{UP`ka`}mZ1oVZDX0UqoB`fF+{uA5 zFJe4LFdjp~*2A;y)t-M^ZMB-~b~{JZ?yWppJlfTIDYSeTEl+UEf4+f^Fe48*B76q5 zjxkz3j+x{!il5?r0w&{x;)Zs5N+X%xPE`xQx@JHK^kj!bLkfC;DO>G4heZE;J5N;U z^HI8;hqxFCp9Mco5>LXSbx+qG&Z^e9e!ZP;kE~Ej_3%`Cg!*giVg$CX3GVgu#yJUH zS*?0KJTl)se4lJsy?h=ew@c$xBc#|)G0Ny%s}@N}q5m`CS+a8Qj(N-+g&l)Y{B#4Y z#`?5sp@fa^mc*!-e~+To{V4xmc%KvF8#wPg^{|DrFQGnhoh5I_^$8H36FYuQy?EE6 z>~qXhmJFG@hR{-o+?`^A##nz7agq-|#``$F{R7??KnIFJzCd5GBz@E39S$o`=_1n4 z$F2St6nz0JVeO*5^CFAv=j+BCEQIeau;!C`ln6*u19U|R8qLt7grpVO4S59 zE!x)xSN*VPE_wu68C;5<*TQPu2Mq2vGl1MD79?EaY&L@8Ml1Gwpi$4V-q$*I>p>mY z{{nE>!;S7LdjeGG&URpthaIht1bZObCZH#5SZs^96-Z-RxSUyPRQ?ky$7-cBUMi9Q z(g0nQN;g`*x;~&8Z1NS0Z>`A;EMUa<$~e4*ed5UZ3+FBt7}~E@d>?ZMeQF@TIAz08 z0?uT%bSnt4ngi0pks=7;AJTgE^$NSpp%Qs@D5Zy7Q{YE1;1YGo(R$&&w|H7Dm$ZZB z#;Q-AC0x%%B=(1*rpeHI%6`xY?e`DKPV2;PMne01>-b&b3cAr&ceOE!XUxn->1W8< zstk&<>A5xW2Jt?7g!H{!iml_nVSlZ?Z`9R%P#O2sSg-+&S~~_G`#kxZHeD=SQf2@) z^09q@?5+xt4J?ABQ}bP#lZ(x@ORL0T3bc`hSC$Y!XK!GROQF0@S%l-rO3R)nM&MN|{-pDeJQR5oPmGE7hM%$Ie)zIUw(a;*Xd6KO&vPkKc z9TZpEbr&%wSqbQ)x^E=#%(nv$v?*7>*N1gW2fmo$VC%3)o%|gtO9)qKc5JI*BurLU zC&j22_n3rG+452tRk{-?GEpjKZFLDr_m7c9TrDLPe@JPw-dKa(gq>6+DO?V$E5Qm| zSDb7-U3e3O%Y1e1Bw)LNC4IA&BbQO}Jp#x-Lqr=QZIUeL^uU-)=3I)wbW2wjStCvM zPT1G;&^PHjt}Id3Kx|x}fEgx((qxj^hqP@1ZtI4bG!0y5X7Md!CJ{3bqw5b!k@1G= zQaWvB&9pvgQX8XG69#0u6r~bV`nWNrPnpz1+8Bj>pGu7rj7JP#QRaX#iC)quiMH_- z<{=7=G+Irf%o8doi-zu8X955g?&?ez`-Dva9{ONk6(FkOn_j}537$xfm^fs%jJPQ%QZ z6j>bdDF8DIUIhj`4iX~wu?cuTq)dwhu3!kwuUNr9VN7EpflH1EF*ZE5hhTUdX?^o1 z%Uk8q7Hl}o=VQ;i*cGtne@cFM@$pq=0ggko4DYU@eY^1hmxe-Alvj5D^rLf#ypyo0 z`4%wt?Bf#?b(M4V2GdEgHOU*df8zFz28iL`!;-WzA@smAP2a85TNCe}Ey9Sl>fs9e zY_Yj4aRzl}TSHuAIjs3navE+@%`nnhhb}Llzk(~QvbX4#S1w&XgJkA1_R*F1JD1PU zyLIm})wyz+Tu-iC4lALLkNiRjl|(iExY!WusJ?t|Pyq4F`>=X;GMCTrXOyMpGO#ix zxV9v>fR>TTz&P<8L}8%8T;O8fsE0TQOXRf2o*9L4C0>Xzqn)>A7iQ*Xr*D_;&dlGN znJ>-E&)=DsEcS*4JnChIJ-n621B);gv~)+WCL3kc8juKs=)nZwmmZlA#L+Mfv83Gc z1v`CZDVIYvgfDF2vJTg1^P$lD1s z1z+)KLwSR?w}mZF8=VYY0Ck%AuI{}hI$jlQCUTDiT5%N-QB6cA11w&tfxyYp|5OYv$~`K~c{4p#L(;9PBqP17 zQ_!FyiN*EM3*`Hh!2pFBfYF6bd50SC>@Y@L;4uF!(h9G(wh-lmf{-$27YRxWcI+l<6QtnyLAXb=GYcSILmk`hw|Be&LKciy5 zj{pt@4c}M()B!tzMH!Zn4@1AQC`~G2k>HXRRr$*}9X4fxqA6HM$@!KSGD^@jSwWI^#&N1SvD1BM|zs(iEE-iQ!0Wco_!5t?4JDMRul!YkTmtx!*=Z_i|;Z3v0 RZX~eAO#`(j%~5OA`d@YYZ{q*} literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_request.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_request.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d785f9fd6575b0e010b4a8a7dd6a6fc9a1338a12 GIT binary patch literal 22026 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 MBp>^1ME_m>zkTdNZU6uP literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_response.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_response.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b799c5190d7af550368693659bc41e59b156319 GIT binary patch literal 19432 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%0ADfTCv|ogG2Er_~qe&gFTkmR`>lx^mS4 z&JNSx-Q@-ih>c~>hljLyXT^7qSG|Sekwa>teW>ek#l>3`7$2Dk-K+Xo5RGwUqJ40) zW_Mgr2P};`a^c9tL`J0CAkHbgAkD9eQk9h;({LLtwQ|4eKG0Iqd)T?==7Nw!?;tJ{ zc3JrEvPJ*JuRcNDZ}B)qtDs~n2Zuwl+M@$ky$lw~mFU!C-(3xFy%!sdL#xpHyGpem zqw?${x)64|m`FTwr*|2OfH?t8VEX!HxSyet)uAdoD?KlCd(X`E{;f?tO%HCN&_h5@5n7 z`rThaT&8(~gW{i{*C#!YQbA+c0B8)Ab6~1yP9krra}hchDabpp1F;6?3Z{uQC{(zsW2^9x$PpwhcIJHd!g>t^{}QHG7nm@HNJEU*OOViLt$hWG&z@y6i6kWPz@~L# zfW{f5OH)U=`~$*Cv><^DCD1X8^4ccxSh@!|ZfwzA*~oASuqk{zst4F8SniI{j%cb^ zdMi@jMSgHW*)sG&gb=%pa`{iVCXQxojD1+w3^o%PiPE@UO^ki;!*70MHF;!u4lUs) z5+)`q3T<1xar${7!tf9z7cT3^PhD2jED~n9g9s)Rg*8lG)fz}|4Iw5!0V*)TxbMfi*6z3F)*U>d;MH7fMt0*FDn(C4yw>_oCmk)&My>AHyr1^BSZ=bzMOQ2o

LuIc0HBD3Nlz?d{p?m$3BP#@+`?^83bD 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 NX0bF9;VcT>`)@;m-e&*+ literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_frozenlist.pyx b/venv-linux/lib/python3.6/site-packages/aiohttp/_frozenlist.pyx new file mode 100644 index 0000000..b130577 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_frozenlist.pyx @@ -0,0 +1,108 @@ +from collections.abc import MutableSequence + + +cdef class FrozenList: + + cdef readonly bint frozen + cdef list _items + + def __init__(self, items=None): + self.frozen = False + if items is not None: + items = list(items) + else: + items = [] + self._items = items + + cdef object _check_frozen(self): + if self.frozen: + raise RuntimeError("Cannot modify frozen list.") + + cdef inline object _fast_len(self): + return len(self._items) + + def freeze(self): + self.frozen = True + + def __getitem__(self, index): + return self._items[index] + + def __setitem__(self, index, value): + self._check_frozen() + self._items[index] = value + + def __delitem__(self, index): + self._check_frozen() + del self._items[index] + + def __len__(self): + return self._fast_len() + + def __iter__(self): + return self._items.__iter__() + + def __reversed__(self): + return self._items.__reversed__() + + def __richcmp__(self, other, op): + if op == 0: # < + return list(self) < other + if op == 1: # <= + return list(self) <= other + if op == 2: # == + return list(self) == other + if op == 3: # != + return list(self) != other + if op == 4: # > + return list(self) > other + if op == 5: # => + return list(self) >= other + + def insert(self, pos, item): + self._check_frozen() + self._items.insert(pos, item) + + def __contains__(self, item): + return item in self._items + + def __iadd__(self, items): + self._check_frozen() + self._items += list(items) + return self + + def index(self, item): + return self._items.index(item) + + def remove(self, item): + self._check_frozen() + self._items.remove(item) + + def clear(self): + self._check_frozen() + self._items.clear() + + def extend(self, items): + self._check_frozen() + self._items += list(items) + + def reverse(self): + self._check_frozen() + self._items.reverse() + + def pop(self, index=-1): + self._check_frozen() + return self._items.pop(index) + + def append(self, item): + self._check_frozen() + return self._items.append(item) + + def count(self, item): + return self._items.count(item) + + def __repr__(self): + return ''.format(self.frozen, + self._items) + + +MutableSequence.register(FrozenList) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_headers.pxi b/venv-linux/lib/python3.6/site-packages/aiohttp/_headers.pxi new file mode 100644 index 0000000..22ef15c --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_headers.pxi @@ -0,0 +1,84 @@ +# The file is autogenerated from aiohttp/hdrs.py +# Run ./tools/gen.py to update it after the origin changing. + +from . import hdrs +cdef tuple headers = ( + hdrs.ACCEPT, + hdrs.ACCEPT_CHARSET, + hdrs.ACCEPT_ENCODING, + hdrs.ACCEPT_LANGUAGE, + hdrs.ACCEPT_RANGES, + hdrs.ACCESS_CONTROL_ALLOW_CREDENTIALS, + hdrs.ACCESS_CONTROL_ALLOW_HEADERS, + hdrs.ACCESS_CONTROL_ALLOW_METHODS, + hdrs.ACCESS_CONTROL_ALLOW_ORIGIN, + hdrs.ACCESS_CONTROL_EXPOSE_HEADERS, + hdrs.ACCESS_CONTROL_MAX_AGE, + hdrs.ACCESS_CONTROL_REQUEST_HEADERS, + hdrs.ACCESS_CONTROL_REQUEST_METHOD, + hdrs.AGE, + hdrs.ALLOW, + hdrs.AUTHORIZATION, + hdrs.CACHE_CONTROL, + hdrs.CONNECTION, + hdrs.CONTENT_DISPOSITION, + hdrs.CONTENT_ENCODING, + hdrs.CONTENT_LANGUAGE, + hdrs.CONTENT_LENGTH, + hdrs.CONTENT_LOCATION, + hdrs.CONTENT_MD5, + hdrs.CONTENT_RANGE, + hdrs.CONTENT_TRANSFER_ENCODING, + hdrs.CONTENT_TYPE, + hdrs.COOKIE, + hdrs.DATE, + hdrs.DESTINATION, + hdrs.DIGEST, + hdrs.ETAG, + hdrs.EXPECT, + hdrs.EXPIRES, + hdrs.FORWARDED, + hdrs.FROM, + hdrs.HOST, + hdrs.IF_MATCH, + hdrs.IF_MODIFIED_SINCE, + hdrs.IF_NONE_MATCH, + hdrs.IF_RANGE, + hdrs.IF_UNMODIFIED_SINCE, + hdrs.KEEP_ALIVE, + hdrs.LAST_EVENT_ID, + hdrs.LAST_MODIFIED, + hdrs.LINK, + hdrs.LOCATION, + hdrs.MAX_FORWARDS, + hdrs.ORIGIN, + hdrs.PRAGMA, + hdrs.PROXY_AUTHENTICATE, + hdrs.PROXY_AUTHORIZATION, + hdrs.RANGE, + hdrs.REFERER, + hdrs.RETRY_AFTER, + hdrs.SEC_WEBSOCKET_ACCEPT, + hdrs.SEC_WEBSOCKET_EXTENSIONS, + hdrs.SEC_WEBSOCKET_KEY, + hdrs.SEC_WEBSOCKET_KEY1, + hdrs.SEC_WEBSOCKET_PROTOCOL, + hdrs.SEC_WEBSOCKET_VERSION, + hdrs.SERVER, + hdrs.SET_COOKIE, + hdrs.TE, + hdrs.TRAILER, + hdrs.TRANSFER_ENCODING, + hdrs.UPGRADE, + hdrs.URI, + hdrs.USER_AGENT, + hdrs.VARY, + hdrs.VIA, + hdrs.WANT_DIGEST, + hdrs.WARNING, + hdrs.WEBSOCKET, + hdrs.WWW_AUTHENTICATE, + hdrs.X_FORWARDED_FOR, + hdrs.X_FORWARDED_HOST, + hdrs.X_FORWARDED_PROTO, +) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.c b/venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.c new file mode 100644 index 0000000..987c5b9 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.c @@ -0,0 +1,5342 @@ +/* Generated by Cython 0.29.13 */ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.6+ or Python 3.3+. +#else +#define CYTHON_ABI "0_29_13" +#define CYTHON_HEX_VERSION 0x001D0DF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact + #define PyObject_Unicode PyObject_Str +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : (Py_INCREF(func), func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + + +#define __PYX_ERR(f_index, lineno, Ln_error) \ +{ \ + __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \ +} + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__aiohttp___helpers +#define __PYX_HAVE_API__aiohttp___helpers +/* Early includes */ +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +static PyObject *__pyx_m = NULL; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_cython_runtime = NULL; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static PyObject *__pyx_empty_unicode; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + + +static const char *__pyx_f[] = { + "aiohttp/_helpers.pyx", + "stringsource", +}; + +/*--- Type declarations ---*/ +struct __pyx_obj_7aiohttp_8_helpers_reify; + +/* "aiohttp/_helpers.pyx":1 + * cdef class reify: # <<<<<<<<<<<<<< + * """Use as a class method decorator. It operates almost exactly like + * the Python `@property` decorator, but it puts the result of the + */ +struct __pyx_obj_7aiohttp_8_helpers_reify { + PyObject_HEAD + PyObject *wrapped; + PyObject *name; +}; + + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() PyErr_Occurred() +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* PyCFunctionFastCall.proto */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +#else +#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#else +#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* GetAttr3.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PyObject_GenericGetAttr.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr +#endif + +/* SetupReduce.proto */ +static int __Pyx_setup_reduce(PyObject* type_obj); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + + +/* Module declarations from 'aiohttp._helpers' */ +static PyTypeObject *__pyx_ptype_7aiohttp_8_helpers_reify = 0; +static PyObject *__pyx_f_7aiohttp_8_helpers___pyx_unpickle_reify__set_state(struct __pyx_obj_7aiohttp_8_helpers_reify *, PyObject *); /*proto*/ +#define __Pyx_MODULE_NAME "aiohttp._helpers" +extern int __pyx_module_is_main_aiohttp___helpers; +int __pyx_module_is_main_aiohttp___helpers = 0; + +/* Implementation of 'aiohttp._helpers' */ +static PyObject *__pyx_builtin_KeyError; +static PyObject *__pyx_builtin_AttributeError; +static const char __pyx_k_doc[] = "__doc__"; +static const char __pyx_k_new[] = "__new__"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_cache[] = "_cache"; +static const char __pyx_k_reify[] = "reify"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_pickle[] = "pickle"; +static const char __pyx_k_reduce[] = "__reduce__"; +static const char __pyx_k_update[] = "update"; +static const char __pyx_k_wrapped[] = "wrapped"; +static const char __pyx_k_KeyError[] = "KeyError"; +static const char __pyx_k_getstate[] = "__getstate__"; +static const char __pyx_k_pyx_type[] = "__pyx_type"; +static const char __pyx_k_setstate[] = "__setstate__"; +static const char __pyx_k_pyx_state[] = "__pyx_state"; +static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; +static const char __pyx_k_pyx_result[] = "__pyx_result"; +static const char __pyx_k_PickleError[] = "PickleError"; +static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; +static const char __pyx_k_stringsource[] = "stringsource"; +static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; +static const char __pyx_k_AttributeError[] = "AttributeError"; +static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; +static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; +static const char __pyx_k_aiohttp__helpers[] = "aiohttp._helpers"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_pyx_unpickle_reify[] = "__pyx_unpickle_reify"; +static const char __pyx_k_reified_property_is_read_only[] = "reified property is read-only"; +static const char __pyx_k_Incompatible_checksums_s_vs_0x77[] = "Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))"; +static PyObject *__pyx_n_s_AttributeError; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x77; +static PyObject *__pyx_n_s_KeyError; +static PyObject *__pyx_n_s_PickleError; +static PyObject *__pyx_n_s_aiohttp__helpers; +static PyObject *__pyx_n_s_cache; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_n_s_dict; +static PyObject *__pyx_n_s_doc; +static PyObject *__pyx_n_s_getstate; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_n_s_new; +static PyObject *__pyx_n_s_pickle; +static PyObject *__pyx_n_s_pyx_PickleError; +static PyObject *__pyx_n_s_pyx_checksum; +static PyObject *__pyx_n_s_pyx_result; +static PyObject *__pyx_n_s_pyx_state; +static PyObject *__pyx_n_s_pyx_type; +static PyObject *__pyx_n_s_pyx_unpickle_reify; +static PyObject *__pyx_n_s_reduce; +static PyObject *__pyx_n_s_reduce_cython; +static PyObject *__pyx_n_s_reduce_ex; +static PyObject *__pyx_kp_u_reified_property_is_read_only; +static PyObject *__pyx_n_s_reify; +static PyObject *__pyx_n_s_setstate; +static PyObject *__pyx_n_s_setstate_cython; +static PyObject *__pyx_kp_s_stringsource; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_n_s_update; +static PyObject *__pyx_n_s_wrapped; +static int __pyx_pf_7aiohttp_8_helpers_5reify___init__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, PyObject *__pyx_v_wrapped); /* proto */ +static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_7__doc_____get__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_2__get__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, PyObject *__pyx_v_inst, CYTHON_UNUSED PyObject *__pyx_v_owner); /* proto */ +static int __pyx_pf_7aiohttp_8_helpers_5reify_4__set__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_inst, CYTHON_UNUSED PyObject *__pyx_v_value); /* proto */ +static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_6__reduce_cython__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_8__setstate_cython__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_7aiohttp_8_helpers___pyx_unpickle_reify(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_tp_new_7aiohttp_8_helpers_reify(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_int_124832655; +static PyObject *__pyx_tuple_; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_codeobj__3; +/* Late includes */ + +/* "aiohttp/_helpers.pyx":13 + * cdef object name + * + * def __init__(self, wrapped): # <<<<<<<<<<<<<< + * self.wrapped = wrapped + * self.name = wrapped.__name__ + */ + +/* Python wrapper */ +static int __pyx_pw_7aiohttp_8_helpers_5reify_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_7aiohttp_8_helpers_5reify_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_wrapped = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_wrapped,0}; + PyObject* values[1] = {0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wrapped)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 13, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + } + __pyx_v_wrapped = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 13, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._helpers.reify.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_7aiohttp_8_helpers_5reify___init__(((struct __pyx_obj_7aiohttp_8_helpers_reify *)__pyx_v_self), __pyx_v_wrapped); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_7aiohttp_8_helpers_5reify___init__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, PyObject *__pyx_v_wrapped) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "aiohttp/_helpers.pyx":14 + * + * def __init__(self, wrapped): + * self.wrapped = wrapped # <<<<<<<<<<<<<< + * self.name = wrapped.__name__ + * + */ + __Pyx_INCREF(__pyx_v_wrapped); + __Pyx_GIVEREF(__pyx_v_wrapped); + __Pyx_GOTREF(__pyx_v_self->wrapped); + __Pyx_DECREF(__pyx_v_self->wrapped); + __pyx_v_self->wrapped = __pyx_v_wrapped; + + /* "aiohttp/_helpers.pyx":15 + * def __init__(self, wrapped): + * self.wrapped = wrapped + * self.name = wrapped.__name__ # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_wrapped, __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_self->name); + __Pyx_DECREF(__pyx_v_self->name); + __pyx_v_self->name = __pyx_t_1; + __pyx_t_1 = 0; + + /* "aiohttp/_helpers.pyx":13 + * cdef object name + * + * def __init__(self, wrapped): # <<<<<<<<<<<<<< + * self.wrapped = wrapped + * self.name = wrapped.__name__ + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._helpers.reify.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_helpers.pyx":18 + * + * @property + * def __doc__(self): # <<<<<<<<<<<<<< + * return self.wrapped.__doc__ + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_7__doc___1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_7__doc___1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_8_helpers_5reify_7__doc_____get__(((struct __pyx_obj_7aiohttp_8_helpers_reify *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_7__doc_____get__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "aiohttp/_helpers.pyx":19 + * @property + * def __doc__(self): + * return self.wrapped.__doc__ # <<<<<<<<<<<<<< + * + * def __get__(self, inst, owner): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->wrapped, __pyx_n_s_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_helpers.pyx":18 + * + * @property + * def __doc__(self): # <<<<<<<<<<<<<< + * return self.wrapped.__doc__ + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._helpers.reify.__doc__.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_helpers.pyx":21 + * return self.wrapped.__doc__ + * + * def __get__(self, inst, owner): # <<<<<<<<<<<<<< + * try: + * try: + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_3__get__(PyObject *__pyx_v_self, PyObject *__pyx_v_inst, PyObject *__pyx_v_owner); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_3__get__(PyObject *__pyx_v_self, PyObject *__pyx_v_inst, PyObject *__pyx_v_owner) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_8_helpers_5reify_2__get__(((struct __pyx_obj_7aiohttp_8_helpers_reify *)__pyx_v_self), ((PyObject *)__pyx_v_inst), ((PyObject *)__pyx_v_owner)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_2__get__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, PyObject *__pyx_v_inst, CYTHON_UNUSED PyObject *__pyx_v_owner) { + PyObject *__pyx_v_val = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + int __pyx_t_14; + int __pyx_t_15; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "aiohttp/_helpers.pyx":22 + * + * def __get__(self, inst, owner): + * try: # <<<<<<<<<<<<<< + * try: + * return inst._cache[self.name] + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "aiohttp/_helpers.pyx":23 + * def __get__(self, inst, owner): + * try: + * try: # <<<<<<<<<<<<<< + * return inst._cache[self.name] + * except KeyError: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + /*try:*/ { + + /* "aiohttp/_helpers.pyx":24 + * try: + * try: + * return inst._cache[self.name] # <<<<<<<<<<<<<< + * except KeyError: + * val = self.wrapped(inst) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_inst, __pyx_n_s_cache); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 24, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_v_self->name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 24, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; + goto __pyx_L13_try_return; + + /* "aiohttp/_helpers.pyx":23 + * def __get__(self, inst, owner): + * try: + * try: # <<<<<<<<<<<<<< + * return inst._cache[self.name] + * except KeyError: + */ + } + __pyx_L9_error:; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "aiohttp/_helpers.pyx":25 + * try: + * return inst._cache[self.name] + * except KeyError: # <<<<<<<<<<<<<< + * val = self.wrapped(inst) + * inst._cache[self.name] = val + */ + __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError); + if (__pyx_t_9) { + __Pyx_AddTraceback("aiohttp._helpers.reify.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_10) < 0) __PYX_ERR(0, 25, __pyx_L11_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GOTREF(__pyx_t_10); + + /* "aiohttp/_helpers.pyx":26 + * return inst._cache[self.name] + * except KeyError: + * val = self.wrapped(inst) # <<<<<<<<<<<<<< + * inst._cache[self.name] = val + * return val + */ + __Pyx_INCREF(__pyx_v_self->wrapped); + __pyx_t_12 = __pyx_v_self->wrapped; __pyx_t_13 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_12, function); + } + } + __pyx_t_11 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_13, __pyx_v_inst) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_inst); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 26, __pyx_L11_except_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_v_val = __pyx_t_11; + __pyx_t_11 = 0; + + /* "aiohttp/_helpers.pyx":27 + * except KeyError: + * val = self.wrapped(inst) + * inst._cache[self.name] = val # <<<<<<<<<<<<<< + * return val + * except AttributeError: + */ + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_inst, __pyx_n_s_cache); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 27, __pyx_L11_except_error) + __Pyx_GOTREF(__pyx_t_11); + if (unlikely(PyObject_SetItem(__pyx_t_11, __pyx_v_self->name, __pyx_v_val) < 0)) __PYX_ERR(0, 27, __pyx_L11_except_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "aiohttp/_helpers.pyx":28 + * val = self.wrapped(inst) + * inst._cache[self.name] = val + * return val # <<<<<<<<<<<<<< + * except AttributeError: + * if inst is None: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_val); + __pyx_r = __pyx_v_val; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L12_except_return; + } + goto __pyx_L11_except_error; + __pyx_L11_except_error:; + + /* "aiohttp/_helpers.pyx":23 + * def __get__(self, inst, owner): + * try: + * try: # <<<<<<<<<<<<<< + * return inst._cache[self.name] + * except KeyError: + */ + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6); + goto __pyx_L3_error; + __pyx_L13_try_return:; + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6); + goto __pyx_L7_try_return; + __pyx_L12_except_return:; + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6); + goto __pyx_L7_try_return; + } + + /* "aiohttp/_helpers.pyx":22 + * + * def __get__(self, inst, owner): + * try: # <<<<<<<<<<<<<< + * try: + * return inst._cache[self.name] + */ + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "aiohttp/_helpers.pyx":29 + * inst._cache[self.name] = val + * return val + * except AttributeError: # <<<<<<<<<<<<<< + * if inst is None: + * return self + */ + __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError); + if (__pyx_t_9) { + __Pyx_AddTraceback("aiohttp._helpers.reify.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(0, 29, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GOTREF(__pyx_t_8); + + /* "aiohttp/_helpers.pyx":30 + * return val + * except AttributeError: + * if inst is None: # <<<<<<<<<<<<<< + * return self + * raise + */ + __pyx_t_14 = (__pyx_v_inst == Py_None); + __pyx_t_15 = (__pyx_t_14 != 0); + if (__pyx_t_15) { + + /* "aiohttp/_helpers.pyx":31 + * except AttributeError: + * if inst is None: + * return self # <<<<<<<<<<<<<< + * raise + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __pyx_r = ((PyObject *)__pyx_v_self); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L6_except_return; + + /* "aiohttp/_helpers.pyx":30 + * return val + * except AttributeError: + * if inst is None: # <<<<<<<<<<<<<< + * return self + * raise + */ + } + + /* "aiohttp/_helpers.pyx":32 + * if inst is None: + * return self + * raise # <<<<<<<<<<<<<< + * + * def __set__(self, inst, value): + */ + __Pyx_GIVEREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ErrRestoreWithState(__pyx_t_10, __pyx_t_7, __pyx_t_8); + __pyx_t_10 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; + __PYX_ERR(0, 32, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "aiohttp/_helpers.pyx":22 + * + * def __get__(self, inst, owner): + * try: # <<<<<<<<<<<<<< + * try: + * return inst._cache[self.name] + */ + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L7_try_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + } + + /* "aiohttp/_helpers.pyx":21 + * return self.wrapped.__doc__ + * + * def __get__(self, inst, owner): # <<<<<<<<<<<<<< + * try: + * try: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_AddTraceback("aiohttp._helpers.reify.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_val); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_helpers.pyx":34 + * raise + * + * def __set__(self, inst, value): # <<<<<<<<<<<<<< + * raise AttributeError("reified property is read-only") + */ + +/* Python wrapper */ +static int __pyx_pw_7aiohttp_8_helpers_5reify_5__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_inst, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_pw_7aiohttp_8_helpers_5reify_5__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_inst, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_8_helpers_5reify_4__set__(((struct __pyx_obj_7aiohttp_8_helpers_reify *)__pyx_v_self), ((PyObject *)__pyx_v_inst), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_7aiohttp_8_helpers_5reify_4__set__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_inst, CYTHON_UNUSED PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__set__", 0); + + /* "aiohttp/_helpers.pyx":35 + * + * def __set__(self, inst, value): + * raise AttributeError("reified property is read-only") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 35, __pyx_L1_error) + + /* "aiohttp/_helpers.pyx":34 + * raise + * + * def __set__(self, inst, value): # <<<<<<<<<<<<<< + * raise AttributeError("reified property is read-only") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._helpers.reify.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_8_helpers_5reify_6__reduce_cython__(((struct __pyx_obj_7aiohttp_8_helpers_reify *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_6__reduce_cython__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self) { + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v__dict = 0; + int __pyx_v_use_setstate; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.name, self.wrapped) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_self->name); + __Pyx_GIVEREF(__pyx_v_self->name); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name); + __Pyx_INCREF(__pyx_v_self->wrapped); + __Pyx_GIVEREF(__pyx_v_self->wrapped); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->wrapped); + __pyx_v_state = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.name, self.wrapped) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v__dict = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":7 + * state = (self.name, self.wrapped) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_2 = (__pyx_v__dict != Py_None); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); + __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.name is not None or self.wrapped is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.name, self.wrapped) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + goto __pyx_L3; + } + + /* "(tree fragment)":11 + * use_setstate = True + * else: + * use_setstate = self.name is not None or self.wrapped is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_reify, (type(self), 0x770cb8f, None), state + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_self->name != Py_None); + __pyx_t_5 = (__pyx_t_2 != 0); + if (!__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_self->wrapped != Py_None); + __pyx_t_2 = (__pyx_t_5 != 0); + __pyx_t_3 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + __pyx_v_use_setstate = __pyx_t_3; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None or self.wrapped is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_reify, (type(self), 0x770cb8f, None), state + * else: + */ + __pyx_t_3 = (__pyx_v_use_setstate != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":13 + * use_setstate = self.name is not None or self.wrapped is not None + * if use_setstate: + * return __pyx_unpickle_reify, (type(self), 0x770cb8f, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_reify, (type(self), 0x770cb8f, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_reify); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_124832655); + __Pyx_GIVEREF(__pyx_int_124832655); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_124832655); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); + __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state); + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None or self.wrapped is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_reify, (type(self), 0x770cb8f, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_reify, (type(self), 0x770cb8f, None), state + * else: + * return __pyx_unpickle_reify, (type(self), 0x770cb8f, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_reify__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyx_unpickle_reify); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_124832655); + __Pyx_GIVEREF(__pyx_int_124832655); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_124832655); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __pyx_t_6 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("aiohttp._helpers.reify.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_state); + __Pyx_XDECREF(__pyx_v__dict); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":16 + * else: + * return __pyx_unpickle_reify, (type(self), 0x770cb8f, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_reify__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_8_helpers_5reify_8__setstate_cython__(((struct __pyx_obj_7aiohttp_8_helpers_reify *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_8__setstate_cython__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_reify, (type(self), 0x770cb8f, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_reify__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_7aiohttp_8_helpers___pyx_unpickle_reify__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_reify, (type(self), 0x770cb8f, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_reify__set_state(self, __pyx_state) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._helpers.reify.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_reify(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_8_helpers_1__pyx_unpickle_reify(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_7aiohttp_8_helpers_1__pyx_unpickle_reify = {"__pyx_unpickle_reify", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_8_helpers_1__pyx_unpickle_reify, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_7aiohttp_8_helpers_1__pyx_unpickle_reify(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_reify (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_reify", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_reify", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_reify") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + } + __pyx_v___pyx_type = values[0]; + __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_v___pyx_state = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_reify", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._helpers.__pyx_unpickle_reify", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_7aiohttp_8_helpers___pyx_unpickle_reify(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_8_helpers___pyx_unpickle_reify(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + __Pyx_RefNannySetupContext("__pyx_unpickle_reify", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0x770cb8f: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x770cb8f) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0x770cb8f: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))" % __pyx_checksum) + * __pyx_result = reify.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0x770cb8f: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = reify.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x77, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0x770cb8f: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))" % __pyx_checksum) + * __pyx_result = reify.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_reify__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_7aiohttp_8_helpers_reify), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))" % __pyx_checksum) + * __pyx_result = reify.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_reify__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = reify.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_reify__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_reify__set_state(reify __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_f_7aiohttp_8_helpers___pyx_unpickle_reify__set_state(((struct __pyx_obj_7aiohttp_8_helpers_reify *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))" % __pyx_checksum) + * __pyx_result = reify.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_reify__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_reify__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_reify__set_state(reify __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0]; __pyx_result.wrapped = __pyx_state[1] + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v___pyx_result); + __pyx_r = __pyx_v___pyx_result; + goto __pyx_L0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_reify(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("aiohttp._helpers.__pyx_unpickle_reify", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v___pyx_PickleError); + __Pyx_XDECREF(__pyx_v___pyx_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":11 + * __pyx_unpickle_reify__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_reify__set_state(reify __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0]; __pyx_result.wrapped = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_f_7aiohttp_8_helpers___pyx_unpickle_reify__set_state(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + __Pyx_RefNannySetupContext("__pyx_unpickle_reify__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_reify__set_state(reify __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0]; __pyx_result.wrapped = __pyx_state[1] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[2]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->name); + __Pyx_DECREF(__pyx_v___pyx_result->name); + __pyx_v___pyx_result->name = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->wrapped); + __Pyx_DECREF(__pyx_v___pyx_result->wrapped); + __pyx_v___pyx_result->wrapped = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_reify__set_state(reify __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0]; __pyx_result.wrapped = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[2]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 13, __pyx_L1_error) + } + __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = ((__pyx_t_3 > 2) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 != 0); + __pyx_t_2 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "(tree fragment)":14 + * __pyx_result.name = __pyx_state[0]; __pyx_result.wrapped = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[2]) # <<<<<<<<<<<<<< + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 14, __pyx_L1_error) + } + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + } + } + __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_reify__set_state(reify __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0]; __pyx_result.wrapped = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[2]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_reify__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_reify__set_state(reify __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0]; __pyx_result.wrapped = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("aiohttp._helpers.__pyx_unpickle_reify__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_tp_new_7aiohttp_8_helpers_reify(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_obj_7aiohttp_8_helpers_reify *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_obj_7aiohttp_8_helpers_reify *)o); + p->wrapped = Py_None; Py_INCREF(Py_None); + p->name = Py_None; Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_7aiohttp_8_helpers_reify(PyObject *o) { + struct __pyx_obj_7aiohttp_8_helpers_reify *p = (struct __pyx_obj_7aiohttp_8_helpers_reify *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->wrapped); + Py_CLEAR(p->name); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_7aiohttp_8_helpers_reify(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_7aiohttp_8_helpers_reify *p = (struct __pyx_obj_7aiohttp_8_helpers_reify *)o; + if (p->wrapped) { + e = (*v)(p->wrapped, a); if (e) return e; + } + if (p->name) { + e = (*v)(p->name, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_7aiohttp_8_helpers_reify(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_7aiohttp_8_helpers_reify *p = (struct __pyx_obj_7aiohttp_8_helpers_reify *)o; + tmp = ((PyObject*)p->wrapped); + p->wrapped = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->name); + p->name = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyObject *__pyx_tp_descr_get_7aiohttp_8_helpers_reify(PyObject *o, PyObject *i, PyObject *c) { + PyObject *r = 0; + if (!i) i = Py_None; + if (!c) c = Py_None; + r = __pyx_pw_7aiohttp_8_helpers_5reify_3__get__(o, i, c); + return r; +} + +static int __pyx_tp_descr_set_7aiohttp_8_helpers_reify(PyObject *o, PyObject *i, PyObject *v) { + if (v) { + return __pyx_pw_7aiohttp_8_helpers_5reify_5__set__(o, i, v); + } + else { + PyErr_SetString(PyExc_NotImplementedError, "__delete__"); + return -1; + } +} + +static PyObject *__pyx_getprop_7aiohttp_8_helpers_5reify___doc__(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_8_helpers_5reify_7__doc___1__get__(o); +} + +static PyMethodDef __pyx_methods_7aiohttp_8_helpers_reify[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw_7aiohttp_8_helpers_5reify_7__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_7aiohttp_8_helpers_5reify_9__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_7aiohttp_8_helpers_reify[] = { + {(char *)"__doc__", __pyx_getprop_7aiohttp_8_helpers_5reify___doc__, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type_7aiohttp_8_helpers_reify = { + PyVarObject_HEAD_INIT(0, 0) + "aiohttp._helpers.reify", /*tp_name*/ + sizeof(struct __pyx_obj_7aiohttp_8_helpers_reify), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_7aiohttp_8_helpers_reify, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + "Use as a class method decorator. It operates almost exactly like\n the Python `@property` decorator, but it puts the result of the\n method it decorates into the instance dict after the first call,\n effectively replacing the function it decorates with an instance\n variable. It is, in Python parlance, a data descriptor.\n\n ", /*tp_doc*/ + __pyx_tp_traverse_7aiohttp_8_helpers_reify, /*tp_traverse*/ + __pyx_tp_clear_7aiohttp_8_helpers_reify, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_7aiohttp_8_helpers_reify, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_7aiohttp_8_helpers_reify, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + __pyx_tp_descr_get_7aiohttp_8_helpers_reify, /*tp_descr_get*/ + __pyx_tp_descr_set_7aiohttp_8_helpers_reify, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_7aiohttp_8_helpers_5reify_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_7aiohttp_8_helpers_reify, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif +}; + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec__helpers(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec__helpers}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "_helpers", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_n_s_AttributeError, __pyx_k_AttributeError, sizeof(__pyx_k_AttributeError), 0, 0, 1, 1}, + {&__pyx_kp_s_Incompatible_checksums_s_vs_0x77, __pyx_k_Incompatible_checksums_s_vs_0x77, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x77), 0, 0, 1, 0}, + {&__pyx_n_s_KeyError, __pyx_k_KeyError, sizeof(__pyx_k_KeyError), 0, 0, 1, 1}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_aiohttp__helpers, __pyx_k_aiohttp__helpers, sizeof(__pyx_k_aiohttp__helpers), 0, 0, 1, 1}, + {&__pyx_n_s_cache, __pyx_k_cache, sizeof(__pyx_k_cache), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, + {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, + {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_reify, __pyx_k_pyx_unpickle_reify, sizeof(__pyx_k_pyx_unpickle_reify), 0, 0, 1, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, + {&__pyx_kp_u_reified_property_is_read_only, __pyx_k_reified_property_is_read_only, sizeof(__pyx_k_reified_property_is_read_only), 0, 1, 0, 0}, + {&__pyx_n_s_reify, __pyx_k_reify, sizeof(__pyx_k_reify), 0, 0, 1, 1}, + {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, + {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_wrapped, __pyx_k_wrapped, sizeof(__pyx_k_wrapped), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s_KeyError); if (!__pyx_builtin_KeyError) __PYX_ERR(0, 25, __pyx_L1_error) + __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) __PYX_ERR(0, 29, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "aiohttp/_helpers.pyx":35 + * + * def __set__(self, inst, value): + * raise AttributeError("reified property is read-only") # <<<<<<<<<<<<<< + */ + __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_reified_property_is_read_only); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + + /* "(tree fragment)":1 + * def __pyx_unpickle_reify(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_tuple__2 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + __pyx_codeobj__3 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__2, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_reify, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_int_124832655 = PyInt_FromLong(124832655L); if (unlikely(!__pyx_int_124832655)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + if (PyType_Ready(&__pyx_type_7aiohttp_8_helpers_reify) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_7aiohttp_8_helpers_reify.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_8_helpers_reify.tp_dictoffset && __pyx_type_7aiohttp_8_helpers_reify.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_7aiohttp_8_helpers_reify.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_reify, (PyObject *)&__pyx_type_7aiohttp_8_helpers_reify) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7aiohttp_8_helpers_reify) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_ptype_7aiohttp_8_helpers_reify = &__pyx_type_7aiohttp_8_helpers_reify; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION < 3 +#ifdef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC void +#else +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#endif +#else +#ifdef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC init_helpers(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC init_helpers(void) +#else +__Pyx_PyMODINIT_FUNC PyInit__helpers(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit__helpers(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { + result = PyDict_SetItemString(moddict, to_name, value); + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec__helpers(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module '_helpers' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit__helpers(void)", 0); + if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("_helpers", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_b); + __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_cython_runtime); + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_aiohttp___helpers) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "aiohttp._helpers")) { + if (unlikely(PyDict_SetItemString(modules, "aiohttp._helpers", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) goto __pyx_L1_error; + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) goto __pyx_L1_error; + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely(__Pyx_modinit_type_init_code() != 0)) goto __pyx_L1_error; + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "(tree fragment)":1 + * def __pyx_unpickle_reify(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7aiohttp_8_helpers_1__pyx_unpickle_reify, NULL, __pyx_n_s_aiohttp__helpers); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_reify, __pyx_t_1) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_helpers.pyx":1 + * cdef class reify: # <<<<<<<<<<<<<< + * """Use as a class method decorator. It operates almost exactly like + * the Python `@property` decorator, but it puts the result of the + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init aiohttp._helpers", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init aiohttp._helpers"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (!j) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; + if (likely(m && m->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { + Py_ssize_t l = m->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return m->sq_item(o, i); + } + } +#else + if (is_list || PySequence_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* ObjectGetItem */ +#if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) { + PyObject *runerr; + Py_ssize_t key_value; + PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence; + if (unlikely(!(m && m->sq_item))) { + PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name); + return NULL; + } + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) { + PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping; + if (likely(m && m->mp_subscript)) { + return m->mp_subscript(obj, key); + } + return __Pyx_PyObject_GetIndex(obj, key); +} +#endif + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + #endif + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; icurexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; + if (unlikely(PyTuple_Check(err))) + return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); +} +#endif + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type, *local_value, *local_tb; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* PyCFunctionFastCall */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { + PyCFunctionObject *func = (PyCFunctionObject*)func_obj; + PyCFunction meth = PyCFunction_GET_FUNCTION(func); + PyObject *self = PyCFunction_GET_SELF(func); + int flags = PyCFunction_GET_FLAGS(func); + assert(PyCFunction_Check(func)); + assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + /* _PyCFunction_FastCallDict() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller loses its exception */ + assert(!PyErr_Occurred()); + if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { + return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + } else { + return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + } +} +#endif + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCall2Args */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args, *result = NULL; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyFunction_FastCall(function, args, 2); + } + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyCFunction_FastCall(function, args, 2); + } + #endif + args = PyTuple_New(2); + if (unlikely(!args)) goto done; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + Py_INCREF(function); + result = __Pyx_PyObject_Call(function, args, NULL); + Py_DECREF(args); + Py_DECREF(function); +done: + return result; +} + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallOneArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, &arg, 1); + } +#endif + if (likely(PyCFunction_Check(func))) { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); +#if CYTHON_FAST_PYCCALL + } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { + return __Pyx_PyCFunction_FastCall(func, &arg, 1); +#endif + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + __Pyx_PyThreadState_declare + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { +#if CYTHON_COMPILING_IN_PYPY + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#else + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); +} + +/* GetAttr3 */ +static PyObject *__Pyx_GetAttr3Default(PyObject *d) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + __Pyx_PyErr_Clear(); + Py_INCREF(d); + return d; +} +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { + PyObject *r = __Pyx_GetAttr(o, n); + return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (!py_import) + goto bad; + #endif + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.')) { + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, 1); + if (!module) { + if (!PyErr_ExceptionMatches(PyExc_ImportError)) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, level); + #endif + } + } +bad: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* HasAttr */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { + PyObject *r; + if (unlikely(!__Pyx_PyBaseString_Check(n))) { + PyErr_SetString(PyExc_TypeError, + "hasattr(): attribute name must be string"); + return -1; + } + r = __Pyx_GetAttr(o, n); + if (unlikely(!r)) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, attr_name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(attr_name)); +#endif + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PyObject_GenericGetAttr */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { + if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { + return PyObject_GenericGetAttr(obj, attr_name); + } + return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); +} +#endif + +/* SetupReduce */ +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name); + if (likely(name_attr)) { + ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); + } else { + ret = -1; + } + if (unlikely(ret < 0)) { + PyErr_Clear(); + ret = 0; + } + Py_XDECREF(name_attr); + return ret; +} +static int __Pyx_setup_reduce(PyObject* type_obj) { + int ret = 0; + PyObject *object_reduce = NULL; + PyObject *object_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto GOOD; +#else + if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto GOOD; +#endif +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD; +#else + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD; +#endif + reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto BAD; + if (reduce_ex == object_reduce_ex) { +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD; +#endif + reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto BAD; + if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { + reduce_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_cython); if (unlikely(!reduce_cython)) goto BAD; + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto BAD; + setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate); + if (!setstate) PyErr_Clear(); + if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { + setstate_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate_cython); if (unlikely(!setstate_cython)) goto BAD; + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto BAD; + } + PyType_Modified((PyTypeObject*)type_obj); + } + } + goto GOOD; +BAD: + if (!PyErr_Occurred()) + PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); + ret = -1; +GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); +#endif + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} + +/* CLineInTraceback */ +#ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} + +/* AddTraceback */ +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +/* CIntFromPyVerify */ +#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +/* CIntFromPy */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntFromPy */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + case -2: + if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; ip) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type %.200s). " + "The ability to return an instance of a strict subclass of int " + "is deprecated, and may be removed in a future version of Python.", + Py_TYPE(result)->tp_name)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.cpython-36m-x86_64-linux-gnu.so b/venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.cpython-36m-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..f041fc8ef56937276ad7d2c310c1dc0143e40b76 GIT binary patch literal 217557 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

  • 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%0DFc1c1Yic_v#9t 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 HY|H-vHyfhI literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.pyi b/venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.pyi new file mode 100644 index 0000000..59608e1 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.pyi @@ -0,0 +1,8 @@ +from typing import Any + +class reify: + def __init__(self, wrapped: Any) -> None: ... + + def __get__(self, inst: Any, owner: Any) -> Any: ... + + def __set__(self, inst: Any, value: Any) -> None: ... diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.pyx b/venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.pyx new file mode 100644 index 0000000..665f367 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_helpers.pyx @@ -0,0 +1,35 @@ +cdef class reify: + """Use as a class method decorator. It operates almost exactly like + the Python `@property` decorator, but it puts the result of the + method it decorates into the instance dict after the first call, + effectively replacing the function it decorates with an instance + variable. It is, in Python parlance, a data descriptor. + + """ + + cdef object wrapped + cdef object name + + def __init__(self, wrapped): + self.wrapped = wrapped + self.name = wrapped.__name__ + + @property + def __doc__(self): + return self.wrapped.__doc__ + + def __get__(self, inst, owner): + try: + try: + return inst._cache[self.name] + except KeyError: + val = self.wrapped(inst) + inst._cache[self.name] = val + return val + except AttributeError: + if inst is None: + return self + raise + + def __set__(self, inst, value): + raise AttributeError("reified property is read-only") diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_http_parser.c b/venv-linux/lib/python3.6/site-packages/aiohttp/_http_parser.c new file mode 100644 index 0000000..5c4c97b --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_http_parser.c @@ -0,0 +1,24148 @@ +/* Generated by Cython 0.29.13 */ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.6+ or Python 3.3+. +#else +#define CYTHON_ABI "0_29_13" +#define CYTHON_HEX_VERSION 0x001D0DF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact + #define PyObject_Unicode PyObject_Str +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : (Py_INCREF(func), func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + + +#define __PYX_ERR(f_index, lineno, Ln_error) \ +{ \ + __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \ +} + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__aiohttp___http_parser +#define __PYX_HAVE_API__aiohttp___http_parser +/* Early includes */ +#include +#include +#include "pythread.h" +#include +#include "../vendor/http-parser/http_parser.h" +#include "_find_header.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +static PyObject *__pyx_m = NULL; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_cython_runtime = NULL; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static PyObject *__pyx_empty_unicode; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + + +static const char *__pyx_f[] = { + "aiohttp/_http_parser.pyx", + "stringsource", + ".build-venv/lib/python3.6/site-packages/Cython/Includes/cpython/type.pxd", + ".build-venv/lib/python3.6/site-packages/Cython/Includes/cpython/bool.pxd", + ".build-venv/lib/python3.6/site-packages/Cython/Includes/cpython/complex.pxd", + "aiohttp/_headers.pxi", +}; + +/*--- Type declarations ---*/ +struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage; +struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage; +struct __pyx_obj_7aiohttp_12_http_parser_HttpParser; +struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser; +struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser; +struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__; +struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr; +struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__; +struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr; +struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init; + +/* "aiohttp/_http_parser.pyx":308 + * PyMem_Free(self._csettings) + * + * cdef _init(self, cparser.http_parser_type mode, # <<<<<<<<<<<<<< + * object protocol, object loop, object timer=None, + * size_t max_line_size=8190, size_t max_headers=32768, + */ +struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init { + int __pyx_n; + PyObject *timer; + size_t max_line_size; + size_t max_headers; + size_t max_field_size; + PyObject *payload_exception; + int response_with_body; + int auto_decompress; +}; + +/* "aiohttp/_http_parser.pyx":93 + * + * @cython.freelist(DEFAULT_FREELIST_SIZE) + * cdef class RawRequestMessage: # <<<<<<<<<<<<<< + * cdef readonly str method + * cdef readonly str path + */ +struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage { + PyObject_HEAD + PyObject *method; + PyObject *path; + PyObject *version; + PyObject *headers; + PyObject *raw_headers; + PyObject *should_close; + PyObject *compression; + PyObject *upgrade; + PyObject *chunked; + PyObject *url; +}; + + +/* "aiohttp/_http_parser.pyx":193 + * + * @cython.freelist(DEFAULT_FREELIST_SIZE) + * cdef class RawResponseMessage: # <<<<<<<<<<<<<< + * cdef readonly object version # HttpVersion + * cdef readonly int code + */ +struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage { + PyObject_HEAD + PyObject *version; + int code; + PyObject *reason; + PyObject *headers; + PyObject *raw_headers; + PyObject *should_close; + PyObject *compression; + PyObject *upgrade; + PyObject *chunked; +}; + + +/* "aiohttp/_http_parser.pyx":255 + * + * @cython.internal + * cdef class HttpParser: # <<<<<<<<<<<<<< + * + * cdef: + */ +struct __pyx_obj_7aiohttp_12_http_parser_HttpParser { + PyObject_HEAD + struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *__pyx_vtab; + struct http_parser *_cparser; + struct http_parser_settings *_csettings; + PyObject *_raw_name; + PyObject *_raw_value; + int _has_value; + PyObject *_protocol; + PyObject *_loop; + PyObject *_timer; + size_t _max_line_size; + size_t _max_field_size; + size_t _max_headers; + int _response_with_body; + int _started; + PyObject *_url; + PyObject *_buf; + PyObject *_path; + PyObject *_reason; + PyObject *_headers; + PyObject *_raw_headers; + int _upgraded; + PyObject *_messages; + PyObject *_payload; + int _payload_error; + PyObject *_payload_exception; + PyObject *_last_error; + int _auto_decompress; + PyObject *_content_encoding; + Py_buffer py_buf; +}; + + +/* "aiohttp/_http_parser.pyx":537 + * + * + * cdef class HttpRequestParser(HttpParser): # <<<<<<<<<<<<<< + * + * def __init__(self, protocol, loop, timer=None, + */ +struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser { + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser __pyx_base; +}; + + +/* "aiohttp/_http_parser.pyx":564 + * + * + * cdef class HttpResponseParser(HttpParser): # <<<<<<<<<<<<<< + * + * def __init__(self, protocol, loop, timer=None, + */ +struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser { + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser __pyx_base; +}; + + +/* "aiohttp/_http_parser.pyx":118 + * self.url = url + * + * def __repr__(self): # <<<<<<<<<<<<<< + * info = [] + * info.append(("method", self.method)) + */ +struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ { + PyObject_HEAD + PyObject *__pyx_v_info; +}; + + +/* "aiohttp/_http_parser.pyx":130 + * info.append(("chunked", self.chunked)) + * info.append(("url", self.url)) + * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) # <<<<<<<<<<<<<< + * return '' + * + */ +struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr { + PyObject_HEAD + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *__pyx_outer_scope; + PyObject *__pyx_v_name; + PyObject *__pyx_v_val; +}; + + +/* "aiohttp/_http_parser.pyx":216 + * self.chunked = chunked + * + * def __repr__(self): # <<<<<<<<<<<<<< + * info = [] + * info.append(("version", self.version)) + */ +struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ { + PyObject_HEAD + PyObject *__pyx_v_info; +}; + + +/* "aiohttp/_http_parser.pyx":227 + * info.append(("upgrade", self.upgrade)) + * info.append(("chunked", self.chunked)) + * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) # <<<<<<<<<<<<<< + * return '' + * + */ +struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr { + PyObject_HEAD + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *__pyx_outer_scope; + PyObject *__pyx_v_name; + PyObject *__pyx_v_val; +}; + + + +/* "aiohttp/_http_parser.pyx":255 + * + * @cython.internal + * cdef class HttpParser: # <<<<<<<<<<<<<< + * + * cdef: + */ + +struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser { + PyObject *(*_init)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *, enum http_parser_type, PyObject *, PyObject *, struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init *__pyx_optional_args); + PyObject *(*_process_header)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); + PyObject *(*_on_header_field)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *, char *, size_t); + PyObject *(*_on_header_value)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *, char *, size_t); + PyObject *(*_on_headers_complete)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); + PyObject *(*_on_message_complete)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); + PyObject *(*_on_chunk_header)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); + PyObject *(*_on_chunk_complete)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); + PyObject *(*_on_status_complete)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); + PyObject *(*http_version)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); +}; +static struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *__pyx_vtabptr_7aiohttp_12_http_parser_HttpParser; +static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser_http_version(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); + + +/* "aiohttp/_http_parser.pyx":537 + * + * + * cdef class HttpRequestParser(HttpParser): # <<<<<<<<<<<<<< + * + * def __init__(self, protocol, loop, timer=None, + */ + +struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpRequestParser { + struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser __pyx_base; +}; +static struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpRequestParser *__pyx_vtabptr_7aiohttp_12_http_parser_HttpRequestParser; + + +/* "aiohttp/_http_parser.pyx":564 + * + * + * cdef class HttpResponseParser(HttpParser): # <<<<<<<<<<<<<< + * + * def __init__(self, protocol, loop, timer=None, + */ + +struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpResponseParser { + struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser __pyx_base; +}; +static struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpResponseParser *__pyx_vtabptr_7aiohttp_12_http_parser_HttpResponseParser; + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* decode_c_string_utf16.proto */ +static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) { + int byteorder = 0; + return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); +} +static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) { + int byteorder = -1; + return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); +} +static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) { + int byteorder = 1; + return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); +} + +/* decode_c_bytes.proto */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes( + const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop, + const char* encoding, const char* errors, + PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)); + +/* decode_bytes.proto */ +static CYTHON_INLINE PyObject* __Pyx_decode_bytes( + PyObject* string, Py_ssize_t start, Py_ssize_t stop, + const char* encoding, const char* errors, + PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { + return __Pyx_decode_c_bytes( + PyBytes_AS_STRING(string), PyBytes_GET_SIZE(string), + start, stop, encoding, errors, decode_func); +} + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +/* None.proto */ +static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname); + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* IterFinish.proto */ +static CYTHON_INLINE int __Pyx_IterFinish(void); + +/* UnpackItemEndCheck.proto */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); + +/* ListCompAppend.proto */ +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len)) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + Py_SIZE(list) = len+1; + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) +#endif + +/* ListAppend.proto */ +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + Py_SIZE(list) = len+1; + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) +#endif + +/* KeywordStringCheck.proto */ +static int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed); + +/* ExtTypeTest.proto */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); + +/* PyDictContains.proto */ +static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) { + int result = PyDict_Contains(dict, item); + return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); +} + +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* GetAttr3.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#else +#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectCallNoArg.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); +#else +#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL) +#endif + +/* PyCFunctionFastCall.proto */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +#else +#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* PyObjectCall2Args.proto */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PySequenceContains.proto */ +static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) { + int result = PySequence_Contains(seq, item); + return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); +} + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* SliceObject.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( + PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, + PyObject** py_start, PyObject** py_stop, PyObject** py_slice, + int has_cstart, int has_cstop, int wraparound); + +/* decode_bytearray.proto */ +static CYTHON_INLINE PyObject* __Pyx_decode_bytearray( + PyObject* string, Py_ssize_t start, Py_ssize_t stop, + const char* encoding, const char* errors, + PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { + return __Pyx_decode_c_bytes( + PyByteArray_AS_STRING(string), PyByteArray_GET_SIZE(string), + start, stop, encoding, errors, decode_func); +} + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* decode_c_string.proto */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_string( + const char* cstring, Py_ssize_t start, Py_ssize_t stop, + const char* encoding, const char* errors, + PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)); + +/* UnpackUnboundCMethod.proto */ +typedef struct { + PyObject *type; + PyObject **method_name; + PyCFunction func; + PyObject *method; + int flag; +} __Pyx_CachedCFunction; + +/* CallUnboundCMethod1.proto */ +static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg); +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg); +#else +#define __Pyx_CallUnboundCMethod1(cfunc, self, arg) __Pyx__CallUnboundCMethod1(cfunc, self, arg) +#endif + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PyObject_GenericGetAttr.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr +#endif + +/* SetupReduce.proto */ +static int __Pyx_setup_reduce(PyObject* type_obj); + +/* SetVTable.proto */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable); + +/* TypeImport.proto */ +#ifndef __PYX_HAVE_RT_ImportType_proto +#define __PYX_HAVE_RT_ImportType_proto +enum __Pyx_ImportType_CheckSize { + __Pyx_ImportType_CheckSize_Error = 0, + __Pyx_ImportType_CheckSize_Warn = 1, + __Pyx_ImportType_CheckSize_Ignore = 2 +}; +static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); +#endif + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_short(unsigned short value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint16_t(uint16_t value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE enum http_method __Pyx_PyInt_As_enum__http_method(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* FetchCommonType.proto */ +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod1.proto */ +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); + +/* CoroutineBase.proto */ +typedef PyObject *(*__pyx_coroutine_body_t)(PyObject *, PyThreadState *, PyObject *); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_ExcInfoStruct _PyErr_StackItem +#else +typedef struct { + PyObject *exc_type; + PyObject *exc_value; + PyObject *exc_traceback; +} __Pyx_ExcInfoStruct; +#endif +typedef struct { + PyObject_HEAD + __pyx_coroutine_body_t body; + PyObject *closure; + __Pyx_ExcInfoStruct gi_exc_state; + PyObject *gi_weakreflist; + PyObject *classobj; + PyObject *yieldfrom; + PyObject *gi_name; + PyObject *gi_qualname; + PyObject *gi_modulename; + PyObject *gi_code; + int resume_label; + char is_running; +} __pyx_CoroutineObject; +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name); +static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self); +static int __Pyx_Coroutine_clear(PyObject *self); +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value); +static PyObject *__Pyx_Coroutine_Close(PyObject *self); +static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args); +#if CYTHON_USE_EXC_INFO_STACK +#define __Pyx_Coroutine_SwapException(self) +#define __Pyx_Coroutine_ResetAndClearException(self) __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state) +#else +#define __Pyx_Coroutine_SwapException(self) {\ + __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\ + __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\ + } +#define __Pyx_Coroutine_ResetAndClearException(self) {\ + __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\ + (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\ + } +#endif +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue) +#else +#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue) +#endif +static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue); +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state); + +/* PatchModuleWithCoroutine.proto */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code); + +/* PatchGeneratorABC.proto */ +static int __Pyx_patch_abc(void); + +/* Generator.proto */ +#define __Pyx_Generator_USED +static PyTypeObject *__pyx_GeneratorType = 0; +#define __Pyx_Generator_CheckExact(obj) (Py_TYPE(obj) == __pyx_GeneratorType) +#define __Pyx_Generator_New(body, code, closure, name, qualname, module_name)\ + __Pyx__Coroutine_New(__pyx_GeneratorType, body, code, closure, name, qualname, module_name) +static PyObject *__Pyx_Generator_Next(PyObject *self); +static int __pyx_Generator_init(void); + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__init(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, enum http_parser_type __pyx_v_mode, PyObject *__pyx_v_protocol, PyObject *__pyx_v_loop, struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init *__pyx_optional_args); /* proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__process_header(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self); /* proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_header_field(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, char *__pyx_v_at, size_t __pyx_v_length); /* proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_header_value(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, char *__pyx_v_at, size_t __pyx_v_length); /* proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_headers_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self); /* proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_message_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self); /* proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_chunk_header(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self); /* proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_chunk_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self); /* proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_status_complete(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser_http_version(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self); /* proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser_17HttpRequestParser__on_status_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *__pyx_v_self); /* proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser_18HttpResponseParser__on_status_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *__pyx_v_self); /* proto*/ + +/* Module declarations from 'cpython.mem' */ + +/* Module declarations from 'libc.string' */ + +/* Module declarations from 'cpython.version' */ + +/* Module declarations from '__builtin__' */ + +/* Module declarations from 'cpython.type' */ +static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; + +/* Module declarations from 'libc.stdio' */ + +/* Module declarations from 'cpython.object' */ + +/* Module declarations from 'cpython.ref' */ + +/* Module declarations from 'cpython.exc' */ + +/* Module declarations from 'cpython.module' */ + +/* Module declarations from 'cpython.tuple' */ + +/* Module declarations from 'cpython.list' */ + +/* Module declarations from 'cpython.sequence' */ + +/* Module declarations from 'cpython.mapping' */ + +/* Module declarations from 'cpython.iterator' */ + +/* Module declarations from 'cpython.number' */ + +/* Module declarations from 'cpython.int' */ + +/* Module declarations from '__builtin__' */ + +/* Module declarations from 'cpython.bool' */ +static PyTypeObject *__pyx_ptype_7cpython_4bool_bool = 0; + +/* Module declarations from 'cpython.long' */ + +/* Module declarations from 'cpython.float' */ + +/* Module declarations from '__builtin__' */ + +/* Module declarations from 'cpython.complex' */ +static PyTypeObject *__pyx_ptype_7cpython_7complex_complex = 0; + +/* Module declarations from 'cpython.string' */ + +/* Module declarations from 'cpython.unicode' */ + +/* Module declarations from 'cpython.dict' */ + +/* Module declarations from 'cpython.instance' */ + +/* Module declarations from 'cpython.function' */ + +/* Module declarations from 'cpython.method' */ + +/* Module declarations from 'cpython.weakref' */ + +/* Module declarations from 'cpython.getargs' */ + +/* Module declarations from 'cpython.pythread' */ + +/* Module declarations from 'cpython.pystate' */ + +/* Module declarations from 'cpython.cobject' */ + +/* Module declarations from 'cpython.oldbuffer' */ + +/* Module declarations from 'cpython.set' */ + +/* Module declarations from 'cpython.buffer' */ + +/* Module declarations from 'cpython.bytes' */ + +/* Module declarations from 'cpython.pycapsule' */ + +/* Module declarations from 'cpython' */ + +/* Module declarations from 'cython' */ + +/* Module declarations from 'aiohttp' */ + +/* Module declarations from 'libc.stdint' */ + +/* Module declarations from 'aiohttp._cparser' */ + +/* Module declarations from 'aiohttp._find_header' */ + +/* Module declarations from 'aiohttp._http_parser' */ +static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser_RawRequestMessage = 0; +static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser_RawResponseMessage = 0; +static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser_HttpParser = 0; +static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser_HttpRequestParser = 0; +static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser_HttpResponseParser = 0; +static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct____repr__ = 0; +static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr = 0; +static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ = 0; +static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr = 0; +static PyObject *__pyx_v_7aiohttp_12_http_parser_headers = 0; +static PyObject *__pyx_v_7aiohttp_12_http_parser_URL = 0; +static PyObject *__pyx_v_7aiohttp_12_http_parser_URL_build = 0; +static PyObject *__pyx_v_7aiohttp_12_http_parser_CIMultiDict = 0; +static PyObject *__pyx_v_7aiohttp_12_http_parser_CIMultiDictProxy = 0; +static PyObject *__pyx_v_7aiohttp_12_http_parser_HttpVersion = 0; +static PyObject *__pyx_v_7aiohttp_12_http_parser_HttpVersion10 = 0; +static PyObject *__pyx_v_7aiohttp_12_http_parser_HttpVersion11 = 0; +static PyObject *__pyx_v_7aiohttp_12_http_parser_SEC_WEBSOCKET_KEY1 = 0; +static PyObject *__pyx_v_7aiohttp_12_http_parser_CONTENT_ENCODING = 0; +static PyObject *__pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD = 0; +static PyObject *__pyx_v_7aiohttp_12_http_parser_StreamReader = 0; +static PyObject *__pyx_v_7aiohttp_12_http_parser_DeflateBuffer = 0; +static PyObject *__pyx_v_7aiohttp_12_http_parser__http_method = 0; +static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_extend(PyObject *, char const *, size_t); /*proto*/ +static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_http_method_str(int); /*proto*/ +static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_find_header(PyObject *); /*proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser__new_request_message(PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, int, PyObject *, int, int, PyObject *); /*proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser__new_response_message(PyObject *, int, PyObject *, PyObject *, PyObject *, int, PyObject *, int, int); /*proto*/ +static int __pyx_f_7aiohttp_12_http_parser_cb_on_message_begin(struct http_parser *); /*proto*/ +static int __pyx_f_7aiohttp_12_http_parser_cb_on_url(struct http_parser *, char const *, size_t); /*proto*/ +static int __pyx_f_7aiohttp_12_http_parser_cb_on_status(struct http_parser *, char const *, size_t); /*proto*/ +static int __pyx_f_7aiohttp_12_http_parser_cb_on_header_field(struct http_parser *, char const *, size_t); /*proto*/ +static int __pyx_f_7aiohttp_12_http_parser_cb_on_header_value(struct http_parser *, char const *, size_t); /*proto*/ +static int __pyx_f_7aiohttp_12_http_parser_cb_on_headers_complete(struct http_parser *); /*proto*/ +static int __pyx_f_7aiohttp_12_http_parser_cb_on_body(struct http_parser *, char const *, size_t); /*proto*/ +static int __pyx_f_7aiohttp_12_http_parser_cb_on_message_complete(struct http_parser *); /*proto*/ +static int __pyx_f_7aiohttp_12_http_parser_cb_on_chunk_header(struct http_parser *); /*proto*/ +static int __pyx_f_7aiohttp_12_http_parser_cb_on_chunk_complete(struct http_parser *); /*proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser_parser_error_from_errno(enum http_errno); /*proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser__parse_url(char *, size_t); /*proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawRequestMessage__set_state(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *, PyObject *); /*proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawResponseMessage__set_state(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *, PyObject *); /*proto*/ +#define __Pyx_MODULE_NAME "aiohttp._http_parser" +extern int __pyx_module_is_main_aiohttp___http_parser; +int __pyx_module_is_main_aiohttp___http_parser = 0; + +/* Implementation of 'aiohttp._http_parser' */ +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_MemoryError; +static PyObject *__pyx_builtin_TypeError; +static PyObject *__pyx_builtin_BaseException; +static const char __pyx_k_[] = "="; +static const char __pyx_k_i[] = "i"; +static const char __pyx_k_TE[] = "TE"; +static const char __pyx_k__2[] = ", "; +static const char __pyx_k__3[] = ")>"; +static const char __pyx_k__4[] = ""; +static const char __pyx_k_br[] = "br"; +static const char __pyx_k_AGE[] = "AGE"; +static const char __pyx_k_URI[] = "URI"; +static const char __pyx_k_URL[] = "URL"; +static const char __pyx_k_VIA[] = "VIA"; +static const char __pyx_k__11[] = ":"; +static const char __pyx_k_add[] = "add"; +static const char __pyx_k_all[] = "__all__"; +static const char __pyx_k_new[] = "__new__"; +static const char __pyx_k_url[] = "url"; +static const char __pyx_k_DATE[] = "DATE"; +static const char __pyx_k_ETAG[] = "ETAG"; +static const char __pyx_k_FROM[] = "FROM"; +static const char __pyx_k_HOST[] = "HOST"; +static const char __pyx_k_LINK[] = "LINK"; +static const char __pyx_k_VARY[] = "VARY"; +static const char __pyx_k_args[] = "args"; +static const char __pyx_k_code[] = "code"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_gzip[] = "gzip"; +static const char __pyx_k_hdrs[] = "hdrs"; +static const char __pyx_k_host[] = "host"; +static const char __pyx_k_loop[] = "loop"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_path[] = "path"; +static const char __pyx_k_port[] = "port"; +static const char __pyx_k_send[] = "send"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_user[] = "user"; +static const char __pyx_k_yarl[] = "yarl"; +static const char __pyx_k_ALLOW[] = "ALLOW"; +static const char __pyx_k_RANGE[] = "RANGE"; +static const char __pyx_k_URL_2[] = "_URL"; +static const char __pyx_k_build[] = "build"; +static const char __pyx_k_close[] = "close"; +static const char __pyx_k_lower[] = "lower"; +static const char __pyx_k_query[] = "query"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_throw[] = "throw"; +static const char __pyx_k_timer[] = "timer"; +static const char __pyx_k_ACCEPT[] = "ACCEPT"; +static const char __pyx_k_COOKIE[] = "COOKIE"; +static const char __pyx_k_DIGEST[] = "DIGEST"; +static const char __pyx_k_EXPECT[] = "EXPECT"; +static const char __pyx_k_ORIGIN[] = "ORIGIN"; +static const char __pyx_k_PRAGMA[] = "PRAGMA"; +static const char __pyx_k_SERVER[] = "SERVER"; +static const char __pyx_k_format[] = "format"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_method[] = "method"; +static const char __pyx_k_pickle[] = "pickle"; +static const char __pyx_k_py_buf[] = "py_buf"; +static const char __pyx_k_reason[] = "reason"; +static const char __pyx_k_reduce[] = "__reduce__"; +static const char __pyx_k_scheme[] = "scheme"; +static const char __pyx_k_update[] = "update"; +static const char __pyx_k_EXPIRES[] = "EXPIRES"; +static const char __pyx_k_REFERER[] = "REFERER"; +static const char __pyx_k_TRAILER[] = "TRAILER"; +static const char __pyx_k_UPGRADE[] = "UPGRADE"; +static const char __pyx_k_WARNING[] = "WARNING"; +static const char __pyx_k_aiohttp[] = "aiohttp"; +static const char __pyx_k_chunked[] = "chunked"; +static const char __pyx_k_deflate[] = "deflate"; +static const char __pyx_k_genexpr[] = "genexpr"; +static const char __pyx_k_headers[] = "headers"; +static const char __pyx_k_streams[] = "streams"; +static const char __pyx_k_unknown[] = ""; +static const char __pyx_k_upgrade[] = "upgrade"; +static const char __pyx_k_version[] = "version"; +static const char __pyx_k_IF_MATCH[] = "IF_MATCH"; +static const char __pyx_k_IF_RANGE[] = "IF_RANGE"; +static const char __pyx_k_LOCATION[] = "LOCATION"; +static const char __pyx_k_buf_data[] = "buf_data"; +static const char __pyx_k_feed_eof[] = "feed_eof"; +static const char __pyx_k_fragment[] = "fragment"; +static const char __pyx_k_getstate[] = "__getstate__"; +static const char __pyx_k_password[] = "password"; +static const char __pyx_k_protocol[] = "protocol"; +static const char __pyx_k_pyx_type[] = "__pyx_type"; +static const char __pyx_k_setstate[] = "__setstate__"; +static const char __pyx_k_FORWARDED[] = "FORWARDED"; +static const char __pyx_k_TypeError[] = "TypeError"; +static const char __pyx_k_WEBSOCKET[] = "WEBSOCKET"; +static const char __pyx_k_feed_data[] = "feed_data"; +static const char __pyx_k_multidict[] = "multidict"; +static const char __pyx_k_parse_url[] = "parse_url"; +static const char __pyx_k_partition[] = "partition"; +static const char __pyx_k_pyx_state[] = "__pyx_state"; +static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; +static const char __pyx_k_CONNECTION[] = "CONNECTION"; +static const char __pyx_k_KEEP_ALIVE[] = "KEEP_ALIVE"; +static const char __pyx_k_SET_COOKIE[] = "SET_COOKIE"; +static const char __pyx_k_USER_AGENT[] = "USER_AGENT"; +static const char __pyx_k_pyx_result[] = "__pyx_result"; +static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; +static const char __pyx_k_CIMultiDict[] = "CIMultiDict"; +static const char __pyx_k_CONTENT_MD5[] = "CONTENT_MD5"; +static const char __pyx_k_DESTINATION[] = "DESTINATION"; +static const char __pyx_k_HttpVersion[] = "HttpVersion"; +static const char __pyx_k_LineTooLong[] = "LineTooLong"; +static const char __pyx_k_MemoryError[] = "MemoryError"; +static const char __pyx_k_PickleError[] = "PickleError"; +static const char __pyx_k_RETRY_AFTER[] = "RETRY_AFTER"; +static const char __pyx_k_WANT_DIGEST[] = "WANT_DIGEST"; +static const char __pyx_k_compression[] = "compression"; +static const char __pyx_k_http_parser[] = "http_parser"; +static const char __pyx_k_http_writer[] = "http_writer"; +static const char __pyx_k_max_headers[] = "max_headers"; +static const char __pyx_k_raw_headers[] = "raw_headers"; +static const char __pyx_k_CONTENT_TYPE[] = "CONTENT_TYPE"; +static const char __pyx_k_MAX_FORWARDS[] = "MAX_FORWARDS"; +static const char __pyx_k_StreamReader[] = "StreamReader"; +static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; +static const char __pyx_k_should_close[] = "should_close"; +static const char __pyx_k_stringsource[] = "stringsource"; +static const char __pyx_k_ACCEPT_RANGES[] = "ACCEPT_RANGES"; +static const char __pyx_k_AUTHORIZATION[] = "AUTHORIZATION"; +static const char __pyx_k_BadStatusLine[] = "BadStatusLine"; +static const char __pyx_k_BaseException[] = "BaseException"; +static const char __pyx_k_CACHE_CONTROL[] = "CACHE_CONTROL"; +static const char __pyx_k_CIMultiDict_2[] = "_CIMultiDict"; +static const char __pyx_k_CONTENT_RANGE[] = "CONTENT_RANGE"; +static const char __pyx_k_DeflateBuffer[] = "DeflateBuffer"; +static const char __pyx_k_EMPTY_PAYLOAD[] = "EMPTY_PAYLOAD"; +static const char __pyx_k_HttpVersion10[] = "HttpVersion10"; +static const char __pyx_k_HttpVersion11[] = "HttpVersion11"; +static const char __pyx_k_HttpVersion_2[] = "_HttpVersion"; +static const char __pyx_k_IF_NONE_MATCH[] = "IF_NONE_MATCH"; +static const char __pyx_k_InvalidHeader[] = "InvalidHeader"; +static const char __pyx_k_LAST_EVENT_ID[] = "LAST_EVENT_ID"; +static const char __pyx_k_LAST_MODIFIED[] = "LAST_MODIFIED"; +static const char __pyx_k_invalid_url_r[] = "invalid url {!r}"; +static const char __pyx_k_max_line_size[] = "max_line_size"; +static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; +static const char __pyx_k_set_exception[] = "set_exception"; +static const char __pyx_k_ACCEPT_CHARSET[] = "ACCEPT_CHARSET"; +static const char __pyx_k_BadHttpMessage[] = "BadHttpMessage"; +static const char __pyx_k_CONTENT_LENGTH[] = "CONTENT_LENGTH"; +static const char __pyx_k_StreamReader_2[] = "_StreamReader"; +static const char __pyx_k_max_field_size[] = "max_field_size"; +static const char __pyx_k_read_until_eof[] = "read_until_eof"; +static const char __pyx_k_ACCEPT_ENCODING[] = "ACCEPT_ENCODING"; +static const char __pyx_k_ACCEPT_LANGUAGE[] = "ACCEPT_LANGUAGE"; +static const char __pyx_k_DeflateBuffer_2[] = "_DeflateBuffer"; +static const char __pyx_k_EMPTY_PAYLOAD_2[] = "_EMPTY_PAYLOAD"; +static const char __pyx_k_HttpVersion10_2[] = "_HttpVersion10"; +static const char __pyx_k_HttpVersion11_2[] = "_HttpVersion11"; +static const char __pyx_k_InvalidURLError[] = "InvalidURLError"; +static const char __pyx_k_X_FORWARDED_FOR[] = "X_FORWARDED_FOR"; +static const char __pyx_k_auto_decompress[] = "auto_decompress"; +static const char __pyx_k_http_exceptions[] = "http_exceptions"; +static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; +static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; +static const char __pyx_k_CIMultiDictProxy[] = "CIMultiDictProxy"; +static const char __pyx_k_CONTENT_ENCODING[] = "CONTENT_ENCODING"; +static const char __pyx_k_CONTENT_LANGUAGE[] = "CONTENT_LANGUAGE"; +static const char __pyx_k_CONTENT_LOCATION[] = "CONTENT_LOCATION"; +static const char __pyx_k_WWW_AUTHENTICATE[] = "WWW_AUTHENTICATE"; +static const char __pyx_k_X_FORWARDED_HOST[] = "X_FORWARDED_HOST"; +static const char __pyx_k_HttpRequestParser[] = "HttpRequestParser"; +static const char __pyx_k_IF_MODIFIED_SINCE[] = "IF_MODIFIED_SINCE"; +static const char __pyx_k_RawRequestMessage[] = "_http_method[i] + */ + +static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_http_method_str(int __pyx_v_i) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + __Pyx_RefNannySetupContext("http_method_str", 0); + + /* "aiohttp/_http_parser.pyx":76 + * + * cdef inline str http_method_str(int i): + * if i < METHODS_COUNT: # <<<<<<<<<<<<<< + * return _http_method[i] + * else: + */ + __pyx_t_1 = ((__pyx_v_i < 34) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_parser.pyx":77 + * cdef inline str http_method_str(int i): + * if i < METHODS_COUNT: + * return _http_method[i] # <<<<<<<<<<<<<< + * else: + * return "" + */ + __Pyx_XDECREF(__pyx_r); + if (unlikely(__pyx_v_7aiohttp_12_http_parser__http_method == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 77, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_7aiohttp_12_http_parser__http_method, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(((PyObject*)__pyx_t_2)); + __pyx_r = ((PyObject*)__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":76 + * + * cdef inline str http_method_str(int i): + * if i < METHODS_COUNT: # <<<<<<<<<<<<<< + * return _http_method[i] + * else: + */ + } + + /* "aiohttp/_http_parser.pyx":79 + * return _http_method[i] + * else: + * return "" # <<<<<<<<<<<<<< + * + * cdef inline object find_header(bytes raw_header): + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_kp_u_unknown); + __pyx_r = __pyx_kp_u_unknown; + goto __pyx_L0; + } + + /* "aiohttp/_http_parser.pyx":75 + * + * + * cdef inline str http_method_str(int i): # <<<<<<<<<<<<<< + * if i < METHODS_COUNT: + * return _http_method[i] + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("aiohttp._http_parser.http_method_str", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":81 + * return "" + * + * cdef inline object find_header(bytes raw_header): # <<<<<<<<<<<<<< + * cdef Py_ssize_t size + * cdef char *buf + */ + +static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_find_header(PyObject *__pyx_v_raw_header) { + Py_ssize_t __pyx_v_size; + char *__pyx_v_buf; + int __pyx_v_idx; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + __Pyx_RefNannySetupContext("find_header", 0); + + /* "aiohttp/_http_parser.pyx":85 + * cdef char *buf + * cdef int idx + * PyBytes_AsStringAndSize(raw_header, &buf, &size) # <<<<<<<<<<<<<< + * idx = _find_header.find_header(buf, size) + * if idx == -1: + */ + __pyx_t_1 = PyBytes_AsStringAndSize(__pyx_v_raw_header, (&__pyx_v_buf), (&__pyx_v_size)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 85, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":86 + * cdef int idx + * PyBytes_AsStringAndSize(raw_header, &buf, &size) + * idx = _find_header.find_header(buf, size) # <<<<<<<<<<<<<< + * if idx == -1: + * return raw_header.decode('utf-8', 'surrogateescape') + */ + __pyx_v_idx = find_header(__pyx_v_buf, __pyx_v_size); + + /* "aiohttp/_http_parser.pyx":87 + * PyBytes_AsStringAndSize(raw_header, &buf, &size) + * idx = _find_header.find_header(buf, size) + * if idx == -1: # <<<<<<<<<<<<<< + * return raw_header.decode('utf-8', 'surrogateescape') + * return headers[idx] + */ + __pyx_t_2 = ((__pyx_v_idx == -1L) != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_parser.pyx":88 + * idx = _find_header.find_header(buf, size) + * if idx == -1: + * return raw_header.decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< + * return headers[idx] + * + */ + __Pyx_XDECREF(__pyx_r); + if (unlikely(__pyx_v_raw_header == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); + __PYX_ERR(0, 88, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_decode_bytes(__pyx_v_raw_header, 0, PY_SSIZE_T_MAX, NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 88, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":87 + * PyBytes_AsStringAndSize(raw_header, &buf, &size) + * idx = _find_header.find_header(buf, size) + * if idx == -1: # <<<<<<<<<<<<<< + * return raw_header.decode('utf-8', 'surrogateescape') + * return headers[idx] + */ + } + + /* "aiohttp/_http_parser.pyx":89 + * if idx == -1: + * return raw_header.decode('utf-8', 'surrogateescape') + * return headers[idx] # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + if (unlikely(__pyx_v_7aiohttp_12_http_parser_headers == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 89, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_7aiohttp_12_http_parser_headers, __pyx_v_idx, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 89, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":81 + * return "" + * + * cdef inline object find_header(bytes raw_header): # <<<<<<<<<<<<<< + * cdef Py_ssize_t size + * cdef char *buf + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._http_parser.find_header", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":105 + * cdef readonly object url # yarl.URL + * + * def __init__(self, method, path, version, headers, raw_headers, # <<<<<<<<<<<<<< + * should_close, compression, upgrade, chunked, url): + * self.method = method + */ + +/* Python wrapper */ +static int __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_method = 0; + PyObject *__pyx_v_path = 0; + PyObject *__pyx_v_version = 0; + PyObject *__pyx_v_headers = 0; + PyObject *__pyx_v_raw_headers = 0; + PyObject *__pyx_v_should_close = 0; + PyObject *__pyx_v_compression = 0; + PyObject *__pyx_v_upgrade = 0; + PyObject *__pyx_v_chunked = 0; + PyObject *__pyx_v_url = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method,&__pyx_n_s_path,&__pyx_n_s_version,&__pyx_n_s_headers,&__pyx_n_s_raw_headers,&__pyx_n_s_should_close,&__pyx_n_s_compression,&__pyx_n_s_upgrade,&__pyx_n_s_chunked,&__pyx_n_s_url,0}; + PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 1); __PYX_ERR(0, 105, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_version)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 2); __PYX_ERR(0, 105, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_headers)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 3); __PYX_ERR(0, 105, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_raw_headers)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 4); __PYX_ERR(0, 105, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_should_close)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 5); __PYX_ERR(0, 105, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_compression)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 6); __PYX_ERR(0, 105, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_upgrade)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 7); __PYX_ERR(0, 105, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_chunked)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 8); __PYX_ERR(0, 105, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_url)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 9); __PYX_ERR(0, 105, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 105, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 10) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + } + __pyx_v_method = values[0]; + __pyx_v_path = values[1]; + __pyx_v_version = values[2]; + __pyx_v_headers = values[3]; + __pyx_v_raw_headers = values[4]; + __pyx_v_should_close = values[5]; + __pyx_v_compression = values[6]; + __pyx_v_upgrade = values[7]; + __pyx_v_chunked = values[8]; + __pyx_v_url = values[9]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 105, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._http_parser.RawRequestMessage.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage___init__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self), __pyx_v_method, __pyx_v_path, __pyx_v_version, __pyx_v_headers, __pyx_v_raw_headers, __pyx_v_should_close, __pyx_v_compression, __pyx_v_upgrade, __pyx_v_chunked, __pyx_v_url); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage___init__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self, PyObject *__pyx_v_method, PyObject *__pyx_v_path, PyObject *__pyx_v_version, PyObject *__pyx_v_headers, PyObject *__pyx_v_raw_headers, PyObject *__pyx_v_should_close, PyObject *__pyx_v_compression, PyObject *__pyx_v_upgrade, PyObject *__pyx_v_chunked, PyObject *__pyx_v_url) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "aiohttp/_http_parser.pyx":107 + * def __init__(self, method, path, version, headers, raw_headers, + * should_close, compression, upgrade, chunked, url): + * self.method = method # <<<<<<<<<<<<<< + * self.path = path + * self.version = version + */ + if (!(likely(PyUnicode_CheckExact(__pyx_v_method))||((__pyx_v_method) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_method)->tp_name), 0))) __PYX_ERR(0, 107, __pyx_L1_error) + __pyx_t_1 = __pyx_v_method; + __Pyx_INCREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_self->method); + __Pyx_DECREF(__pyx_v_self->method); + __pyx_v_self->method = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":108 + * should_close, compression, upgrade, chunked, url): + * self.method = method + * self.path = path # <<<<<<<<<<<<<< + * self.version = version + * self.headers = headers + */ + if (!(likely(PyUnicode_CheckExact(__pyx_v_path))||((__pyx_v_path) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_path)->tp_name), 0))) __PYX_ERR(0, 108, __pyx_L1_error) + __pyx_t_1 = __pyx_v_path; + __Pyx_INCREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_self->path); + __Pyx_DECREF(__pyx_v_self->path); + __pyx_v_self->path = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":109 + * self.method = method + * self.path = path + * self.version = version # <<<<<<<<<<<<<< + * self.headers = headers + * self.raw_headers = raw_headers + */ + __Pyx_INCREF(__pyx_v_version); + __Pyx_GIVEREF(__pyx_v_version); + __Pyx_GOTREF(__pyx_v_self->version); + __Pyx_DECREF(__pyx_v_self->version); + __pyx_v_self->version = __pyx_v_version; + + /* "aiohttp/_http_parser.pyx":110 + * self.path = path + * self.version = version + * self.headers = headers # <<<<<<<<<<<<<< + * self.raw_headers = raw_headers + * self.should_close = should_close + */ + __Pyx_INCREF(__pyx_v_headers); + __Pyx_GIVEREF(__pyx_v_headers); + __Pyx_GOTREF(__pyx_v_self->headers); + __Pyx_DECREF(__pyx_v_self->headers); + __pyx_v_self->headers = __pyx_v_headers; + + /* "aiohttp/_http_parser.pyx":111 + * self.version = version + * self.headers = headers + * self.raw_headers = raw_headers # <<<<<<<<<<<<<< + * self.should_close = should_close + * self.compression = compression + */ + __Pyx_INCREF(__pyx_v_raw_headers); + __Pyx_GIVEREF(__pyx_v_raw_headers); + __Pyx_GOTREF(__pyx_v_self->raw_headers); + __Pyx_DECREF(__pyx_v_self->raw_headers); + __pyx_v_self->raw_headers = __pyx_v_raw_headers; + + /* "aiohttp/_http_parser.pyx":112 + * self.headers = headers + * self.raw_headers = raw_headers + * self.should_close = should_close # <<<<<<<<<<<<<< + * self.compression = compression + * self.upgrade = upgrade + */ + __Pyx_INCREF(__pyx_v_should_close); + __Pyx_GIVEREF(__pyx_v_should_close); + __Pyx_GOTREF(__pyx_v_self->should_close); + __Pyx_DECREF(__pyx_v_self->should_close); + __pyx_v_self->should_close = __pyx_v_should_close; + + /* "aiohttp/_http_parser.pyx":113 + * self.raw_headers = raw_headers + * self.should_close = should_close + * self.compression = compression # <<<<<<<<<<<<<< + * self.upgrade = upgrade + * self.chunked = chunked + */ + __Pyx_INCREF(__pyx_v_compression); + __Pyx_GIVEREF(__pyx_v_compression); + __Pyx_GOTREF(__pyx_v_self->compression); + __Pyx_DECREF(__pyx_v_self->compression); + __pyx_v_self->compression = __pyx_v_compression; + + /* "aiohttp/_http_parser.pyx":114 + * self.should_close = should_close + * self.compression = compression + * self.upgrade = upgrade # <<<<<<<<<<<<<< + * self.chunked = chunked + * self.url = url + */ + __Pyx_INCREF(__pyx_v_upgrade); + __Pyx_GIVEREF(__pyx_v_upgrade); + __Pyx_GOTREF(__pyx_v_self->upgrade); + __Pyx_DECREF(__pyx_v_self->upgrade); + __pyx_v_self->upgrade = __pyx_v_upgrade; + + /* "aiohttp/_http_parser.pyx":115 + * self.compression = compression + * self.upgrade = upgrade + * self.chunked = chunked # <<<<<<<<<<<<<< + * self.url = url + * + */ + __Pyx_INCREF(__pyx_v_chunked); + __Pyx_GIVEREF(__pyx_v_chunked); + __Pyx_GOTREF(__pyx_v_self->chunked); + __Pyx_DECREF(__pyx_v_self->chunked); + __pyx_v_self->chunked = __pyx_v_chunked; + + /* "aiohttp/_http_parser.pyx":116 + * self.upgrade = upgrade + * self.chunked = chunked + * self.url = url # <<<<<<<<<<<<<< + * + * def __repr__(self): + */ + __Pyx_INCREF(__pyx_v_url); + __Pyx_GIVEREF(__pyx_v_url); + __Pyx_GOTREF(__pyx_v_self->url); + __Pyx_DECREF(__pyx_v_self->url); + __pyx_v_self->url = __pyx_v_url; + + /* "aiohttp/_http_parser.pyx":105 + * cdef readonly object url # yarl.URL + * + * def __init__(self, method, path, version, headers, raw_headers, # <<<<<<<<<<<<<< + * should_close, compression, upgrade, chunked, url): + * self.method = method + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser.RawRequestMessage.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":118 + * self.url = url + * + * def __repr__(self): # <<<<<<<<<<<<<< + * info = [] + * info.append(("method", self.method)) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_3__repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_3__repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_2__repr__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_7aiohttp_12_http_parser_17RawRequestMessage_8__repr___2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "aiohttp/_http_parser.pyx":130 + * info.append(("chunked", self.chunked)) + * info.append(("url", self.url)) + * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) # <<<<<<<<<<<<<< + * return '' + * + */ + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_8__repr___genexpr(PyObject *__pyx_self) { + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("genexpr", 0); + __pyx_cur_scope = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *)__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr(__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 130, __pyx_L1_error) + } else { + __Pyx_GOTREF(__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *) __pyx_self; + __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope)); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope); + { + __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7aiohttp_12_http_parser_17RawRequestMessage_8__repr___2generator, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_repr___locals_genexpr, __pyx_n_s_aiohttp__http_parser); if (unlikely(!gen)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("aiohttp._http_parser.RawRequestMessage.__repr__.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_7aiohttp_12_http_parser_17RawRequestMessage_8__repr___2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *__pyx_cur_scope = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *(*__pyx_t_7)(PyObject *); + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("genexpr", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 130, __pyx_L1_error) + __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_r); + if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_info)) { __Pyx_RaiseClosureNameError("info"); __PYX_ERR(0, 130, __pyx_L1_error) } + if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_info == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 130, __pyx_L1_error) + } + __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_info; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; + for (;;) { + if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 130, __pyx_L1_error) + #else + __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { + PyObject* sequence = __pyx_t_3; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 130, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_5 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + #else + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; + index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_5); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 130, __pyx_L1_error) + __pyx_t_7 = NULL; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L7_unpacking_done; + __pyx_L6_unpacking_failed:; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_7 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 130, __pyx_L1_error) + __pyx_L7_unpacking_done:; + } + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_val); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_val, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_3 = PyNumber_Add(__pyx_cur_scope->__pyx_v_name, __pyx_kp_u_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_Repr(__pyx_cur_scope->__pyx_v_val); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":118 + * self.url = url + * + * def __repr__(self): # <<<<<<<<<<<<<< + * info = [] + * info.append(("method", self.method)) + */ + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_2__repr__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *__pyx_cur_scope; + PyObject *__pyx_v_sinfo = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + __Pyx_RefNannySetupContext("__repr__", 0); + __pyx_cur_scope = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *)__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct____repr__(__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct____repr__, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 118, __pyx_L1_error) + } else { + __Pyx_GOTREF(__pyx_cur_scope); + } + + /* "aiohttp/_http_parser.pyx":119 + * + * def __repr__(self): + * info = [] # <<<<<<<<<<<<<< + * info.append(("method", self.method)) + * info.append(("path", self.path)) + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 119, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_info = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":120 + * def __repr__(self): + * info = [] + * info.append(("method", self.method)) # <<<<<<<<<<<<<< + * info.append(("path", self.path)) + * info.append(("version", self.version)) + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_u_method); + __Pyx_GIVEREF(__pyx_n_u_method); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_method); + __Pyx_INCREF(__pyx_v_self->method); + __Pyx_GIVEREF(__pyx_v_self->method); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->method); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 120, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":121 + * info = [] + * info.append(("method", self.method)) + * info.append(("path", self.path)) # <<<<<<<<<<<<<< + * info.append(("version", self.version)) + * info.append(("headers", self.headers)) + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 121, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_u_path); + __Pyx_GIVEREF(__pyx_n_u_path); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_path); + __Pyx_INCREF(__pyx_v_self->path); + __Pyx_GIVEREF(__pyx_v_self->path); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->path); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 121, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":122 + * info.append(("method", self.method)) + * info.append(("path", self.path)) + * info.append(("version", self.version)) # <<<<<<<<<<<<<< + * info.append(("headers", self.headers)) + * info.append(("raw_headers", self.raw_headers)) + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_u_version); + __Pyx_GIVEREF(__pyx_n_u_version); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_version); + __Pyx_INCREF(__pyx_v_self->version); + __Pyx_GIVEREF(__pyx_v_self->version); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->version); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":123 + * info.append(("path", self.path)) + * info.append(("version", self.version)) + * info.append(("headers", self.headers)) # <<<<<<<<<<<<<< + * info.append(("raw_headers", self.raw_headers)) + * info.append(("should_close", self.should_close)) + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_u_headers); + __Pyx_GIVEREF(__pyx_n_u_headers); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_headers); + __Pyx_INCREF(__pyx_v_self->headers); + __Pyx_GIVEREF(__pyx_v_self->headers); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->headers); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":124 + * info.append(("version", self.version)) + * info.append(("headers", self.headers)) + * info.append(("raw_headers", self.raw_headers)) # <<<<<<<<<<<<<< + * info.append(("should_close", self.should_close)) + * info.append(("compression", self.compression)) + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_u_raw_headers); + __Pyx_GIVEREF(__pyx_n_u_raw_headers); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_raw_headers); + __Pyx_INCREF(__pyx_v_self->raw_headers); + __Pyx_GIVEREF(__pyx_v_self->raw_headers); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->raw_headers); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":125 + * info.append(("headers", self.headers)) + * info.append(("raw_headers", self.raw_headers)) + * info.append(("should_close", self.should_close)) # <<<<<<<<<<<<<< + * info.append(("compression", self.compression)) + * info.append(("upgrade", self.upgrade)) + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 125, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_u_should_close); + __Pyx_GIVEREF(__pyx_n_u_should_close); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_should_close); + __Pyx_INCREF(__pyx_v_self->should_close); + __Pyx_GIVEREF(__pyx_v_self->should_close); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->should_close); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 125, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":126 + * info.append(("raw_headers", self.raw_headers)) + * info.append(("should_close", self.should_close)) + * info.append(("compression", self.compression)) # <<<<<<<<<<<<<< + * info.append(("upgrade", self.upgrade)) + * info.append(("chunked", self.chunked)) + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_u_compression); + __Pyx_GIVEREF(__pyx_n_u_compression); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_compression); + __Pyx_INCREF(__pyx_v_self->compression); + __Pyx_GIVEREF(__pyx_v_self->compression); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->compression); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 126, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":127 + * info.append(("should_close", self.should_close)) + * info.append(("compression", self.compression)) + * info.append(("upgrade", self.upgrade)) # <<<<<<<<<<<<<< + * info.append(("chunked", self.chunked)) + * info.append(("url", self.url)) + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_u_upgrade); + __Pyx_GIVEREF(__pyx_n_u_upgrade); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_upgrade); + __Pyx_INCREF(__pyx_v_self->upgrade); + __Pyx_GIVEREF(__pyx_v_self->upgrade); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->upgrade); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":128 + * info.append(("compression", self.compression)) + * info.append(("upgrade", self.upgrade)) + * info.append(("chunked", self.chunked)) # <<<<<<<<<<<<<< + * info.append(("url", self.url)) + * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 128, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_u_chunked); + __Pyx_GIVEREF(__pyx_n_u_chunked); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_chunked); + __Pyx_INCREF(__pyx_v_self->chunked); + __Pyx_GIVEREF(__pyx_v_self->chunked); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->chunked); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 128, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":129 + * info.append(("upgrade", self.upgrade)) + * info.append(("chunked", self.chunked)) + * info.append(("url", self.url)) # <<<<<<<<<<<<<< + * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) + * return '' + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_u_url); + __Pyx_GIVEREF(__pyx_n_u_url); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_url); + __Pyx_INCREF(__pyx_v_self->url); + __Pyx_GIVEREF(__pyx_v_self->url); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->url); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":130 + * info.append(("chunked", self.chunked)) + * info.append(("url", self.url)) + * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) # <<<<<<<<<<<<<< + * return '' + * + */ + __pyx_t_1 = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_8__repr___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_Generator_Next(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyUnicode_Join(__pyx_kp_u__2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_sinfo = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":131 + * info.append(("url", self.url)) + * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) + * return '' # <<<<<<<<<<<<<< + * + * def _replace(self, **dct): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyUnicode_ConcatSafe(__pyx_kp_u_RawRequestMessage, __pyx_v_sinfo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_t_1, __pyx_kp_u__3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":118 + * self.url = url + * + * def __repr__(self): # <<<<<<<<<<<<<< + * info = [] + * info.append(("method", self.method)) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._http_parser.RawRequestMessage.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_sinfo); + __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":133 + * return '' + * + * def _replace(self, **dct): # <<<<<<<<<<<<<< + * cdef RawRequestMessage ret + * ret = _new_request_message(self.method, + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_5_replace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_5_replace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_dct = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_replace (wrapper)", 0); + if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { + __Pyx_RaiseArgtupleInvalid("_replace", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;} + if (__pyx_kwds && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "_replace", 1))) return NULL; + __pyx_v_dct = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); if (unlikely(!__pyx_v_dct)) return NULL; + __Pyx_GOTREF(__pyx_v_dct); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_4_replace(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self), __pyx_v_dct); + + /* function exit code */ + __Pyx_XDECREF(__pyx_v_dct); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_4_replace(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self, PyObject *__pyx_v_dct) { + struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_ret = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + __Pyx_RefNannySetupContext("_replace", 0); + + /* "aiohttp/_http_parser.pyx":135 + * def _replace(self, **dct): + * cdef RawRequestMessage ret + * ret = _new_request_message(self.method, # <<<<<<<<<<<<<< + * self.path, + * self.version, + */ + __pyx_t_1 = __pyx_v_self->method; + __Pyx_INCREF(__pyx_t_1); + + /* "aiohttp/_http_parser.pyx":136 + * cdef RawRequestMessage ret + * ret = _new_request_message(self.method, + * self.path, # <<<<<<<<<<<<<< + * self.version, + * self.headers, + */ + __pyx_t_2 = __pyx_v_self->path; + __Pyx_INCREF(__pyx_t_2); + + /* "aiohttp/_http_parser.pyx":137 + * ret = _new_request_message(self.method, + * self.path, + * self.version, # <<<<<<<<<<<<<< + * self.headers, + * self.raw_headers, + */ + __pyx_t_3 = __pyx_v_self->version; + __Pyx_INCREF(__pyx_t_3); + + /* "aiohttp/_http_parser.pyx":138 + * self.path, + * self.version, + * self.headers, # <<<<<<<<<<<<<< + * self.raw_headers, + * self.should_close, + */ + __pyx_t_4 = __pyx_v_self->headers; + __Pyx_INCREF(__pyx_t_4); + + /* "aiohttp/_http_parser.pyx":139 + * self.version, + * self.headers, + * self.raw_headers, # <<<<<<<<<<<<<< + * self.should_close, + * self.compression, + */ + __pyx_t_5 = __pyx_v_self->raw_headers; + __Pyx_INCREF(__pyx_t_5); + + /* "aiohttp/_http_parser.pyx":140 + * self.headers, + * self.raw_headers, + * self.should_close, # <<<<<<<<<<<<<< + * self.compression, + * self.upgrade, + */ + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_self->should_close); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 140, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":141 + * self.raw_headers, + * self.should_close, + * self.compression, # <<<<<<<<<<<<<< + * self.upgrade, + * self.chunked, + */ + __pyx_t_7 = __pyx_v_self->compression; + __Pyx_INCREF(__pyx_t_7); + + /* "aiohttp/_http_parser.pyx":142 + * self.should_close, + * self.compression, + * self.upgrade, # <<<<<<<<<<<<<< + * self.chunked, + * self.url) + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_self->upgrade); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 142, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":143 + * self.compression, + * self.upgrade, + * self.chunked, # <<<<<<<<<<<<<< + * self.url) + * if "method" in dct: + */ + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_self->chunked); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 143, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":144 + * self.upgrade, + * self.chunked, + * self.url) # <<<<<<<<<<<<<< + * if "method" in dct: + * ret.method = dct["method"] + */ + __pyx_t_10 = __pyx_v_self->url; + __Pyx_INCREF(__pyx_t_10); + + /* "aiohttp/_http_parser.pyx":135 + * def _replace(self, **dct): + * cdef RawRequestMessage ret + * ret = _new_request_message(self.method, # <<<<<<<<<<<<<< + * self.path, + * self.version, + */ + __pyx_t_11 = __pyx_f_7aiohttp_12_http_parser__new_request_message(((PyObject*)__pyx_t_1), ((PyObject*)__pyx_t_2), __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 135, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_7aiohttp_12_http_parser_RawRequestMessage))))) __PYX_ERR(0, 135, __pyx_L1_error) + __pyx_v_ret = ((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_t_11); + __pyx_t_11 = 0; + + /* "aiohttp/_http_parser.pyx":145 + * self.chunked, + * self.url) + * if "method" in dct: # <<<<<<<<<<<<<< + * ret.method = dct["method"] + * if "path" in dct: + */ + __pyx_t_9 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_method, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 145, __pyx_L1_error) + __pyx_t_8 = (__pyx_t_9 != 0); + if (__pyx_t_8) { + + /* "aiohttp/_http_parser.pyx":146 + * self.url) + * if "method" in dct: + * ret.method = dct["method"] # <<<<<<<<<<<<<< + * if "path" in dct: + * ret.path = dct["path"] + */ + __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_method); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 146, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + if (!(likely(PyUnicode_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_11)->tp_name), 0))) __PYX_ERR(0, 146, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_11); + __Pyx_GOTREF(__pyx_v_ret->method); + __Pyx_DECREF(__pyx_v_ret->method); + __pyx_v_ret->method = ((PyObject*)__pyx_t_11); + __pyx_t_11 = 0; + + /* "aiohttp/_http_parser.pyx":145 + * self.chunked, + * self.url) + * if "method" in dct: # <<<<<<<<<<<<<< + * ret.method = dct["method"] + * if "path" in dct: + */ + } + + /* "aiohttp/_http_parser.pyx":147 + * if "method" in dct: + * ret.method = dct["method"] + * if "path" in dct: # <<<<<<<<<<<<<< + * ret.path = dct["path"] + * if "version" in dct: + */ + __pyx_t_8 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_path, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 147, __pyx_L1_error) + __pyx_t_9 = (__pyx_t_8 != 0); + if (__pyx_t_9) { + + /* "aiohttp/_http_parser.pyx":148 + * ret.method = dct["method"] + * if "path" in dct: + * ret.path = dct["path"] # <<<<<<<<<<<<<< + * if "version" in dct: + * ret.version = dct["version"] + */ + __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_path); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + if (!(likely(PyUnicode_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_11)->tp_name), 0))) __PYX_ERR(0, 148, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_11); + __Pyx_GOTREF(__pyx_v_ret->path); + __Pyx_DECREF(__pyx_v_ret->path); + __pyx_v_ret->path = ((PyObject*)__pyx_t_11); + __pyx_t_11 = 0; + + /* "aiohttp/_http_parser.pyx":147 + * if "method" in dct: + * ret.method = dct["method"] + * if "path" in dct: # <<<<<<<<<<<<<< + * ret.path = dct["path"] + * if "version" in dct: + */ + } + + /* "aiohttp/_http_parser.pyx":149 + * if "path" in dct: + * ret.path = dct["path"] + * if "version" in dct: # <<<<<<<<<<<<<< + * ret.version = dct["version"] + * if "headers" in dct: + */ + __pyx_t_9 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_version, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 149, __pyx_L1_error) + __pyx_t_8 = (__pyx_t_9 != 0); + if (__pyx_t_8) { + + /* "aiohttp/_http_parser.pyx":150 + * ret.path = dct["path"] + * if "version" in dct: + * ret.version = dct["version"] # <<<<<<<<<<<<<< + * if "headers" in dct: + * ret.headers = dct["headers"] + */ + __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_version); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_11); + __Pyx_GOTREF(__pyx_v_ret->version); + __Pyx_DECREF(__pyx_v_ret->version); + __pyx_v_ret->version = __pyx_t_11; + __pyx_t_11 = 0; + + /* "aiohttp/_http_parser.pyx":149 + * if "path" in dct: + * ret.path = dct["path"] + * if "version" in dct: # <<<<<<<<<<<<<< + * ret.version = dct["version"] + * if "headers" in dct: + */ + } + + /* "aiohttp/_http_parser.pyx":151 + * if "version" in dct: + * ret.version = dct["version"] + * if "headers" in dct: # <<<<<<<<<<<<<< + * ret.headers = dct["headers"] + * if "raw_headers" in dct: + */ + __pyx_t_8 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_headers, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 151, __pyx_L1_error) + __pyx_t_9 = (__pyx_t_8 != 0); + if (__pyx_t_9) { + + /* "aiohttp/_http_parser.pyx":152 + * ret.version = dct["version"] + * if "headers" in dct: + * ret.headers = dct["headers"] # <<<<<<<<<<<<<< + * if "raw_headers" in dct: + * ret.raw_headers = dct["raw_headers"] + */ + __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_headers); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 152, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_11); + __Pyx_GOTREF(__pyx_v_ret->headers); + __Pyx_DECREF(__pyx_v_ret->headers); + __pyx_v_ret->headers = __pyx_t_11; + __pyx_t_11 = 0; + + /* "aiohttp/_http_parser.pyx":151 + * if "version" in dct: + * ret.version = dct["version"] + * if "headers" in dct: # <<<<<<<<<<<<<< + * ret.headers = dct["headers"] + * if "raw_headers" in dct: + */ + } + + /* "aiohttp/_http_parser.pyx":153 + * if "headers" in dct: + * ret.headers = dct["headers"] + * if "raw_headers" in dct: # <<<<<<<<<<<<<< + * ret.raw_headers = dct["raw_headers"] + * if "should_close" in dct: + */ + __pyx_t_9 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_raw_headers, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 153, __pyx_L1_error) + __pyx_t_8 = (__pyx_t_9 != 0); + if (__pyx_t_8) { + + /* "aiohttp/_http_parser.pyx":154 + * ret.headers = dct["headers"] + * if "raw_headers" in dct: + * ret.raw_headers = dct["raw_headers"] # <<<<<<<<<<<<<< + * if "should_close" in dct: + * ret.should_close = dct["should_close"] + */ + __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_raw_headers); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 154, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_11); + __Pyx_GOTREF(__pyx_v_ret->raw_headers); + __Pyx_DECREF(__pyx_v_ret->raw_headers); + __pyx_v_ret->raw_headers = __pyx_t_11; + __pyx_t_11 = 0; + + /* "aiohttp/_http_parser.pyx":153 + * if "headers" in dct: + * ret.headers = dct["headers"] + * if "raw_headers" in dct: # <<<<<<<<<<<<<< + * ret.raw_headers = dct["raw_headers"] + * if "should_close" in dct: + */ + } + + /* "aiohttp/_http_parser.pyx":155 + * if "raw_headers" in dct: + * ret.raw_headers = dct["raw_headers"] + * if "should_close" in dct: # <<<<<<<<<<<<<< + * ret.should_close = dct["should_close"] + * if "compression" in dct: + */ + __pyx_t_8 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_should_close, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 155, __pyx_L1_error) + __pyx_t_9 = (__pyx_t_8 != 0); + if (__pyx_t_9) { + + /* "aiohttp/_http_parser.pyx":156 + * ret.raw_headers = dct["raw_headers"] + * if "should_close" in dct: + * ret.should_close = dct["should_close"] # <<<<<<<<<<<<<< + * if "compression" in dct: + * ret.compression = dct["compression"] + */ + __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_should_close); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 156, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_11); + __Pyx_GOTREF(__pyx_v_ret->should_close); + __Pyx_DECREF(__pyx_v_ret->should_close); + __pyx_v_ret->should_close = __pyx_t_11; + __pyx_t_11 = 0; + + /* "aiohttp/_http_parser.pyx":155 + * if "raw_headers" in dct: + * ret.raw_headers = dct["raw_headers"] + * if "should_close" in dct: # <<<<<<<<<<<<<< + * ret.should_close = dct["should_close"] + * if "compression" in dct: + */ + } + + /* "aiohttp/_http_parser.pyx":157 + * if "should_close" in dct: + * ret.should_close = dct["should_close"] + * if "compression" in dct: # <<<<<<<<<<<<<< + * ret.compression = dct["compression"] + * if "upgrade" in dct: + */ + __pyx_t_9 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_compression, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 157, __pyx_L1_error) + __pyx_t_8 = (__pyx_t_9 != 0); + if (__pyx_t_8) { + + /* "aiohttp/_http_parser.pyx":158 + * ret.should_close = dct["should_close"] + * if "compression" in dct: + * ret.compression = dct["compression"] # <<<<<<<<<<<<<< + * if "upgrade" in dct: + * ret.upgrade = dct["upgrade"] + */ + __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_compression); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_11); + __Pyx_GOTREF(__pyx_v_ret->compression); + __Pyx_DECREF(__pyx_v_ret->compression); + __pyx_v_ret->compression = __pyx_t_11; + __pyx_t_11 = 0; + + /* "aiohttp/_http_parser.pyx":157 + * if "should_close" in dct: + * ret.should_close = dct["should_close"] + * if "compression" in dct: # <<<<<<<<<<<<<< + * ret.compression = dct["compression"] + * if "upgrade" in dct: + */ + } + + /* "aiohttp/_http_parser.pyx":159 + * if "compression" in dct: + * ret.compression = dct["compression"] + * if "upgrade" in dct: # <<<<<<<<<<<<<< + * ret.upgrade = dct["upgrade"] + * if "chunked" in dct: + */ + __pyx_t_8 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_upgrade, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 159, __pyx_L1_error) + __pyx_t_9 = (__pyx_t_8 != 0); + if (__pyx_t_9) { + + /* "aiohttp/_http_parser.pyx":160 + * ret.compression = dct["compression"] + * if "upgrade" in dct: + * ret.upgrade = dct["upgrade"] # <<<<<<<<<<<<<< + * if "chunked" in dct: + * ret.chunked = dct["chunked"] + */ + __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_upgrade); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_11); + __Pyx_GOTREF(__pyx_v_ret->upgrade); + __Pyx_DECREF(__pyx_v_ret->upgrade); + __pyx_v_ret->upgrade = __pyx_t_11; + __pyx_t_11 = 0; + + /* "aiohttp/_http_parser.pyx":159 + * if "compression" in dct: + * ret.compression = dct["compression"] + * if "upgrade" in dct: # <<<<<<<<<<<<<< + * ret.upgrade = dct["upgrade"] + * if "chunked" in dct: + */ + } + + /* "aiohttp/_http_parser.pyx":161 + * if "upgrade" in dct: + * ret.upgrade = dct["upgrade"] + * if "chunked" in dct: # <<<<<<<<<<<<<< + * ret.chunked = dct["chunked"] + * if "url" in dct: + */ + __pyx_t_9 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_chunked, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 161, __pyx_L1_error) + __pyx_t_8 = (__pyx_t_9 != 0); + if (__pyx_t_8) { + + /* "aiohttp/_http_parser.pyx":162 + * ret.upgrade = dct["upgrade"] + * if "chunked" in dct: + * ret.chunked = dct["chunked"] # <<<<<<<<<<<<<< + * if "url" in dct: + * ret.url = dct["url"] + */ + __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_chunked); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_11); + __Pyx_GOTREF(__pyx_v_ret->chunked); + __Pyx_DECREF(__pyx_v_ret->chunked); + __pyx_v_ret->chunked = __pyx_t_11; + __pyx_t_11 = 0; + + /* "aiohttp/_http_parser.pyx":161 + * if "upgrade" in dct: + * ret.upgrade = dct["upgrade"] + * if "chunked" in dct: # <<<<<<<<<<<<<< + * ret.chunked = dct["chunked"] + * if "url" in dct: + */ + } + + /* "aiohttp/_http_parser.pyx":163 + * if "chunked" in dct: + * ret.chunked = dct["chunked"] + * if "url" in dct: # <<<<<<<<<<<<<< + * ret.url = dct["url"] + * return ret + */ + __pyx_t_8 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_url, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 163, __pyx_L1_error) + __pyx_t_9 = (__pyx_t_8 != 0); + if (__pyx_t_9) { + + /* "aiohttp/_http_parser.pyx":164 + * ret.chunked = dct["chunked"] + * if "url" in dct: + * ret.url = dct["url"] # <<<<<<<<<<<<<< + * return ret + * + */ + __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_url); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_11); + __Pyx_GOTREF(__pyx_v_ret->url); + __Pyx_DECREF(__pyx_v_ret->url); + __pyx_v_ret->url = __pyx_t_11; + __pyx_t_11 = 0; + + /* "aiohttp/_http_parser.pyx":163 + * if "chunked" in dct: + * ret.chunked = dct["chunked"] + * if "url" in dct: # <<<<<<<<<<<<<< + * ret.url = dct["url"] + * return ret + */ + } + + /* "aiohttp/_http_parser.pyx":165 + * if "url" in dct: + * ret.url = dct["url"] + * return ret # <<<<<<<<<<<<<< + * + * cdef _new_request_message(str method, + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_ret)); + __pyx_r = ((PyObject *)__pyx_v_ret); + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":133 + * return '' + * + * def _replace(self, **dct): # <<<<<<<<<<<<<< + * cdef RawRequestMessage ret + * ret = _new_request_message(self.method, + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("aiohttp._http_parser.RawRequestMessage._replace", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_ret); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":94 + * @cython.freelist(DEFAULT_FREELIST_SIZE) + * cdef class RawRequestMessage: + * cdef readonly str method # <<<<<<<<<<<<<< + * cdef readonly str path + * cdef readonly object version # HttpVersion + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_6method_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_6method_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_6method___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_6method___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->method); + __pyx_r = __pyx_v_self->method; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":95 + * cdef class RawRequestMessage: + * cdef readonly str method + * cdef readonly str path # <<<<<<<<<<<<<< + * cdef readonly object version # HttpVersion + * cdef readonly object headers # CIMultiDict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_4path_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_4path_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_4path___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_4path___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->path); + __pyx_r = __pyx_v_self->path; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":96 + * cdef readonly str method + * cdef readonly str path + * cdef readonly object version # HttpVersion # <<<<<<<<<<<<<< + * cdef readonly object headers # CIMultiDict + * cdef readonly object raw_headers # tuple + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7version_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7version_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7version___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7version___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->version); + __pyx_r = __pyx_v_self->version; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":97 + * cdef readonly str path + * cdef readonly object version # HttpVersion + * cdef readonly object headers # CIMultiDict # <<<<<<<<<<<<<< + * cdef readonly object raw_headers # tuple + * cdef readonly object should_close + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7headers_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7headers_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7headers___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7headers___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->headers); + __pyx_r = __pyx_v_self->headers; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":98 + * cdef readonly object version # HttpVersion + * cdef readonly object headers # CIMultiDict + * cdef readonly object raw_headers # tuple # <<<<<<<<<<<<<< + * cdef readonly object should_close + * cdef readonly object compression + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_11raw_headers_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_11raw_headers_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_11raw_headers___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_11raw_headers___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->raw_headers); + __pyx_r = __pyx_v_self->raw_headers; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":99 + * cdef readonly object headers # CIMultiDict + * cdef readonly object raw_headers # tuple + * cdef readonly object should_close # <<<<<<<<<<<<<< + * cdef readonly object compression + * cdef readonly object upgrade + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_12should_close_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_12should_close_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_12should_close___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_12should_close___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->should_close); + __pyx_r = __pyx_v_self->should_close; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":100 + * cdef readonly object raw_headers # tuple + * cdef readonly object should_close + * cdef readonly object compression # <<<<<<<<<<<<<< + * cdef readonly object upgrade + * cdef readonly object chunked + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_11compression_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_11compression_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_11compression___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_11compression___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->compression); + __pyx_r = __pyx_v_self->compression; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":101 + * cdef readonly object should_close + * cdef readonly object compression + * cdef readonly object upgrade # <<<<<<<<<<<<<< + * cdef readonly object chunked + * cdef readonly object url # yarl.URL + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7upgrade_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7upgrade_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7upgrade___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7upgrade___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->upgrade); + __pyx_r = __pyx_v_self->upgrade; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":102 + * cdef readonly object compression + * cdef readonly object upgrade + * cdef readonly object chunked # <<<<<<<<<<<<<< + * cdef readonly object url # yarl.URL + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7chunked_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7chunked_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7chunked___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7chunked___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->chunked); + __pyx_r = __pyx_v_self->chunked; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":103 + * cdef readonly object upgrade + * cdef readonly object chunked + * cdef readonly object url # yarl.URL # <<<<<<<<<<<<<< + * + * def __init__(self, method, path, version, headers, raw_headers, + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_3url_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_3url_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_3url___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_3url___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->url); + __pyx_r = __pyx_v_self->url; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_6__reduce_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_6__reduce_cython__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v__dict = 0; + int __pyx_v_use_setstate; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.chunked, self.compression, self.headers, self.method, self.path, self.raw_headers, self.should_close, self.upgrade, self.url, self.version) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = PyTuple_New(10); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_self->chunked); + __Pyx_GIVEREF(__pyx_v_self->chunked); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->chunked); + __Pyx_INCREF(__pyx_v_self->compression); + __Pyx_GIVEREF(__pyx_v_self->compression); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->compression); + __Pyx_INCREF(__pyx_v_self->headers); + __Pyx_GIVEREF(__pyx_v_self->headers); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_self->headers); + __Pyx_INCREF(__pyx_v_self->method); + __Pyx_GIVEREF(__pyx_v_self->method); + PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_self->method); + __Pyx_INCREF(__pyx_v_self->path); + __Pyx_GIVEREF(__pyx_v_self->path); + PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_v_self->path); + __Pyx_INCREF(__pyx_v_self->raw_headers); + __Pyx_GIVEREF(__pyx_v_self->raw_headers); + PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_v_self->raw_headers); + __Pyx_INCREF(__pyx_v_self->should_close); + __Pyx_GIVEREF(__pyx_v_self->should_close); + PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_v_self->should_close); + __Pyx_INCREF(__pyx_v_self->upgrade); + __Pyx_GIVEREF(__pyx_v_self->upgrade); + PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_v_self->upgrade); + __Pyx_INCREF(__pyx_v_self->url); + __Pyx_GIVEREF(__pyx_v_self->url); + PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_v_self->url); + __Pyx_INCREF(__pyx_v_self->version); + __Pyx_GIVEREF(__pyx_v_self->version); + PyTuple_SET_ITEM(__pyx_t_1, 9, __pyx_v_self->version); + __pyx_v_state = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.chunked, self.compression, self.headers, self.method, self.path, self.raw_headers, self.should_close, self.upgrade, self.url, self.version) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v__dict = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":7 + * state = (self.chunked, self.compression, self.headers, self.method, self.path, self.raw_headers, self.should_close, self.upgrade, self.url, self.version) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_2 = (__pyx_v__dict != Py_None); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); + __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.method is not None or self.path is not None or self.raw_headers is not None or self.should_close is not None or self.upgrade is not None or self.url is not None or self.version is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.chunked, self.compression, self.headers, self.method, self.path, self.raw_headers, self.should_close, self.upgrade, self.url, self.version) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + goto __pyx_L3; + } + + /* "(tree fragment)":11 + * use_setstate = True + * else: + * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.method is not None or self.path is not None or self.raw_headers is not None or self.should_close is not None or self.upgrade is not None or self.url is not None or self.version is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, None), state + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_self->chunked != Py_None); + __pyx_t_5 = (__pyx_t_2 != 0); + if (!__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_self->compression != Py_None); + __pyx_t_2 = (__pyx_t_5 != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_self->headers != Py_None); + __pyx_t_5 = (__pyx_t_2 != 0); + if (!__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_self->method != ((PyObject*)Py_None)); + __pyx_t_2 = (__pyx_t_5 != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_self->path != ((PyObject*)Py_None)); + __pyx_t_5 = (__pyx_t_2 != 0); + if (!__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_self->raw_headers != Py_None); + __pyx_t_2 = (__pyx_t_5 != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_self->should_close != Py_None); + __pyx_t_5 = (__pyx_t_2 != 0); + if (!__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_self->upgrade != Py_None); + __pyx_t_2 = (__pyx_t_5 != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_self->url != Py_None); + __pyx_t_5 = (__pyx_t_2 != 0); + if (!__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_self->version != Py_None); + __pyx_t_2 = (__pyx_t_5 != 0); + __pyx_t_3 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + __pyx_v_use_setstate = __pyx_t_3; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.method is not None or self.path is not None or self.raw_headers is not None or self.should_close is not None or self.upgrade is not None or self.url is not None or self.version is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, None), state + * else: + */ + __pyx_t_3 = (__pyx_v_use_setstate != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":13 + * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.method is not None or self.path is not None or self.raw_headers is not None or self.should_close is not None or self.upgrade is not None or self.url is not None or self.version is not None + * if use_setstate: + * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_RawRequestMessage); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_21004882); + __Pyx_GIVEREF(__pyx_int_21004882); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_21004882); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); + __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state); + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.method is not None or self.path is not None or self.raw_headers is not None or self.should_close is not None or self.upgrade is not None or self.url is not None or self.version is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, None), state + * else: + * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_RawRequestMessage__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyx_unpickle_RawRequestMessage); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_21004882); + __Pyx_GIVEREF(__pyx_int_21004882); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_21004882); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __pyx_t_6 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("aiohttp._http_parser.RawRequestMessage.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_state); + __Pyx_XDECREF(__pyx_v__dict); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":16 + * else: + * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_RawRequestMessage__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_8__setstate_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_8__setstate_cython__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_RawRequestMessage__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawRequestMessage__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_RawRequestMessage__set_state(self, __pyx_state) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser.RawRequestMessage.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":167 + * return ret + * + * cdef _new_request_message(str method, # <<<<<<<<<<<<<< + * str path, + * object version, + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser__new_request_message(PyObject *__pyx_v_method, PyObject *__pyx_v_path, PyObject *__pyx_v_version, PyObject *__pyx_v_headers, PyObject *__pyx_v_raw_headers, int __pyx_v_should_close, PyObject *__pyx_v_compression, int __pyx_v_upgrade, int __pyx_v_chunked, PyObject *__pyx_v_url) { + struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_ret = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("_new_request_message", 0); + + /* "aiohttp/_http_parser.pyx":178 + * object url): + * cdef RawRequestMessage ret + * ret = RawRequestMessage.__new__(RawRequestMessage) # <<<<<<<<<<<<<< + * ret.method = method + * ret.path = path + */ + __pyx_t_1 = ((PyObject *)__pyx_tp_new_7aiohttp_12_http_parser_RawRequestMessage(((PyTypeObject *)__pyx_ptype_7aiohttp_12_http_parser_RawRequestMessage), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + __pyx_v_ret = ((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":179 + * cdef RawRequestMessage ret + * ret = RawRequestMessage.__new__(RawRequestMessage) + * ret.method = method # <<<<<<<<<<<<<< + * ret.path = path + * ret.version = version + */ + __Pyx_INCREF(__pyx_v_method); + __Pyx_GIVEREF(__pyx_v_method); + __Pyx_GOTREF(__pyx_v_ret->method); + __Pyx_DECREF(__pyx_v_ret->method); + __pyx_v_ret->method = __pyx_v_method; + + /* "aiohttp/_http_parser.pyx":180 + * ret = RawRequestMessage.__new__(RawRequestMessage) + * ret.method = method + * ret.path = path # <<<<<<<<<<<<<< + * ret.version = version + * ret.headers = headers + */ + __Pyx_INCREF(__pyx_v_path); + __Pyx_GIVEREF(__pyx_v_path); + __Pyx_GOTREF(__pyx_v_ret->path); + __Pyx_DECREF(__pyx_v_ret->path); + __pyx_v_ret->path = __pyx_v_path; + + /* "aiohttp/_http_parser.pyx":181 + * ret.method = method + * ret.path = path + * ret.version = version # <<<<<<<<<<<<<< + * ret.headers = headers + * ret.raw_headers = raw_headers + */ + __Pyx_INCREF(__pyx_v_version); + __Pyx_GIVEREF(__pyx_v_version); + __Pyx_GOTREF(__pyx_v_ret->version); + __Pyx_DECREF(__pyx_v_ret->version); + __pyx_v_ret->version = __pyx_v_version; + + /* "aiohttp/_http_parser.pyx":182 + * ret.path = path + * ret.version = version + * ret.headers = headers # <<<<<<<<<<<<<< + * ret.raw_headers = raw_headers + * ret.should_close = should_close + */ + __Pyx_INCREF(__pyx_v_headers); + __Pyx_GIVEREF(__pyx_v_headers); + __Pyx_GOTREF(__pyx_v_ret->headers); + __Pyx_DECREF(__pyx_v_ret->headers); + __pyx_v_ret->headers = __pyx_v_headers; + + /* "aiohttp/_http_parser.pyx":183 + * ret.version = version + * ret.headers = headers + * ret.raw_headers = raw_headers # <<<<<<<<<<<<<< + * ret.should_close = should_close + * ret.compression = compression + */ + __Pyx_INCREF(__pyx_v_raw_headers); + __Pyx_GIVEREF(__pyx_v_raw_headers); + __Pyx_GOTREF(__pyx_v_ret->raw_headers); + __Pyx_DECREF(__pyx_v_ret->raw_headers); + __pyx_v_ret->raw_headers = __pyx_v_raw_headers; + + /* "aiohttp/_http_parser.pyx":184 + * ret.headers = headers + * ret.raw_headers = raw_headers + * ret.should_close = should_close # <<<<<<<<<<<<<< + * ret.compression = compression + * ret.upgrade = upgrade + */ + __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_should_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_ret->should_close); + __Pyx_DECREF(__pyx_v_ret->should_close); + __pyx_v_ret->should_close = __pyx_t_1; + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":185 + * ret.raw_headers = raw_headers + * ret.should_close = should_close + * ret.compression = compression # <<<<<<<<<<<<<< + * ret.upgrade = upgrade + * ret.chunked = chunked + */ + __Pyx_INCREF(__pyx_v_compression); + __Pyx_GIVEREF(__pyx_v_compression); + __Pyx_GOTREF(__pyx_v_ret->compression); + __Pyx_DECREF(__pyx_v_ret->compression); + __pyx_v_ret->compression = __pyx_v_compression; + + /* "aiohttp/_http_parser.pyx":186 + * ret.should_close = should_close + * ret.compression = compression + * ret.upgrade = upgrade # <<<<<<<<<<<<<< + * ret.chunked = chunked + * ret.url = url + */ + __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_upgrade); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 186, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_ret->upgrade); + __Pyx_DECREF(__pyx_v_ret->upgrade); + __pyx_v_ret->upgrade = __pyx_t_1; + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":187 + * ret.compression = compression + * ret.upgrade = upgrade + * ret.chunked = chunked # <<<<<<<<<<<<<< + * ret.url = url + * return ret + */ + __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_chunked); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 187, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_ret->chunked); + __Pyx_DECREF(__pyx_v_ret->chunked); + __pyx_v_ret->chunked = __pyx_t_1; + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":188 + * ret.upgrade = upgrade + * ret.chunked = chunked + * ret.url = url # <<<<<<<<<<<<<< + * return ret + * + */ + __Pyx_INCREF(__pyx_v_url); + __Pyx_GIVEREF(__pyx_v_url); + __Pyx_GOTREF(__pyx_v_ret->url); + __Pyx_DECREF(__pyx_v_ret->url); + __pyx_v_ret->url = __pyx_v_url; + + /* "aiohttp/_http_parser.pyx":189 + * ret.chunked = chunked + * ret.url = url + * return ret # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_ret)); + __pyx_r = ((PyObject *)__pyx_v_ret); + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":167 + * return ret + * + * cdef _new_request_message(str method, # <<<<<<<<<<<<<< + * str path, + * object version, + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser._new_request_message", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_ret); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":204 + * cdef readonly object chunked + * + * def __init__(self, version, code, reason, headers, raw_headers, # <<<<<<<<<<<<<< + * should_close, compression, upgrade, chunked): + * self.version = version + */ + +/* Python wrapper */ +static int __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_version = 0; + PyObject *__pyx_v_code = 0; + PyObject *__pyx_v_reason = 0; + PyObject *__pyx_v_headers = 0; + PyObject *__pyx_v_raw_headers = 0; + PyObject *__pyx_v_should_close = 0; + PyObject *__pyx_v_compression = 0; + PyObject *__pyx_v_upgrade = 0; + PyObject *__pyx_v_chunked = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_version,&__pyx_n_s_code,&__pyx_n_s_reason,&__pyx_n_s_headers,&__pyx_n_s_raw_headers,&__pyx_n_s_should_close,&__pyx_n_s_compression,&__pyx_n_s_upgrade,&__pyx_n_s_chunked,0}; + PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_version)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_code)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 1); __PYX_ERR(0, 204, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reason)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 2); __PYX_ERR(0, 204, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_headers)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 3); __PYX_ERR(0, 204, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_raw_headers)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 4); __PYX_ERR(0, 204, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_should_close)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 5); __PYX_ERR(0, 204, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_compression)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 6); __PYX_ERR(0, 204, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_upgrade)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 7); __PYX_ERR(0, 204, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_chunked)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 8); __PYX_ERR(0, 204, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 204, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 9) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + } + __pyx_v_version = values[0]; + __pyx_v_code = values[1]; + __pyx_v_reason = values[2]; + __pyx_v_headers = values[3]; + __pyx_v_raw_headers = values[4]; + __pyx_v_should_close = values[5]; + __pyx_v_compression = values[6]; + __pyx_v_upgrade = values[7]; + __pyx_v_chunked = values[8]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 204, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._http_parser.RawResponseMessage.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage___init__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self), __pyx_v_version, __pyx_v_code, __pyx_v_reason, __pyx_v_headers, __pyx_v_raw_headers, __pyx_v_should_close, __pyx_v_compression, __pyx_v_upgrade, __pyx_v_chunked); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage___init__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self, PyObject *__pyx_v_version, PyObject *__pyx_v_code, PyObject *__pyx_v_reason, PyObject *__pyx_v_headers, PyObject *__pyx_v_raw_headers, PyObject *__pyx_v_should_close, PyObject *__pyx_v_compression, PyObject *__pyx_v_upgrade, PyObject *__pyx_v_chunked) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "aiohttp/_http_parser.pyx":206 + * def __init__(self, version, code, reason, headers, raw_headers, + * should_close, compression, upgrade, chunked): + * self.version = version # <<<<<<<<<<<<<< + * self.code = code + * self.reason = reason + */ + __Pyx_INCREF(__pyx_v_version); + __Pyx_GIVEREF(__pyx_v_version); + __Pyx_GOTREF(__pyx_v_self->version); + __Pyx_DECREF(__pyx_v_self->version); + __pyx_v_self->version = __pyx_v_version; + + /* "aiohttp/_http_parser.pyx":207 + * should_close, compression, upgrade, chunked): + * self.version = version + * self.code = code # <<<<<<<<<<<<<< + * self.reason = reason + * self.headers = headers + */ + __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_code); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 207, __pyx_L1_error) + __pyx_v_self->code = __pyx_t_1; + + /* "aiohttp/_http_parser.pyx":208 + * self.version = version + * self.code = code + * self.reason = reason # <<<<<<<<<<<<<< + * self.headers = headers + * self.raw_headers = raw_headers + */ + if (!(likely(PyUnicode_CheckExact(__pyx_v_reason))||((__pyx_v_reason) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_reason)->tp_name), 0))) __PYX_ERR(0, 208, __pyx_L1_error) + __pyx_t_2 = __pyx_v_reason; + __Pyx_INCREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_self->reason); + __Pyx_DECREF(__pyx_v_self->reason); + __pyx_v_self->reason = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":209 + * self.code = code + * self.reason = reason + * self.headers = headers # <<<<<<<<<<<<<< + * self.raw_headers = raw_headers + * self.should_close = should_close + */ + __Pyx_INCREF(__pyx_v_headers); + __Pyx_GIVEREF(__pyx_v_headers); + __Pyx_GOTREF(__pyx_v_self->headers); + __Pyx_DECREF(__pyx_v_self->headers); + __pyx_v_self->headers = __pyx_v_headers; + + /* "aiohttp/_http_parser.pyx":210 + * self.reason = reason + * self.headers = headers + * self.raw_headers = raw_headers # <<<<<<<<<<<<<< + * self.should_close = should_close + * self.compression = compression + */ + __Pyx_INCREF(__pyx_v_raw_headers); + __Pyx_GIVEREF(__pyx_v_raw_headers); + __Pyx_GOTREF(__pyx_v_self->raw_headers); + __Pyx_DECREF(__pyx_v_self->raw_headers); + __pyx_v_self->raw_headers = __pyx_v_raw_headers; + + /* "aiohttp/_http_parser.pyx":211 + * self.headers = headers + * self.raw_headers = raw_headers + * self.should_close = should_close # <<<<<<<<<<<<<< + * self.compression = compression + * self.upgrade = upgrade + */ + __Pyx_INCREF(__pyx_v_should_close); + __Pyx_GIVEREF(__pyx_v_should_close); + __Pyx_GOTREF(__pyx_v_self->should_close); + __Pyx_DECREF(__pyx_v_self->should_close); + __pyx_v_self->should_close = __pyx_v_should_close; + + /* "aiohttp/_http_parser.pyx":212 + * self.raw_headers = raw_headers + * self.should_close = should_close + * self.compression = compression # <<<<<<<<<<<<<< + * self.upgrade = upgrade + * self.chunked = chunked + */ + __Pyx_INCREF(__pyx_v_compression); + __Pyx_GIVEREF(__pyx_v_compression); + __Pyx_GOTREF(__pyx_v_self->compression); + __Pyx_DECREF(__pyx_v_self->compression); + __pyx_v_self->compression = __pyx_v_compression; + + /* "aiohttp/_http_parser.pyx":213 + * self.should_close = should_close + * self.compression = compression + * self.upgrade = upgrade # <<<<<<<<<<<<<< + * self.chunked = chunked + * + */ + __Pyx_INCREF(__pyx_v_upgrade); + __Pyx_GIVEREF(__pyx_v_upgrade); + __Pyx_GOTREF(__pyx_v_self->upgrade); + __Pyx_DECREF(__pyx_v_self->upgrade); + __pyx_v_self->upgrade = __pyx_v_upgrade; + + /* "aiohttp/_http_parser.pyx":214 + * self.compression = compression + * self.upgrade = upgrade + * self.chunked = chunked # <<<<<<<<<<<<<< + * + * def __repr__(self): + */ + __Pyx_INCREF(__pyx_v_chunked); + __Pyx_GIVEREF(__pyx_v_chunked); + __Pyx_GOTREF(__pyx_v_self->chunked); + __Pyx_DECREF(__pyx_v_self->chunked); + __pyx_v_self->chunked = __pyx_v_chunked; + + /* "aiohttp/_http_parser.pyx":204 + * cdef readonly object chunked + * + * def __init__(self, version, code, reason, headers, raw_headers, # <<<<<<<<<<<<<< + * should_close, compression, upgrade, chunked): + * self.version = version + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("aiohttp._http_parser.RawResponseMessage.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":216 + * self.chunked = chunked + * + * def __repr__(self): # <<<<<<<<<<<<<< + * info = [] + * info.append(("version", self.version)) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_3__repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_3__repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_2__repr__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_gb_7aiohttp_12_http_parser_18RawResponseMessage_8__repr___2generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ + +/* "aiohttp/_http_parser.pyx":227 + * info.append(("upgrade", self.upgrade)) + * info.append(("chunked", self.chunked)) + * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) # <<<<<<<<<<<<<< + * return '' + * + */ + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_8__repr___genexpr(PyObject *__pyx_self) { + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *__pyx_cur_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("genexpr", 0); + __pyx_cur_scope = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *)__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr(__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 227, __pyx_L1_error) + } else { + __Pyx_GOTREF(__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *) __pyx_self; + __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope)); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope); + { + __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7aiohttp_12_http_parser_18RawResponseMessage_8__repr___2generator1, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_repr___locals_genexpr, __pyx_n_s_aiohttp__http_parser); if (unlikely(!gen)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_DECREF(__pyx_cur_scope); + __Pyx_RefNannyFinishContext(); + return (PyObject *) gen; + } + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("aiohttp._http_parser.RawResponseMessage.__repr__.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_gb_7aiohttp_12_http_parser_18RawResponseMessage_8__repr___2generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ +{ + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *__pyx_cur_scope = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *)__pyx_generator->closure); + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *(*__pyx_t_7)(PyObject *); + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("genexpr", 0); + switch (__pyx_generator->resume_label) { + case 0: goto __pyx_L3_first_run; + default: /* CPython raises the right error here */ + __Pyx_RefNannyFinishContext(); + return NULL; + } + __pyx_L3_first_run:; + if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 227, __pyx_L1_error) + __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_r); + if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_info)) { __Pyx_RaiseClosureNameError("info"); __PYX_ERR(0, 227, __pyx_L1_error) } + if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_info == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 227, __pyx_L1_error) + } + __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_info; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; + for (;;) { + if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 227, __pyx_L1_error) + #else + __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { + PyObject* sequence = __pyx_t_3; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 227, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_5 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + #else + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; + index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed; + __Pyx_GOTREF(__pyx_t_5); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 227, __pyx_L1_error) + __pyx_t_7 = NULL; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L7_unpacking_done; + __pyx_L6_unpacking_failed:; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_7 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 227, __pyx_L1_error) + __pyx_L7_unpacking_done:; + } + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_val); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_val, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_3 = PyNumber_Add(__pyx_cur_scope->__pyx_v_name, __pyx_kp_u_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_Repr(__pyx_cur_scope->__pyx_v_val); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_r); __pyx_r = 0; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + #if !CYTHON_USE_EXC_INFO_STACK + __Pyx_Coroutine_ResetAndClearException(__pyx_generator); + #endif + __pyx_generator->resume_label = -1; + __Pyx_Coroutine_clear((PyObject*)__pyx_generator); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":216 + * self.chunked = chunked + * + * def __repr__(self): # <<<<<<<<<<<<<< + * info = [] + * info.append(("version", self.version)) + */ + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_2__repr__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *__pyx_cur_scope; + PyObject *__pyx_v_sinfo = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + __Pyx_RefNannySetupContext("__repr__", 0); + __pyx_cur_scope = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *)__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__(__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 216, __pyx_L1_error) + } else { + __Pyx_GOTREF(__pyx_cur_scope); + } + + /* "aiohttp/_http_parser.pyx":217 + * + * def __repr__(self): + * info = [] # <<<<<<<<<<<<<< + * info.append(("version", self.version)) + * info.append(("code", self.code)) + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 217, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_cur_scope->__pyx_v_info = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":218 + * def __repr__(self): + * info = [] + * info.append(("version", self.version)) # <<<<<<<<<<<<<< + * info.append(("code", self.code)) + * info.append(("reason", self.reason)) + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_u_version); + __Pyx_GIVEREF(__pyx_n_u_version); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_version); + __Pyx_INCREF(__pyx_v_self->version); + __Pyx_GIVEREF(__pyx_v_self->version); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->version); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":219 + * info = [] + * info.append(("version", self.version)) + * info.append(("code", self.code)) # <<<<<<<<<<<<<< + * info.append(("reason", self.reason)) + * info.append(("headers", self.headers)) + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_u_code); + __Pyx_GIVEREF(__pyx_n_u_code); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_code); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":220 + * info.append(("version", self.version)) + * info.append(("code", self.code)) + * info.append(("reason", self.reason)) # <<<<<<<<<<<<<< + * info.append(("headers", self.headers)) + * info.append(("raw_headers", self.raw_headers)) + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_u_reason); + __Pyx_GIVEREF(__pyx_n_u_reason); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_reason); + __Pyx_INCREF(__pyx_v_self->reason); + __Pyx_GIVEREF(__pyx_v_self->reason); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->reason); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":221 + * info.append(("code", self.code)) + * info.append(("reason", self.reason)) + * info.append(("headers", self.headers)) # <<<<<<<<<<<<<< + * info.append(("raw_headers", self.raw_headers)) + * info.append(("should_close", self.should_close)) + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_u_headers); + __Pyx_GIVEREF(__pyx_n_u_headers); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_headers); + __Pyx_INCREF(__pyx_v_self->headers); + __Pyx_GIVEREF(__pyx_v_self->headers); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->headers); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":222 + * info.append(("reason", self.reason)) + * info.append(("headers", self.headers)) + * info.append(("raw_headers", self.raw_headers)) # <<<<<<<<<<<<<< + * info.append(("should_close", self.should_close)) + * info.append(("compression", self.compression)) + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_u_raw_headers); + __Pyx_GIVEREF(__pyx_n_u_raw_headers); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_raw_headers); + __Pyx_INCREF(__pyx_v_self->raw_headers); + __Pyx_GIVEREF(__pyx_v_self->raw_headers); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->raw_headers); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":223 + * info.append(("headers", self.headers)) + * info.append(("raw_headers", self.raw_headers)) + * info.append(("should_close", self.should_close)) # <<<<<<<<<<<<<< + * info.append(("compression", self.compression)) + * info.append(("upgrade", self.upgrade)) + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_u_should_close); + __Pyx_GIVEREF(__pyx_n_u_should_close); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_should_close); + __Pyx_INCREF(__pyx_v_self->should_close); + __Pyx_GIVEREF(__pyx_v_self->should_close); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->should_close); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":224 + * info.append(("raw_headers", self.raw_headers)) + * info.append(("should_close", self.should_close)) + * info.append(("compression", self.compression)) # <<<<<<<<<<<<<< + * info.append(("upgrade", self.upgrade)) + * info.append(("chunked", self.chunked)) + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_u_compression); + __Pyx_GIVEREF(__pyx_n_u_compression); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_compression); + __Pyx_INCREF(__pyx_v_self->compression); + __Pyx_GIVEREF(__pyx_v_self->compression); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->compression); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":225 + * info.append(("should_close", self.should_close)) + * info.append(("compression", self.compression)) + * info.append(("upgrade", self.upgrade)) # <<<<<<<<<<<<<< + * info.append(("chunked", self.chunked)) + * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 225, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_u_upgrade); + __Pyx_GIVEREF(__pyx_n_u_upgrade); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_upgrade); + __Pyx_INCREF(__pyx_v_self->upgrade); + __Pyx_GIVEREF(__pyx_v_self->upgrade); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->upgrade); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 225, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":226 + * info.append(("compression", self.compression)) + * info.append(("upgrade", self.upgrade)) + * info.append(("chunked", self.chunked)) # <<<<<<<<<<<<<< + * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) + * return '' + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 226, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_u_chunked); + __Pyx_GIVEREF(__pyx_n_u_chunked); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_chunked); + __Pyx_INCREF(__pyx_v_self->chunked); + __Pyx_GIVEREF(__pyx_v_self->chunked); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->chunked); + __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 226, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":227 + * info.append(("upgrade", self.upgrade)) + * info.append(("chunked", self.chunked)) + * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) # <<<<<<<<<<<<<< + * return '' + * + */ + __pyx_t_3 = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_8__repr___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_Generator_Next(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyUnicode_Join(__pyx_kp_u__2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_sinfo = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":228 + * info.append(("chunked", self.chunked)) + * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) + * return '' # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_PyUnicode_ConcatSafe(__pyx_kp_u_RawResponseMessage, __pyx_v_sinfo); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_t_3, __pyx_kp_u__3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":216 + * self.chunked = chunked + * + * def __repr__(self): # <<<<<<<<<<<<<< + * info = [] + * info.append(("version", self.version)) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._http_parser.RawResponseMessage.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_sinfo); + __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":194 + * @cython.freelist(DEFAULT_FREELIST_SIZE) + * cdef class RawResponseMessage: + * cdef readonly object version # HttpVersion # <<<<<<<<<<<<<< + * cdef readonly int code + * cdef readonly str reason + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7version_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7version_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7version___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7version___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->version); + __pyx_r = __pyx_v_self->version; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":195 + * cdef class RawResponseMessage: + * cdef readonly object version # HttpVersion + * cdef readonly int code # <<<<<<<<<<<<<< + * cdef readonly str reason + * cdef readonly object headers # CIMultiDict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_4code_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_4code_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_4code___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_4code___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser.RawResponseMessage.code.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":196 + * cdef readonly object version # HttpVersion + * cdef readonly int code + * cdef readonly str reason # <<<<<<<<<<<<<< + * cdef readonly object headers # CIMultiDict + * cdef readonly object raw_headers # tuple + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_6reason_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_6reason_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_6reason___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_6reason___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->reason); + __pyx_r = __pyx_v_self->reason; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":197 + * cdef readonly int code + * cdef readonly str reason + * cdef readonly object headers # CIMultiDict # <<<<<<<<<<<<<< + * cdef readonly object raw_headers # tuple + * cdef readonly object should_close + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7headers_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7headers_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7headers___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7headers___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->headers); + __pyx_r = __pyx_v_self->headers; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":198 + * cdef readonly str reason + * cdef readonly object headers # CIMultiDict + * cdef readonly object raw_headers # tuple # <<<<<<<<<<<<<< + * cdef readonly object should_close + * cdef readonly object compression + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_11raw_headers_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_11raw_headers_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_11raw_headers___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_11raw_headers___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->raw_headers); + __pyx_r = __pyx_v_self->raw_headers; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":199 + * cdef readonly object headers # CIMultiDict + * cdef readonly object raw_headers # tuple + * cdef readonly object should_close # <<<<<<<<<<<<<< + * cdef readonly object compression + * cdef readonly object upgrade + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_12should_close_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_12should_close_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_12should_close___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_12should_close___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->should_close); + __pyx_r = __pyx_v_self->should_close; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":200 + * cdef readonly object raw_headers # tuple + * cdef readonly object should_close + * cdef readonly object compression # <<<<<<<<<<<<<< + * cdef readonly object upgrade + * cdef readonly object chunked + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_11compression_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_11compression_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_11compression___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_11compression___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->compression); + __pyx_r = __pyx_v_self->compression; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":201 + * cdef readonly object should_close + * cdef readonly object compression + * cdef readonly object upgrade # <<<<<<<<<<<<<< + * cdef readonly object chunked + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7upgrade_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7upgrade_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7upgrade___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7upgrade___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->upgrade); + __pyx_r = __pyx_v_self->upgrade; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":202 + * cdef readonly object compression + * cdef readonly object upgrade + * cdef readonly object chunked # <<<<<<<<<<<<<< + * + * def __init__(self, version, code, reason, headers, raw_headers, + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7chunked_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7chunked_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7chunked___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7chunked___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->chunked); + __pyx_r = __pyx_v_self->chunked; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_4__reduce_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_4__reduce_cython__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v__dict = 0; + int __pyx_v_use_setstate; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.chunked, self.code, self.compression, self.headers, self.raw_headers, self.reason, self.should_close, self.upgrade, self.version) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->code); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(9); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_self->chunked); + __Pyx_GIVEREF(__pyx_v_self->chunked); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->chunked); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); + __Pyx_INCREF(__pyx_v_self->compression); + __Pyx_GIVEREF(__pyx_v_self->compression); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self->compression); + __Pyx_INCREF(__pyx_v_self->headers); + __Pyx_GIVEREF(__pyx_v_self->headers); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_self->headers); + __Pyx_INCREF(__pyx_v_self->raw_headers); + __Pyx_GIVEREF(__pyx_v_self->raw_headers); + PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_v_self->raw_headers); + __Pyx_INCREF(__pyx_v_self->reason); + __Pyx_GIVEREF(__pyx_v_self->reason); + PyTuple_SET_ITEM(__pyx_t_2, 5, __pyx_v_self->reason); + __Pyx_INCREF(__pyx_v_self->should_close); + __Pyx_GIVEREF(__pyx_v_self->should_close); + PyTuple_SET_ITEM(__pyx_t_2, 6, __pyx_v_self->should_close); + __Pyx_INCREF(__pyx_v_self->upgrade); + __Pyx_GIVEREF(__pyx_v_self->upgrade); + PyTuple_SET_ITEM(__pyx_t_2, 7, __pyx_v_self->upgrade); + __Pyx_INCREF(__pyx_v_self->version); + __Pyx_GIVEREF(__pyx_v_self->version); + PyTuple_SET_ITEM(__pyx_t_2, 8, __pyx_v_self->version); + __pyx_t_1 = 0; + __pyx_v_state = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.chunked, self.code, self.compression, self.headers, self.raw_headers, self.reason, self.should_close, self.upgrade, self.version) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_2 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v__dict = __pyx_t_2; + __pyx_t_2 = 0; + + /* "(tree fragment)":7 + * state = (self.chunked, self.code, self.compression, self.headers, self.raw_headers, self.reason, self.should_close, self.upgrade, self.version) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_3 = (__pyx_v__dict != Py_None); + __pyx_t_4 = (__pyx_t_3 != 0); + if (__pyx_t_4) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v__dict); + __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.raw_headers is not None or self.reason is not None or self.should_close is not None or self.upgrade is not None or self.version is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.chunked, self.code, self.compression, self.headers, self.raw_headers, self.reason, self.should_close, self.upgrade, self.version) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + goto __pyx_L3; + } + + /* "(tree fragment)":11 + * use_setstate = True + * else: + * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.raw_headers is not None or self.reason is not None or self.should_close is not None or self.upgrade is not None or self.version is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, None), state + */ + /*else*/ { + __pyx_t_3 = (__pyx_v_self->chunked != Py_None); + __pyx_t_5 = (__pyx_t_3 != 0); + if (!__pyx_t_5) { + } else { + __pyx_t_4 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_self->compression != Py_None); + __pyx_t_3 = (__pyx_t_5 != 0); + if (!__pyx_t_3) { + } else { + __pyx_t_4 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_self->headers != Py_None); + __pyx_t_5 = (__pyx_t_3 != 0); + if (!__pyx_t_5) { + } else { + __pyx_t_4 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_self->raw_headers != Py_None); + __pyx_t_3 = (__pyx_t_5 != 0); + if (!__pyx_t_3) { + } else { + __pyx_t_4 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_self->reason != ((PyObject*)Py_None)); + __pyx_t_5 = (__pyx_t_3 != 0); + if (!__pyx_t_5) { + } else { + __pyx_t_4 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_self->should_close != Py_None); + __pyx_t_3 = (__pyx_t_5 != 0); + if (!__pyx_t_3) { + } else { + __pyx_t_4 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_self->upgrade != Py_None); + __pyx_t_5 = (__pyx_t_3 != 0); + if (!__pyx_t_5) { + } else { + __pyx_t_4 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_self->version != Py_None); + __pyx_t_3 = (__pyx_t_5 != 0); + __pyx_t_4 = __pyx_t_3; + __pyx_L4_bool_binop_done:; + __pyx_v_use_setstate = __pyx_t_4; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.raw_headers is not None or self.reason is not None or self.should_close is not None or self.upgrade is not None or self.version is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, None), state + * else: + */ + __pyx_t_4 = (__pyx_v_use_setstate != 0); + if (__pyx_t_4) { + + /* "(tree fragment)":13 + * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.raw_headers is not None or self.reason is not None or self.should_close is not None or self.upgrade is not None or self.version is not None + * if use_setstate: + * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyx_unpickle_RawResponseMessag); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_209127132); + __Pyx_GIVEREF(__pyx_int_209127132); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_209127132); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None); + __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.raw_headers is not None or self.reason is not None or self.should_close is not None or self.upgrade is not None or self.version is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, None), state + * else: + * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_RawResponseMessage__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyx_unpickle_RawResponseMessag); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_209127132); + __Pyx_GIVEREF(__pyx_int_209127132); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_209127132); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); + __pyx_t_6 = 0; + __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + } + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("aiohttp._http_parser.RawResponseMessage.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_state); + __Pyx_XDECREF(__pyx_v__dict); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":16 + * else: + * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_RawResponseMessage__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_6__setstate_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_6__setstate_cython__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_RawResponseMessage__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawResponseMessage__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_RawResponseMessage__set_state(self, __pyx_state) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser.RawResponseMessage.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":231 + * + * + * cdef _new_response_message(object version, # <<<<<<<<<<<<<< + * int code, + * str reason, + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser__new_response_message(PyObject *__pyx_v_version, int __pyx_v_code, PyObject *__pyx_v_reason, PyObject *__pyx_v_headers, PyObject *__pyx_v_raw_headers, int __pyx_v_should_close, PyObject *__pyx_v_compression, int __pyx_v_upgrade, int __pyx_v_chunked) { + struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_ret = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("_new_response_message", 0); + + /* "aiohttp/_http_parser.pyx":241 + * bint chunked): + * cdef RawResponseMessage ret + * ret = RawResponseMessage.__new__(RawResponseMessage) # <<<<<<<<<<<<<< + * ret.version = version + * ret.code = code + */ + __pyx_t_1 = ((PyObject *)__pyx_tp_new_7aiohttp_12_http_parser_RawResponseMessage(((PyTypeObject *)__pyx_ptype_7aiohttp_12_http_parser_RawResponseMessage), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + __pyx_v_ret = ((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":242 + * cdef RawResponseMessage ret + * ret = RawResponseMessage.__new__(RawResponseMessage) + * ret.version = version # <<<<<<<<<<<<<< + * ret.code = code + * ret.reason = reason + */ + __Pyx_INCREF(__pyx_v_version); + __Pyx_GIVEREF(__pyx_v_version); + __Pyx_GOTREF(__pyx_v_ret->version); + __Pyx_DECREF(__pyx_v_ret->version); + __pyx_v_ret->version = __pyx_v_version; + + /* "aiohttp/_http_parser.pyx":243 + * ret = RawResponseMessage.__new__(RawResponseMessage) + * ret.version = version + * ret.code = code # <<<<<<<<<<<<<< + * ret.reason = reason + * ret.headers = headers + */ + __pyx_v_ret->code = __pyx_v_code; + + /* "aiohttp/_http_parser.pyx":244 + * ret.version = version + * ret.code = code + * ret.reason = reason # <<<<<<<<<<<<<< + * ret.headers = headers + * ret.raw_headers = raw_headers + */ + __Pyx_INCREF(__pyx_v_reason); + __Pyx_GIVEREF(__pyx_v_reason); + __Pyx_GOTREF(__pyx_v_ret->reason); + __Pyx_DECREF(__pyx_v_ret->reason); + __pyx_v_ret->reason = __pyx_v_reason; + + /* "aiohttp/_http_parser.pyx":245 + * ret.code = code + * ret.reason = reason + * ret.headers = headers # <<<<<<<<<<<<<< + * ret.raw_headers = raw_headers + * ret.should_close = should_close + */ + __Pyx_INCREF(__pyx_v_headers); + __Pyx_GIVEREF(__pyx_v_headers); + __Pyx_GOTREF(__pyx_v_ret->headers); + __Pyx_DECREF(__pyx_v_ret->headers); + __pyx_v_ret->headers = __pyx_v_headers; + + /* "aiohttp/_http_parser.pyx":246 + * ret.reason = reason + * ret.headers = headers + * ret.raw_headers = raw_headers # <<<<<<<<<<<<<< + * ret.should_close = should_close + * ret.compression = compression + */ + __Pyx_INCREF(__pyx_v_raw_headers); + __Pyx_GIVEREF(__pyx_v_raw_headers); + __Pyx_GOTREF(__pyx_v_ret->raw_headers); + __Pyx_DECREF(__pyx_v_ret->raw_headers); + __pyx_v_ret->raw_headers = __pyx_v_raw_headers; + + /* "aiohttp/_http_parser.pyx":247 + * ret.headers = headers + * ret.raw_headers = raw_headers + * ret.should_close = should_close # <<<<<<<<<<<<<< + * ret.compression = compression + * ret.upgrade = upgrade + */ + __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_should_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_ret->should_close); + __Pyx_DECREF(__pyx_v_ret->should_close); + __pyx_v_ret->should_close = __pyx_t_1; + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":248 + * ret.raw_headers = raw_headers + * ret.should_close = should_close + * ret.compression = compression # <<<<<<<<<<<<<< + * ret.upgrade = upgrade + * ret.chunked = chunked + */ + __Pyx_INCREF(__pyx_v_compression); + __Pyx_GIVEREF(__pyx_v_compression); + __Pyx_GOTREF(__pyx_v_ret->compression); + __Pyx_DECREF(__pyx_v_ret->compression); + __pyx_v_ret->compression = __pyx_v_compression; + + /* "aiohttp/_http_parser.pyx":249 + * ret.should_close = should_close + * ret.compression = compression + * ret.upgrade = upgrade # <<<<<<<<<<<<<< + * ret.chunked = chunked + * return ret + */ + __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_upgrade); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_ret->upgrade); + __Pyx_DECREF(__pyx_v_ret->upgrade); + __pyx_v_ret->upgrade = __pyx_t_1; + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":250 + * ret.compression = compression + * ret.upgrade = upgrade + * ret.chunked = chunked # <<<<<<<<<<<<<< + * return ret + * + */ + __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_chunked); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 250, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_ret->chunked); + __Pyx_DECREF(__pyx_v_ret->chunked); + __pyx_v_ret->chunked = __pyx_t_1; + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":251 + * ret.upgrade = upgrade + * ret.chunked = chunked + * return ret # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_ret)); + __pyx_r = ((PyObject *)__pyx_v_ret); + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":231 + * + * + * cdef _new_response_message(object version, # <<<<<<<<<<<<<< + * int code, + * str reason, + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser._new_response_message", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_ret); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":293 + * Py_buffer py_buf + * + * def __cinit__(self): # <<<<<<<<<<<<<< + * self._cparser = \ + * PyMem_Malloc(sizeof(cparser.http_parser)) + */ + +/* Python wrapper */ +static int __pyx_pw_7aiohttp_12_http_parser_10HttpParser_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_7aiohttp_12_http_parser_10HttpParser_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { + __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} + if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1; + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_10HttpParser___cinit__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_7aiohttp_12_http_parser_10HttpParser___cinit__(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__cinit__", 0); + + /* "aiohttp/_http_parser.pyx":294 + * + * def __cinit__(self): + * self._cparser = \ # <<<<<<<<<<<<<< + * PyMem_Malloc(sizeof(cparser.http_parser)) + * if self._cparser is NULL: + */ + __pyx_v_self->_cparser = ((struct http_parser *)PyMem_Malloc((sizeof(struct http_parser)))); + + /* "aiohttp/_http_parser.pyx":296 + * self._cparser = \ + * PyMem_Malloc(sizeof(cparser.http_parser)) + * if self._cparser is NULL: # <<<<<<<<<<<<<< + * raise MemoryError() + * + */ + __pyx_t_1 = ((__pyx_v_self->_cparser == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_http_parser.pyx":297 + * PyMem_Malloc(sizeof(cparser.http_parser)) + * if self._cparser is NULL: + * raise MemoryError() # <<<<<<<<<<<<<< + * + * self._csettings = \ + */ + PyErr_NoMemory(); __PYX_ERR(0, 297, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":296 + * self._cparser = \ + * PyMem_Malloc(sizeof(cparser.http_parser)) + * if self._cparser is NULL: # <<<<<<<<<<<<<< + * raise MemoryError() + * + */ + } + + /* "aiohttp/_http_parser.pyx":299 + * raise MemoryError() + * + * self._csettings = \ # <<<<<<<<<<<<<< + * PyMem_Malloc(sizeof(cparser.http_parser_settings)) + * if self._csettings is NULL: + */ + __pyx_v_self->_csettings = ((struct http_parser_settings *)PyMem_Malloc((sizeof(struct http_parser_settings)))); + + /* "aiohttp/_http_parser.pyx":301 + * self._csettings = \ + * PyMem_Malloc(sizeof(cparser.http_parser_settings)) + * if self._csettings is NULL: # <<<<<<<<<<<<<< + * raise MemoryError() + * + */ + __pyx_t_1 = ((__pyx_v_self->_csettings == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_http_parser.pyx":302 + * PyMem_Malloc(sizeof(cparser.http_parser_settings)) + * if self._csettings is NULL: + * raise MemoryError() # <<<<<<<<<<<<<< + * + * def __dealloc__(self): + */ + PyErr_NoMemory(); __PYX_ERR(0, 302, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":301 + * self._csettings = \ + * PyMem_Malloc(sizeof(cparser.http_parser_settings)) + * if self._csettings is NULL: # <<<<<<<<<<<<<< + * raise MemoryError() + * + */ + } + + /* "aiohttp/_http_parser.pyx":293 + * Py_buffer py_buf + * + * def __cinit__(self): # <<<<<<<<<<<<<< + * self._cparser = \ + * PyMem_Malloc(sizeof(cparser.http_parser)) + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("aiohttp._http_parser.HttpParser.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":304 + * raise MemoryError() + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * PyMem_Free(self._cparser) + * PyMem_Free(self._csettings) + */ + +/* Python wrapper */ +static void __pyx_pw_7aiohttp_12_http_parser_10HttpParser_3__dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_pw_7aiohttp_12_http_parser_10HttpParser_3__dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_pf_7aiohttp_12_http_parser_10HttpParser_2__dealloc__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_pf_7aiohttp_12_http_parser_10HttpParser_2__dealloc__(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "aiohttp/_http_parser.pyx":305 + * + * def __dealloc__(self): + * PyMem_Free(self._cparser) # <<<<<<<<<<<<<< + * PyMem_Free(self._csettings) + * + */ + PyMem_Free(__pyx_v_self->_cparser); + + /* "aiohttp/_http_parser.pyx":306 + * def __dealloc__(self): + * PyMem_Free(self._cparser) + * PyMem_Free(self._csettings) # <<<<<<<<<<<<<< + * + * cdef _init(self, cparser.http_parser_type mode, + */ + PyMem_Free(__pyx_v_self->_csettings); + + /* "aiohttp/_http_parser.pyx":304 + * raise MemoryError() + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * PyMem_Free(self._cparser) + * PyMem_Free(self._csettings) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "aiohttp/_http_parser.pyx":308 + * PyMem_Free(self._csettings) + * + * cdef _init(self, cparser.http_parser_type mode, # <<<<<<<<<<<<<< + * object protocol, object loop, object timer=None, + * size_t max_line_size=8190, size_t max_headers=32768, + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__init(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, enum http_parser_type __pyx_v_mode, PyObject *__pyx_v_protocol, PyObject *__pyx_v_loop, struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init *__pyx_optional_args) { + + /* "aiohttp/_http_parser.pyx":309 + * + * cdef _init(self, cparser.http_parser_type mode, + * object protocol, object loop, object timer=None, # <<<<<<<<<<<<<< + * size_t max_line_size=8190, size_t max_headers=32768, + * size_t max_field_size=8190, payload_exception=None, + */ + PyObject *__pyx_v_timer = ((PyObject *)Py_None); + size_t __pyx_v_max_line_size = ((size_t)0x1FFE); + size_t __pyx_v_max_headers = ((size_t)0x8000); + size_t __pyx_v_max_field_size = ((size_t)0x1FFE); + + /* "aiohttp/_http_parser.pyx":311 + * object protocol, object loop, object timer=None, + * size_t max_line_size=8190, size_t max_headers=32768, + * size_t max_field_size=8190, payload_exception=None, # <<<<<<<<<<<<<< + * bint response_with_body=True, bint auto_decompress=True): + * cparser.http_parser_init(self._cparser, mode) + */ + PyObject *__pyx_v_payload_exception = ((PyObject *)Py_None); + + /* "aiohttp/_http_parser.pyx":312 + * size_t max_line_size=8190, size_t max_headers=32768, + * size_t max_field_size=8190, payload_exception=None, + * bint response_with_body=True, bint auto_decompress=True): # <<<<<<<<<<<<<< + * cparser.http_parser_init(self._cparser, mode) + * self._cparser.data = self + */ + int __pyx_v_response_with_body = ((int)1); + int __pyx_v_auto_decompress = ((int)1); + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("_init", 0); + if (__pyx_optional_args) { + if (__pyx_optional_args->__pyx_n > 0) { + __pyx_v_timer = __pyx_optional_args->timer; + if (__pyx_optional_args->__pyx_n > 1) { + __pyx_v_max_line_size = __pyx_optional_args->max_line_size; + if (__pyx_optional_args->__pyx_n > 2) { + __pyx_v_max_headers = __pyx_optional_args->max_headers; + if (__pyx_optional_args->__pyx_n > 3) { + __pyx_v_max_field_size = __pyx_optional_args->max_field_size; + if (__pyx_optional_args->__pyx_n > 4) { + __pyx_v_payload_exception = __pyx_optional_args->payload_exception; + if (__pyx_optional_args->__pyx_n > 5) { + __pyx_v_response_with_body = __pyx_optional_args->response_with_body; + if (__pyx_optional_args->__pyx_n > 6) { + __pyx_v_auto_decompress = __pyx_optional_args->auto_decompress; + } + } + } + } + } + } + } + } + + /* "aiohttp/_http_parser.pyx":313 + * size_t max_field_size=8190, payload_exception=None, + * bint response_with_body=True, bint auto_decompress=True): + * cparser.http_parser_init(self._cparser, mode) # <<<<<<<<<<<<<< + * self._cparser.data = self + * self._cparser.content_length = 0 + */ + http_parser_init(__pyx_v_self->_cparser, __pyx_v_mode); + + /* "aiohttp/_http_parser.pyx":314 + * bint response_with_body=True, bint auto_decompress=True): + * cparser.http_parser_init(self._cparser, mode) + * self._cparser.data = self # <<<<<<<<<<<<<< + * self._cparser.content_length = 0 + * + */ + __pyx_v_self->_cparser->data = ((void *)__pyx_v_self); + + /* "aiohttp/_http_parser.pyx":315 + * cparser.http_parser_init(self._cparser, mode) + * self._cparser.data = self + * self._cparser.content_length = 0 # <<<<<<<<<<<<<< + * + * cparser.http_parser_settings_init(self._csettings) + */ + __pyx_v_self->_cparser->content_length = 0; + + /* "aiohttp/_http_parser.pyx":317 + * self._cparser.content_length = 0 + * + * cparser.http_parser_settings_init(self._csettings) # <<<<<<<<<<<<<< + * + * self._protocol = protocol + */ + http_parser_settings_init(__pyx_v_self->_csettings); + + /* "aiohttp/_http_parser.pyx":319 + * cparser.http_parser_settings_init(self._csettings) + * + * self._protocol = protocol # <<<<<<<<<<<<<< + * self._loop = loop + * self._timer = timer + */ + __Pyx_INCREF(__pyx_v_protocol); + __Pyx_GIVEREF(__pyx_v_protocol); + __Pyx_GOTREF(__pyx_v_self->_protocol); + __Pyx_DECREF(__pyx_v_self->_protocol); + __pyx_v_self->_protocol = __pyx_v_protocol; + + /* "aiohttp/_http_parser.pyx":320 + * + * self._protocol = protocol + * self._loop = loop # <<<<<<<<<<<<<< + * self._timer = timer + * + */ + __Pyx_INCREF(__pyx_v_loop); + __Pyx_GIVEREF(__pyx_v_loop); + __Pyx_GOTREF(__pyx_v_self->_loop); + __Pyx_DECREF(__pyx_v_self->_loop); + __pyx_v_self->_loop = __pyx_v_loop; + + /* "aiohttp/_http_parser.pyx":321 + * self._protocol = protocol + * self._loop = loop + * self._timer = timer # <<<<<<<<<<<<<< + * + * self._buf = bytearray() + */ + __Pyx_INCREF(__pyx_v_timer); + __Pyx_GIVEREF(__pyx_v_timer); + __Pyx_GOTREF(__pyx_v_self->_timer); + __Pyx_DECREF(__pyx_v_self->_timer); + __pyx_v_self->_timer = __pyx_v_timer; + + /* "aiohttp/_http_parser.pyx":323 + * self._timer = timer + * + * self._buf = bytearray() # <<<<<<<<<<<<<< + * self._payload = None + * self._payload_error = 0 + */ + __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)(&PyByteArray_Type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 323, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_self->_buf); + __Pyx_DECREF(__pyx_v_self->_buf); + __pyx_v_self->_buf = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":324 + * + * self._buf = bytearray() + * self._payload = None # <<<<<<<<<<<<<< + * self._payload_error = 0 + * self._payload_exception = payload_exception + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->_payload); + __Pyx_DECREF(__pyx_v_self->_payload); + __pyx_v_self->_payload = Py_None; + + /* "aiohttp/_http_parser.pyx":325 + * self._buf = bytearray() + * self._payload = None + * self._payload_error = 0 # <<<<<<<<<<<<<< + * self._payload_exception = payload_exception + * self._messages = [] + */ + __pyx_v_self->_payload_error = 0; + + /* "aiohttp/_http_parser.pyx":326 + * self._payload = None + * self._payload_error = 0 + * self._payload_exception = payload_exception # <<<<<<<<<<<<<< + * self._messages = [] + * + */ + __Pyx_INCREF(__pyx_v_payload_exception); + __Pyx_GIVEREF(__pyx_v_payload_exception); + __Pyx_GOTREF(__pyx_v_self->_payload_exception); + __Pyx_DECREF(__pyx_v_self->_payload_exception); + __pyx_v_self->_payload_exception = __pyx_v_payload_exception; + + /* "aiohttp/_http_parser.pyx":327 + * self._payload_error = 0 + * self._payload_exception = payload_exception + * self._messages = [] # <<<<<<<<<<<<<< + * + * self._raw_name = bytearray() + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 327, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_self->_messages); + __Pyx_DECREF(__pyx_v_self->_messages); + __pyx_v_self->_messages = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":329 + * self._messages = [] + * + * self._raw_name = bytearray() # <<<<<<<<<<<<<< + * self._raw_value = bytearray() + * self._has_value = False + */ + __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)(&PyByteArray_Type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_self->_raw_name); + __Pyx_DECREF(__pyx_v_self->_raw_name); + __pyx_v_self->_raw_name = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":330 + * + * self._raw_name = bytearray() + * self._raw_value = bytearray() # <<<<<<<<<<<<<< + * self._has_value = False + * + */ + __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)(&PyByteArray_Type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 330, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_self->_raw_value); + __Pyx_DECREF(__pyx_v_self->_raw_value); + __pyx_v_self->_raw_value = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":331 + * self._raw_name = bytearray() + * self._raw_value = bytearray() + * self._has_value = False # <<<<<<<<<<<<<< + * + * self._max_line_size = max_line_size + */ + __pyx_v_self->_has_value = 0; + + /* "aiohttp/_http_parser.pyx":333 + * self._has_value = False + * + * self._max_line_size = max_line_size # <<<<<<<<<<<<<< + * self._max_headers = max_headers + * self._max_field_size = max_field_size + */ + __pyx_v_self->_max_line_size = __pyx_v_max_line_size; + + /* "aiohttp/_http_parser.pyx":334 + * + * self._max_line_size = max_line_size + * self._max_headers = max_headers # <<<<<<<<<<<<<< + * self._max_field_size = max_field_size + * self._response_with_body = response_with_body + */ + __pyx_v_self->_max_headers = __pyx_v_max_headers; + + /* "aiohttp/_http_parser.pyx":335 + * self._max_line_size = max_line_size + * self._max_headers = max_headers + * self._max_field_size = max_field_size # <<<<<<<<<<<<<< + * self._response_with_body = response_with_body + * self._upgraded = False + */ + __pyx_v_self->_max_field_size = __pyx_v_max_field_size; + + /* "aiohttp/_http_parser.pyx":336 + * self._max_headers = max_headers + * self._max_field_size = max_field_size + * self._response_with_body = response_with_body # <<<<<<<<<<<<<< + * self._upgraded = False + * self._auto_decompress = auto_decompress + */ + __pyx_v_self->_response_with_body = __pyx_v_response_with_body; + + /* "aiohttp/_http_parser.pyx":337 + * self._max_field_size = max_field_size + * self._response_with_body = response_with_body + * self._upgraded = False # <<<<<<<<<<<<<< + * self._auto_decompress = auto_decompress + * self._content_encoding = None + */ + __pyx_v_self->_upgraded = 0; + + /* "aiohttp/_http_parser.pyx":338 + * self._response_with_body = response_with_body + * self._upgraded = False + * self._auto_decompress = auto_decompress # <<<<<<<<<<<<<< + * self._content_encoding = None + * + */ + __pyx_v_self->_auto_decompress = __pyx_v_auto_decompress; + + /* "aiohttp/_http_parser.pyx":339 + * self._upgraded = False + * self._auto_decompress = auto_decompress + * self._content_encoding = None # <<<<<<<<<<<<<< + * + * self._csettings.on_url = cb_on_url + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->_content_encoding); + __Pyx_DECREF(__pyx_v_self->_content_encoding); + __pyx_v_self->_content_encoding = ((PyObject*)Py_None); + + /* "aiohttp/_http_parser.pyx":341 + * self._content_encoding = None + * + * self._csettings.on_url = cb_on_url # <<<<<<<<<<<<<< + * self._csettings.on_status = cb_on_status + * self._csettings.on_header_field = cb_on_header_field + */ + __pyx_v_self->_csettings->on_url = __pyx_f_7aiohttp_12_http_parser_cb_on_url; + + /* "aiohttp/_http_parser.pyx":342 + * + * self._csettings.on_url = cb_on_url + * self._csettings.on_status = cb_on_status # <<<<<<<<<<<<<< + * self._csettings.on_header_field = cb_on_header_field + * self._csettings.on_header_value = cb_on_header_value + */ + __pyx_v_self->_csettings->on_status = __pyx_f_7aiohttp_12_http_parser_cb_on_status; + + /* "aiohttp/_http_parser.pyx":343 + * self._csettings.on_url = cb_on_url + * self._csettings.on_status = cb_on_status + * self._csettings.on_header_field = cb_on_header_field # <<<<<<<<<<<<<< + * self._csettings.on_header_value = cb_on_header_value + * self._csettings.on_headers_complete = cb_on_headers_complete + */ + __pyx_v_self->_csettings->on_header_field = __pyx_f_7aiohttp_12_http_parser_cb_on_header_field; + + /* "aiohttp/_http_parser.pyx":344 + * self._csettings.on_status = cb_on_status + * self._csettings.on_header_field = cb_on_header_field + * self._csettings.on_header_value = cb_on_header_value # <<<<<<<<<<<<<< + * self._csettings.on_headers_complete = cb_on_headers_complete + * self._csettings.on_body = cb_on_body + */ + __pyx_v_self->_csettings->on_header_value = __pyx_f_7aiohttp_12_http_parser_cb_on_header_value; + + /* "aiohttp/_http_parser.pyx":345 + * self._csettings.on_header_field = cb_on_header_field + * self._csettings.on_header_value = cb_on_header_value + * self._csettings.on_headers_complete = cb_on_headers_complete # <<<<<<<<<<<<<< + * self._csettings.on_body = cb_on_body + * self._csettings.on_message_begin = cb_on_message_begin + */ + __pyx_v_self->_csettings->on_headers_complete = __pyx_f_7aiohttp_12_http_parser_cb_on_headers_complete; + + /* "aiohttp/_http_parser.pyx":346 + * self._csettings.on_header_value = cb_on_header_value + * self._csettings.on_headers_complete = cb_on_headers_complete + * self._csettings.on_body = cb_on_body # <<<<<<<<<<<<<< + * self._csettings.on_message_begin = cb_on_message_begin + * self._csettings.on_message_complete = cb_on_message_complete + */ + __pyx_v_self->_csettings->on_body = __pyx_f_7aiohttp_12_http_parser_cb_on_body; + + /* "aiohttp/_http_parser.pyx":347 + * self._csettings.on_headers_complete = cb_on_headers_complete + * self._csettings.on_body = cb_on_body + * self._csettings.on_message_begin = cb_on_message_begin # <<<<<<<<<<<<<< + * self._csettings.on_message_complete = cb_on_message_complete + * self._csettings.on_chunk_header = cb_on_chunk_header + */ + __pyx_v_self->_csettings->on_message_begin = __pyx_f_7aiohttp_12_http_parser_cb_on_message_begin; + + /* "aiohttp/_http_parser.pyx":348 + * self._csettings.on_body = cb_on_body + * self._csettings.on_message_begin = cb_on_message_begin + * self._csettings.on_message_complete = cb_on_message_complete # <<<<<<<<<<<<<< + * self._csettings.on_chunk_header = cb_on_chunk_header + * self._csettings.on_chunk_complete = cb_on_chunk_complete + */ + __pyx_v_self->_csettings->on_message_complete = __pyx_f_7aiohttp_12_http_parser_cb_on_message_complete; + + /* "aiohttp/_http_parser.pyx":349 + * self._csettings.on_message_begin = cb_on_message_begin + * self._csettings.on_message_complete = cb_on_message_complete + * self._csettings.on_chunk_header = cb_on_chunk_header # <<<<<<<<<<<<<< + * self._csettings.on_chunk_complete = cb_on_chunk_complete + * + */ + __pyx_v_self->_csettings->on_chunk_header = __pyx_f_7aiohttp_12_http_parser_cb_on_chunk_header; + + /* "aiohttp/_http_parser.pyx":350 + * self._csettings.on_message_complete = cb_on_message_complete + * self._csettings.on_chunk_header = cb_on_chunk_header + * self._csettings.on_chunk_complete = cb_on_chunk_complete # <<<<<<<<<<<<<< + * + * self._last_error = None + */ + __pyx_v_self->_csettings->on_chunk_complete = __pyx_f_7aiohttp_12_http_parser_cb_on_chunk_complete; + + /* "aiohttp/_http_parser.pyx":352 + * self._csettings.on_chunk_complete = cb_on_chunk_complete + * + * self._last_error = None # <<<<<<<<<<<<<< + * + * cdef _process_header(self): + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->_last_error); + __Pyx_DECREF(__pyx_v_self->_last_error); + __pyx_v_self->_last_error = Py_None; + + /* "aiohttp/_http_parser.pyx":308 + * PyMem_Free(self._csettings) + * + * cdef _init(self, cparser.http_parser_type mode, # <<<<<<<<<<<<<< + * object protocol, object loop, object timer=None, + * size_t max_line_size=8190, size_t max_headers=32768, + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._init", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":354 + * self._last_error = None + * + * cdef _process_header(self): # <<<<<<<<<<<<<< + * if self._raw_name: + * raw_name = bytes(self._raw_name) + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__process_header(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { + PyObject *__pyx_v_raw_name = NULL; + PyObject *__pyx_v_raw_value = NULL; + PyObject *__pyx_v_name = NULL; + PyObject *__pyx_v_value = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + int __pyx_t_8; + __Pyx_RefNannySetupContext("_process_header", 0); + + /* "aiohttp/_http_parser.pyx":355 + * + * cdef _process_header(self): + * if self._raw_name: # <<<<<<<<<<<<<< + * raw_name = bytes(self._raw_name) + * raw_value = bytes(self._raw_value) + */ + __pyx_t_1 = (__pyx_v_self->_raw_name != Py_None)&&(PyByteArray_GET_SIZE(__pyx_v_self->_raw_name) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_parser.pyx":356 + * cdef _process_header(self): + * if self._raw_name: + * raw_name = bytes(self._raw_name) # <<<<<<<<<<<<<< + * raw_value = bytes(self._raw_value) + * + */ + __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_v_self->_raw_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 356, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_raw_name = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":357 + * if self._raw_name: + * raw_name = bytes(self._raw_name) + * raw_value = bytes(self._raw_value) # <<<<<<<<<<<<<< + * + * name = find_header(raw_name) + */ + __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_v_self->_raw_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 357, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_raw_value = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":359 + * raw_value = bytes(self._raw_value) + * + * name = find_header(raw_name) # <<<<<<<<<<<<<< + * value = raw_value.decode('utf-8', 'surrogateescape') + * + */ + __pyx_t_2 = __pyx_f_7aiohttp_12_http_parser_find_header(__pyx_v_raw_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 359, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_name = __pyx_t_2; + __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":360 + * + * name = find_header(raw_name) + * value = raw_value.decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< + * + * self._headers.add(name, value) + */ + __pyx_t_2 = __Pyx_decode_bytes(__pyx_v_raw_value, 0, PY_SSIZE_T_MAX, NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 360, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_value = __pyx_t_2; + __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":362 + * value = raw_value.decode('utf-8', 'surrogateescape') + * + * self._headers.add(name, value) # <<<<<<<<<<<<<< + * + * if name is CONTENT_ENCODING: + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_headers, __pyx_n_s_add); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 362, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_3)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_name, __pyx_v_value}; + __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 362, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_2); + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_name, __pyx_v_value}; + __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 362, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_2); + } else + #endif + { + __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 362, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (__pyx_t_4) { + __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL; + } + __Pyx_INCREF(__pyx_v_name); + __Pyx_GIVEREF(__pyx_v_name); + PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_name); + __Pyx_INCREF(__pyx_v_value); + __Pyx_GIVEREF(__pyx_v_value); + PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_value); + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 362, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":364 + * self._headers.add(name, value) + * + * if name is CONTENT_ENCODING: # <<<<<<<<<<<<<< + * self._content_encoding = value + * + */ + __pyx_t_1 = (__pyx_v_name == __pyx_v_7aiohttp_12_http_parser_CONTENT_ENCODING); + __pyx_t_7 = (__pyx_t_1 != 0); + if (__pyx_t_7) { + + /* "aiohttp/_http_parser.pyx":365 + * + * if name is CONTENT_ENCODING: + * self._content_encoding = value # <<<<<<<<<<<<<< + * + * PyByteArray_Resize(self._raw_name, 0) + */ + if (!(likely(PyUnicode_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 365, __pyx_L1_error) + __pyx_t_2 = __pyx_v_value; + __Pyx_INCREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_self->_content_encoding); + __Pyx_DECREF(__pyx_v_self->_content_encoding); + __pyx_v_self->_content_encoding = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":364 + * self._headers.add(name, value) + * + * if name is CONTENT_ENCODING: # <<<<<<<<<<<<<< + * self._content_encoding = value + * + */ + } + + /* "aiohttp/_http_parser.pyx":367 + * self._content_encoding = value + * + * PyByteArray_Resize(self._raw_name, 0) # <<<<<<<<<<<<<< + * PyByteArray_Resize(self._raw_value, 0) + * self._has_value = False + */ + __pyx_t_2 = __pyx_v_self->_raw_name; + __Pyx_INCREF(__pyx_t_2); + __pyx_t_5 = PyByteArray_Resize(__pyx_t_2, 0); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 367, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":368 + * + * PyByteArray_Resize(self._raw_name, 0) + * PyByteArray_Resize(self._raw_value, 0) # <<<<<<<<<<<<<< + * self._has_value = False + * self._raw_headers.append((raw_name, raw_value)) + */ + __pyx_t_2 = __pyx_v_self->_raw_value; + __Pyx_INCREF(__pyx_t_2); + __pyx_t_5 = PyByteArray_Resize(__pyx_t_2, 0); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":369 + * PyByteArray_Resize(self._raw_name, 0) + * PyByteArray_Resize(self._raw_value, 0) + * self._has_value = False # <<<<<<<<<<<<<< + * self._raw_headers.append((raw_name, raw_value)) + * + */ + __pyx_v_self->_has_value = 0; + + /* "aiohttp/_http_parser.pyx":370 + * PyByteArray_Resize(self._raw_value, 0) + * self._has_value = False + * self._raw_headers.append((raw_name, raw_value)) # <<<<<<<<<<<<<< + * + * cdef _on_header_field(self, char* at, size_t length): + */ + if (unlikely(__pyx_v_self->_raw_headers == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); + __PYX_ERR(0, 370, __pyx_L1_error) + } + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 370, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_raw_name); + __Pyx_GIVEREF(__pyx_v_raw_name); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_raw_name); + __Pyx_INCREF(__pyx_v_raw_value); + __Pyx_GIVEREF(__pyx_v_raw_value); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_raw_value); + __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_self->_raw_headers, __pyx_t_2); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 370, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":355 + * + * cdef _process_header(self): + * if self._raw_name: # <<<<<<<<<<<<<< + * raw_name = bytes(self._raw_name) + * raw_value = bytes(self._raw_value) + */ + } + + /* "aiohttp/_http_parser.pyx":354 + * self._last_error = None + * + * cdef _process_header(self): # <<<<<<<<<<<<<< + * if self._raw_name: + * raw_name = bytes(self._raw_name) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._process_header", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_raw_name); + __Pyx_XDECREF(__pyx_v_raw_value); + __Pyx_XDECREF(__pyx_v_name); + __Pyx_XDECREF(__pyx_v_value); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":372 + * self._raw_headers.append((raw_name, raw_value)) + * + * cdef _on_header_field(self, char* at, size_t length): # <<<<<<<<<<<<<< + * cdef Py_ssize_t size + * cdef char *buf + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_header_field(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, char *__pyx_v_at, size_t __pyx_v_length) { + Py_ssize_t __pyx_v_size; + char *__pyx_v_buf; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + __Pyx_RefNannySetupContext("_on_header_field", 0); + + /* "aiohttp/_http_parser.pyx":375 + * cdef Py_ssize_t size + * cdef char *buf + * if self._has_value: # <<<<<<<<<<<<<< + * self._process_header() + * + */ + __pyx_t_1 = (__pyx_v_self->_has_value != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_parser.pyx":376 + * cdef char *buf + * if self._has_value: + * self._process_header() # <<<<<<<<<<<<<< + * + * size = PyByteArray_Size(self._raw_name) + */ + __pyx_t_2 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self->__pyx_vtab)->_process_header(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 376, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":375 + * cdef Py_ssize_t size + * cdef char *buf + * if self._has_value: # <<<<<<<<<<<<<< + * self._process_header() + * + */ + } + + /* "aiohttp/_http_parser.pyx":378 + * self._process_header() + * + * size = PyByteArray_Size(self._raw_name) # <<<<<<<<<<<<<< + * PyByteArray_Resize(self._raw_name, size + length) + * buf = PyByteArray_AsString(self._raw_name) + */ + __pyx_t_2 = __pyx_v_self->_raw_name; + __Pyx_INCREF(__pyx_t_2); + __pyx_t_3 = PyByteArray_Size(__pyx_t_2); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 378, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_size = __pyx_t_3; + + /* "aiohttp/_http_parser.pyx":379 + * + * size = PyByteArray_Size(self._raw_name) + * PyByteArray_Resize(self._raw_name, size + length) # <<<<<<<<<<<<<< + * buf = PyByteArray_AsString(self._raw_name) + * memcpy(buf + size, at, length) + */ + __pyx_t_2 = __pyx_v_self->_raw_name; + __Pyx_INCREF(__pyx_t_2); + __pyx_t_4 = PyByteArray_Resize(__pyx_t_2, (__pyx_v_size + __pyx_v_length)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 379, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":380 + * size = PyByteArray_Size(self._raw_name) + * PyByteArray_Resize(self._raw_name, size + length) + * buf = PyByteArray_AsString(self._raw_name) # <<<<<<<<<<<<<< + * memcpy(buf + size, at, length) + * + */ + __pyx_t_2 = __pyx_v_self->_raw_name; + __Pyx_INCREF(__pyx_t_2); + __pyx_v_buf = PyByteArray_AsString(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":381 + * PyByteArray_Resize(self._raw_name, size + length) + * buf = PyByteArray_AsString(self._raw_name) + * memcpy(buf + size, at, length) # <<<<<<<<<<<<<< + * + * cdef _on_header_value(self, char* at, size_t length): + */ + (void)(memcpy((__pyx_v_buf + __pyx_v_size), __pyx_v_at, __pyx_v_length)); + + /* "aiohttp/_http_parser.pyx":372 + * self._raw_headers.append((raw_name, raw_value)) + * + * cdef _on_header_field(self, char* at, size_t length): # <<<<<<<<<<<<<< + * cdef Py_ssize_t size + * cdef char *buf + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._on_header_field", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":383 + * memcpy(buf + size, at, length) + * + * cdef _on_header_value(self, char* at, size_t length): # <<<<<<<<<<<<<< + * cdef Py_ssize_t size + * cdef char *buf + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_header_value(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, char *__pyx_v_at, size_t __pyx_v_length) { + Py_ssize_t __pyx_v_size; + char *__pyx_v_buf; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + int __pyx_t_3; + __Pyx_RefNannySetupContext("_on_header_value", 0); + + /* "aiohttp/_http_parser.pyx":387 + * cdef char *buf + * + * size = PyByteArray_Size(self._raw_value) # <<<<<<<<<<<<<< + * PyByteArray_Resize(self._raw_value, size + length) + * buf = PyByteArray_AsString(self._raw_value) + */ + __pyx_t_1 = __pyx_v_self->_raw_value; + __Pyx_INCREF(__pyx_t_1); + __pyx_t_2 = PyByteArray_Size(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 387, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_size = __pyx_t_2; + + /* "aiohttp/_http_parser.pyx":388 + * + * size = PyByteArray_Size(self._raw_value) + * PyByteArray_Resize(self._raw_value, size + length) # <<<<<<<<<<<<<< + * buf = PyByteArray_AsString(self._raw_value) + * memcpy(buf + size, at, length) + */ + __pyx_t_1 = __pyx_v_self->_raw_value; + __Pyx_INCREF(__pyx_t_1); + __pyx_t_3 = PyByteArray_Resize(__pyx_t_1, (__pyx_v_size + __pyx_v_length)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":389 + * size = PyByteArray_Size(self._raw_value) + * PyByteArray_Resize(self._raw_value, size + length) + * buf = PyByteArray_AsString(self._raw_value) # <<<<<<<<<<<<<< + * memcpy(buf + size, at, length) + * self._has_value = True + */ + __pyx_t_1 = __pyx_v_self->_raw_value; + __Pyx_INCREF(__pyx_t_1); + __pyx_v_buf = PyByteArray_AsString(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":390 + * PyByteArray_Resize(self._raw_value, size + length) + * buf = PyByteArray_AsString(self._raw_value) + * memcpy(buf + size, at, length) # <<<<<<<<<<<<<< + * self._has_value = True + * + */ + (void)(memcpy((__pyx_v_buf + __pyx_v_size), __pyx_v_at, __pyx_v_length)); + + /* "aiohttp/_http_parser.pyx":391 + * buf = PyByteArray_AsString(self._raw_value) + * memcpy(buf + size, at, length) + * self._has_value = True # <<<<<<<<<<<<<< + * + * cdef _on_headers_complete(self): + */ + __pyx_v_self->_has_value = 1; + + /* "aiohttp/_http_parser.pyx":383 + * memcpy(buf + size, at, length) + * + * cdef _on_header_value(self, char* at, size_t length): # <<<<<<<<<<<<<< + * cdef Py_ssize_t size + * cdef char *buf + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._on_header_value", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":393 + * self._has_value = True + * + * cdef _on_headers_complete(self): # <<<<<<<<<<<<<< + * self._process_header() + * + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_headers_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { + PyObject *__pyx_v_method = NULL; + int __pyx_v_should_close; + unsigned int __pyx_v_upgrade; + unsigned int __pyx_v_chunked; + PyObject *__pyx_v_raw_headers = NULL; + PyObject *__pyx_v_headers = NULL; + PyObject *__pyx_v_encoding = NULL; + PyObject *__pyx_v_enc = NULL; + PyObject *__pyx_v_msg = NULL; + PyObject *__pyx_v_payload = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + unsigned int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + __Pyx_RefNannySetupContext("_on_headers_complete", 0); + + /* "aiohttp/_http_parser.pyx":394 + * + * cdef _on_headers_complete(self): + * self._process_header() # <<<<<<<<<<<<<< + * + * method = http_method_str(self._cparser.method) + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self->__pyx_vtab)->_process_header(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 394, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":396 + * self._process_header() + * + * method = http_method_str(self._cparser.method) # <<<<<<<<<<<<<< + * should_close = not cparser.http_should_keep_alive(self._cparser) + * upgrade = self._cparser.upgrade + */ + __pyx_t_1 = __pyx_f_7aiohttp_12_http_parser_http_method_str(__pyx_v_self->_cparser->method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_method = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":397 + * + * method = http_method_str(self._cparser.method) + * should_close = not cparser.http_should_keep_alive(self._cparser) # <<<<<<<<<<<<<< + * upgrade = self._cparser.upgrade + * chunked = self._cparser.flags & cparser.F_CHUNKED + */ + __pyx_v_should_close = (!(http_should_keep_alive(__pyx_v_self->_cparser) != 0)); + + /* "aiohttp/_http_parser.pyx":398 + * method = http_method_str(self._cparser.method) + * should_close = not cparser.http_should_keep_alive(self._cparser) + * upgrade = self._cparser.upgrade # <<<<<<<<<<<<<< + * chunked = self._cparser.flags & cparser.F_CHUNKED + * + */ + __pyx_t_2 = __pyx_v_self->_cparser->upgrade; + __pyx_v_upgrade = __pyx_t_2; + + /* "aiohttp/_http_parser.pyx":399 + * should_close = not cparser.http_should_keep_alive(self._cparser) + * upgrade = self._cparser.upgrade + * chunked = self._cparser.flags & cparser.F_CHUNKED # <<<<<<<<<<<<<< + * + * raw_headers = tuple(self._raw_headers) + */ + __pyx_v_chunked = (__pyx_v_self->_cparser->flags & F_CHUNKED); + + /* "aiohttp/_http_parser.pyx":401 + * chunked = self._cparser.flags & cparser.F_CHUNKED + * + * raw_headers = tuple(self._raw_headers) # <<<<<<<<<<<<<< + * headers = CIMultiDictProxy(self._headers) + * + */ + if (unlikely(__pyx_v_self->_raw_headers == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 401, __pyx_L1_error) + } + __pyx_t_1 = PyList_AsTuple(__pyx_v_self->_raw_headers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_raw_headers = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":402 + * + * raw_headers = tuple(self._raw_headers) + * headers = CIMultiDictProxy(self._headers) # <<<<<<<<<<<<<< + * + * if upgrade or self._cparser.method == 5: # cparser.CONNECT: + */ + __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_CIMultiDictProxy); + __pyx_t_3 = __pyx_v_7aiohttp_12_http_parser_CIMultiDictProxy; __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + } + } + __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_self->_headers) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_self->_headers); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 402, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_headers = __pyx_t_1; + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":404 + * headers = CIMultiDictProxy(self._headers) + * + * if upgrade or self._cparser.method == 5: # cparser.CONNECT: # <<<<<<<<<<<<<< + * self._upgraded = True + * + */ + __pyx_t_6 = (__pyx_v_upgrade != 0); + if (!__pyx_t_6) { + } else { + __pyx_t_5 = __pyx_t_6; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_6 = ((__pyx_v_self->_cparser->method == 5) != 0); + __pyx_t_5 = __pyx_t_6; + __pyx_L4_bool_binop_done:; + if (__pyx_t_5) { + + /* "aiohttp/_http_parser.pyx":405 + * + * if upgrade or self._cparser.method == 5: # cparser.CONNECT: + * self._upgraded = True # <<<<<<<<<<<<<< + * + * # do not support old websocket spec + */ + __pyx_v_self->_upgraded = 1; + + /* "aiohttp/_http_parser.pyx":404 + * headers = CIMultiDictProxy(self._headers) + * + * if upgrade or self._cparser.method == 5: # cparser.CONNECT: # <<<<<<<<<<<<<< + * self._upgraded = True + * + */ + } + + /* "aiohttp/_http_parser.pyx":408 + * + * # do not support old websocket spec + * if SEC_WEBSOCKET_KEY1 in headers: # <<<<<<<<<<<<<< + * raise InvalidHeader(SEC_WEBSOCKET_KEY1) + * + */ + __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_v_7aiohttp_12_http_parser_SEC_WEBSOCKET_KEY1, __pyx_v_headers, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 408, __pyx_L1_error) + __pyx_t_6 = (__pyx_t_5 != 0); + if (unlikely(__pyx_t_6)) { + + /* "aiohttp/_http_parser.pyx":409 + * # do not support old websocket spec + * if SEC_WEBSOCKET_KEY1 in headers: + * raise InvalidHeader(SEC_WEBSOCKET_KEY1) # <<<<<<<<<<<<<< + * + * encoding = None + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InvalidHeader); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + } + } + __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_7aiohttp_12_http_parser_SEC_WEBSOCKET_KEY1) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_7aiohttp_12_http_parser_SEC_WEBSOCKET_KEY1); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 409, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":408 + * + * # do not support old websocket spec + * if SEC_WEBSOCKET_KEY1 in headers: # <<<<<<<<<<<<<< + * raise InvalidHeader(SEC_WEBSOCKET_KEY1) + * + */ + } + + /* "aiohttp/_http_parser.pyx":411 + * raise InvalidHeader(SEC_WEBSOCKET_KEY1) + * + * encoding = None # <<<<<<<<<<<<<< + * enc = self._content_encoding + * if enc is not None: + */ + __Pyx_INCREF(Py_None); + __pyx_v_encoding = Py_None; + + /* "aiohttp/_http_parser.pyx":412 + * + * encoding = None + * enc = self._content_encoding # <<<<<<<<<<<<<< + * if enc is not None: + * self._content_encoding = None + */ + __pyx_t_1 = __pyx_v_self->_content_encoding; + __Pyx_INCREF(__pyx_t_1); + __pyx_v_enc = __pyx_t_1; + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":413 + * encoding = None + * enc = self._content_encoding + * if enc is not None: # <<<<<<<<<<<<<< + * self._content_encoding = None + * enc = enc.lower() + */ + __pyx_t_6 = (__pyx_v_enc != Py_None); + __pyx_t_5 = (__pyx_t_6 != 0); + if (__pyx_t_5) { + + /* "aiohttp/_http_parser.pyx":414 + * enc = self._content_encoding + * if enc is not None: + * self._content_encoding = None # <<<<<<<<<<<<<< + * enc = enc.lower() + * if enc in ('gzip', 'deflate', 'br'): + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->_content_encoding); + __Pyx_DECREF(__pyx_v_self->_content_encoding); + __pyx_v_self->_content_encoding = ((PyObject*)Py_None); + + /* "aiohttp/_http_parser.pyx":415 + * if enc is not None: + * self._content_encoding = None + * enc = enc.lower() # <<<<<<<<<<<<<< + * if enc in ('gzip', 'deflate', 'br'): + * encoding = enc + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_enc, __pyx_n_s_lower); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + } + } + __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF_SET(__pyx_v_enc, __pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":416 + * self._content_encoding = None + * enc = enc.lower() + * if enc in ('gzip', 'deflate', 'br'): # <<<<<<<<<<<<<< + * encoding = enc + * + */ + __Pyx_INCREF(__pyx_v_enc); + __pyx_t_1 = __pyx_v_enc; + __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_gzip, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 416, __pyx_L1_error) + if (!__pyx_t_6) { + } else { + __pyx_t_5 = __pyx_t_6; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_deflate, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 416, __pyx_L1_error) + if (!__pyx_t_6) { + } else { + __pyx_t_5 = __pyx_t_6; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_br, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 416, __pyx_L1_error) + __pyx_t_5 = __pyx_t_6; + __pyx_L9_bool_binop_done:; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_6 = (__pyx_t_5 != 0); + if (__pyx_t_6) { + + /* "aiohttp/_http_parser.pyx":417 + * enc = enc.lower() + * if enc in ('gzip', 'deflate', 'br'): + * encoding = enc # <<<<<<<<<<<<<< + * + * if self._cparser.type == cparser.HTTP_REQUEST: + */ + __Pyx_INCREF(__pyx_v_enc); + __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_v_enc); + + /* "aiohttp/_http_parser.pyx":416 + * self._content_encoding = None + * enc = enc.lower() + * if enc in ('gzip', 'deflate', 'br'): # <<<<<<<<<<<<<< + * encoding = enc + * + */ + } + + /* "aiohttp/_http_parser.pyx":413 + * encoding = None + * enc = self._content_encoding + * if enc is not None: # <<<<<<<<<<<<<< + * self._content_encoding = None + * enc = enc.lower() + */ + } + + /* "aiohttp/_http_parser.pyx":419 + * encoding = enc + * + * if self._cparser.type == cparser.HTTP_REQUEST: # <<<<<<<<<<<<<< + * msg = _new_request_message( + * method, self._path, + */ + __pyx_t_6 = ((__pyx_v_self->_cparser->type == HTTP_REQUEST) != 0); + if (__pyx_t_6) { + + /* "aiohttp/_http_parser.pyx":421 + * if self._cparser.type == cparser.HTTP_REQUEST: + * msg = _new_request_message( + * method, self._path, # <<<<<<<<<<<<<< + * self.http_version(), headers, raw_headers, + * should_close, encoding, upgrade, chunked, self._url) + */ + __pyx_t_1 = __pyx_v_self->_path; + __Pyx_INCREF(__pyx_t_1); + + /* "aiohttp/_http_parser.pyx":422 + * msg = _new_request_message( + * method, self._path, + * self.http_version(), headers, raw_headers, # <<<<<<<<<<<<<< + * should_close, encoding, upgrade, chunked, self._url) + * else: + */ + __pyx_t_3 = __pyx_f_7aiohttp_12_http_parser_10HttpParser_http_version(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "aiohttp/_http_parser.pyx":423 + * method, self._path, + * self.http_version(), headers, raw_headers, + * should_close, encoding, upgrade, chunked, self._url) # <<<<<<<<<<<<<< + * else: + * msg = _new_response_message( + */ + __pyx_t_4 = __pyx_v_self->_url; + __Pyx_INCREF(__pyx_t_4); + + /* "aiohttp/_http_parser.pyx":420 + * + * if self._cparser.type == cparser.HTTP_REQUEST: + * msg = _new_request_message( # <<<<<<<<<<<<<< + * method, self._path, + * self.http_version(), headers, raw_headers, + */ + __pyx_t_7 = __pyx_f_7aiohttp_12_http_parser__new_request_message(__pyx_v_method, ((PyObject*)__pyx_t_1), __pyx_t_3, __pyx_v_headers, __pyx_v_raw_headers, __pyx_v_should_close, __pyx_v_encoding, __pyx_v_upgrade, __pyx_v_chunked, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_msg = __pyx_t_7; + __pyx_t_7 = 0; + + /* "aiohttp/_http_parser.pyx":419 + * encoding = enc + * + * if self._cparser.type == cparser.HTTP_REQUEST: # <<<<<<<<<<<<<< + * msg = _new_request_message( + * method, self._path, + */ + goto __pyx_L12; + } + + /* "aiohttp/_http_parser.pyx":425 + * should_close, encoding, upgrade, chunked, self._url) + * else: + * msg = _new_response_message( # <<<<<<<<<<<<<< + * self.http_version(), self._cparser.status_code, self._reason, + * headers, raw_headers, should_close, encoding, + */ + /*else*/ { + + /* "aiohttp/_http_parser.pyx":426 + * else: + * msg = _new_response_message( + * self.http_version(), self._cparser.status_code, self._reason, # <<<<<<<<<<<<<< + * headers, raw_headers, should_close, encoding, + * upgrade, chunked) + */ + __pyx_t_7 = __pyx_f_7aiohttp_12_http_parser_10HttpParser_http_version(__pyx_v_self); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = __pyx_v_self->_reason; + __Pyx_INCREF(__pyx_t_4); + + /* "aiohttp/_http_parser.pyx":425 + * should_close, encoding, upgrade, chunked, self._url) + * else: + * msg = _new_response_message( # <<<<<<<<<<<<<< + * self.http_version(), self._cparser.status_code, self._reason, + * headers, raw_headers, should_close, encoding, + */ + __pyx_t_3 = __pyx_f_7aiohttp_12_http_parser__new_response_message(__pyx_t_7, __pyx_v_self->_cparser->status_code, ((PyObject*)__pyx_t_4), __pyx_v_headers, __pyx_v_raw_headers, __pyx_v_should_close, __pyx_v_encoding, __pyx_v_upgrade, __pyx_v_chunked); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_msg = __pyx_t_3; + __pyx_t_3 = 0; + } + __pyx_L12:; + + /* "aiohttp/_http_parser.pyx":430 + * upgrade, chunked) + * + * if (self._cparser.content_length > 0 or chunked or # <<<<<<<<<<<<<< + * self._cparser.method == 5): # CONNECT: 5 + * payload = StreamReader( + */ + __pyx_t_5 = ((__pyx_v_self->_cparser->content_length > 0) != 0); + if (!__pyx_t_5) { + } else { + __pyx_t_6 = __pyx_t_5; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_chunked != 0); + if (!__pyx_t_5) { + } else { + __pyx_t_6 = __pyx_t_5; + goto __pyx_L14_bool_binop_done; + } + + /* "aiohttp/_http_parser.pyx":431 + * + * if (self._cparser.content_length > 0 or chunked or + * self._cparser.method == 5): # CONNECT: 5 # <<<<<<<<<<<<<< + * payload = StreamReader( + * self._protocol, timer=self._timer, loop=self._loop) + */ + __pyx_t_5 = ((__pyx_v_self->_cparser->method == 5) != 0); + __pyx_t_6 = __pyx_t_5; + __pyx_L14_bool_binop_done:; + + /* "aiohttp/_http_parser.pyx":430 + * upgrade, chunked) + * + * if (self._cparser.content_length > 0 or chunked or # <<<<<<<<<<<<<< + * self._cparser.method == 5): # CONNECT: 5 + * payload = StreamReader( + */ + if (__pyx_t_6) { + + /* "aiohttp/_http_parser.pyx":432 + * if (self._cparser.content_length > 0 or chunked or + * self._cparser.method == 5): # CONNECT: 5 + * payload = StreamReader( # <<<<<<<<<<<<<< + * self._protocol, timer=self._timer, loop=self._loop) + * else: + */ + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 432, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_self->_protocol); + __Pyx_GIVEREF(__pyx_v_self->_protocol); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_self->_protocol); + + /* "aiohttp/_http_parser.pyx":433 + * self._cparser.method == 5): # CONNECT: 5 + * payload = StreamReader( + * self._protocol, timer=self._timer, loop=self._loop) # <<<<<<<<<<<<<< + * else: + * payload = EMPTY_PAYLOAD + */ + __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_timer, __pyx_v_self->_timer) < 0) __PYX_ERR(0, 433, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_loop, __pyx_v_self->_loop) < 0) __PYX_ERR(0, 433, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":432 + * if (self._cparser.content_length > 0 or chunked or + * self._cparser.method == 5): # CONNECT: 5 + * payload = StreamReader( # <<<<<<<<<<<<<< + * self._protocol, timer=self._timer, loop=self._loop) + * else: + */ + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_7aiohttp_12_http_parser_StreamReader, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 432, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_payload = __pyx_t_7; + __pyx_t_7 = 0; + + /* "aiohttp/_http_parser.pyx":430 + * upgrade, chunked) + * + * if (self._cparser.content_length > 0 or chunked or # <<<<<<<<<<<<<< + * self._cparser.method == 5): # CONNECT: 5 + * payload = StreamReader( + */ + goto __pyx_L13; + } + + /* "aiohttp/_http_parser.pyx":435 + * self._protocol, timer=self._timer, loop=self._loop) + * else: + * payload = EMPTY_PAYLOAD # <<<<<<<<<<<<<< + * + * self._payload = payload + */ + /*else*/ { + __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD); + __pyx_v_payload = __pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD; + } + __pyx_L13:; + + /* "aiohttp/_http_parser.pyx":437 + * payload = EMPTY_PAYLOAD + * + * self._payload = payload # <<<<<<<<<<<<<< + * if encoding is not None and self._auto_decompress: + * self._payload = DeflateBuffer(payload, encoding) + */ + __Pyx_INCREF(__pyx_v_payload); + __Pyx_GIVEREF(__pyx_v_payload); + __Pyx_GOTREF(__pyx_v_self->_payload); + __Pyx_DECREF(__pyx_v_self->_payload); + __pyx_v_self->_payload = __pyx_v_payload; + + /* "aiohttp/_http_parser.pyx":438 + * + * self._payload = payload + * if encoding is not None and self._auto_decompress: # <<<<<<<<<<<<<< + * self._payload = DeflateBuffer(payload, encoding) + * + */ + __pyx_t_5 = (__pyx_v_encoding != Py_None); + __pyx_t_8 = (__pyx_t_5 != 0); + if (__pyx_t_8) { + } else { + __pyx_t_6 = __pyx_t_8; + goto __pyx_L18_bool_binop_done; + } + __pyx_t_8 = (__pyx_v_self->_auto_decompress != 0); + __pyx_t_6 = __pyx_t_8; + __pyx_L18_bool_binop_done:; + if (__pyx_t_6) { + + /* "aiohttp/_http_parser.pyx":439 + * self._payload = payload + * if encoding is not None and self._auto_decompress: + * self._payload = DeflateBuffer(payload, encoding) # <<<<<<<<<<<<<< + * + * if not self._response_with_body: + */ + __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_DeflateBuffer); + __pyx_t_4 = __pyx_v_7aiohttp_12_http_parser_DeflateBuffer; __pyx_t_3 = NULL; + __pyx_t_9 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_9 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_4)) { + PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_payload, __pyx_v_encoding}; + __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GOTREF(__pyx_t_7); + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { + PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_payload, __pyx_v_encoding}; + __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GOTREF(__pyx_t_7); + } else + #endif + { + __pyx_t_1 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__pyx_t_3) { + __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __pyx_t_3 = NULL; + } + __Pyx_INCREF(__pyx_v_payload); + __Pyx_GIVEREF(__pyx_v_payload); + PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_9, __pyx_v_payload); + __Pyx_INCREF(__pyx_v_encoding); + __Pyx_GIVEREF(__pyx_v_encoding); + PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_9, __pyx_v_encoding); + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GIVEREF(__pyx_t_7); + __Pyx_GOTREF(__pyx_v_self->_payload); + __Pyx_DECREF(__pyx_v_self->_payload); + __pyx_v_self->_payload = __pyx_t_7; + __pyx_t_7 = 0; + + /* "aiohttp/_http_parser.pyx":438 + * + * self._payload = payload + * if encoding is not None and self._auto_decompress: # <<<<<<<<<<<<<< + * self._payload = DeflateBuffer(payload, encoding) + * + */ + } + + /* "aiohttp/_http_parser.pyx":441 + * self._payload = DeflateBuffer(payload, encoding) + * + * if not self._response_with_body: # <<<<<<<<<<<<<< + * payload = EMPTY_PAYLOAD + * + */ + __pyx_t_6 = ((!(__pyx_v_self->_response_with_body != 0)) != 0); + if (__pyx_t_6) { + + /* "aiohttp/_http_parser.pyx":442 + * + * if not self._response_with_body: + * payload = EMPTY_PAYLOAD # <<<<<<<<<<<<<< + * + * self._messages.append((msg, payload)) + */ + __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD); + __Pyx_DECREF_SET(__pyx_v_payload, __pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD); + + /* "aiohttp/_http_parser.pyx":441 + * self._payload = DeflateBuffer(payload, encoding) + * + * if not self._response_with_body: # <<<<<<<<<<<<<< + * payload = EMPTY_PAYLOAD + * + */ + } + + /* "aiohttp/_http_parser.pyx":444 + * payload = EMPTY_PAYLOAD + * + * self._messages.append((msg, payload)) # <<<<<<<<<<<<<< + * + * cdef _on_message_complete(self): + */ + if (unlikely(__pyx_v_self->_messages == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); + __PYX_ERR(0, 444, __pyx_L1_error) + } + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 444, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v_msg); + __Pyx_GIVEREF(__pyx_v_msg); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_msg); + __Pyx_INCREF(__pyx_v_payload); + __Pyx_GIVEREF(__pyx_v_payload); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_payload); + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_self->_messages, __pyx_t_7); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 444, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "aiohttp/_http_parser.pyx":393 + * self._has_value = True + * + * cdef _on_headers_complete(self): # <<<<<<<<<<<<<< + * self._process_header() + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._on_headers_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_method); + __Pyx_XDECREF(__pyx_v_raw_headers); + __Pyx_XDECREF(__pyx_v_headers); + __Pyx_XDECREF(__pyx_v_encoding); + __Pyx_XDECREF(__pyx_v_enc); + __Pyx_XDECREF(__pyx_v_msg); + __Pyx_XDECREF(__pyx_v_payload); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":446 + * self._messages.append((msg, payload)) + * + * cdef _on_message_complete(self): # <<<<<<<<<<<<<< + * self._payload.feed_eof() + * self._payload = None + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_message_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_RefNannySetupContext("_on_message_complete", 0); + + /* "aiohttp/_http_parser.pyx":447 + * + * cdef _on_message_complete(self): + * self._payload.feed_eof() # <<<<<<<<<<<<<< + * self._payload = None + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_payload, __pyx_n_s_feed_eof); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":448 + * cdef _on_message_complete(self): + * self._payload.feed_eof() + * self._payload = None # <<<<<<<<<<<<<< + * + * cdef _on_chunk_header(self): + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->_payload); + __Pyx_DECREF(__pyx_v_self->_payload); + __pyx_v_self->_payload = Py_None; + + /* "aiohttp/_http_parser.pyx":446 + * self._messages.append((msg, payload)) + * + * cdef _on_message_complete(self): # <<<<<<<<<<<<<< + * self._payload.feed_eof() + * self._payload = None + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._on_message_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":450 + * self._payload = None + * + * cdef _on_chunk_header(self): # <<<<<<<<<<<<<< + * self._payload.begin_http_chunk_receiving() + * + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_chunk_header(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_RefNannySetupContext("_on_chunk_header", 0); + + /* "aiohttp/_http_parser.pyx":451 + * + * cdef _on_chunk_header(self): + * self._payload.begin_http_chunk_receiving() # <<<<<<<<<<<<<< + * + * cdef _on_chunk_complete(self): + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_payload, __pyx_n_s_begin_http_chunk_receiving); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 451, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 451, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":450 + * self._payload = None + * + * cdef _on_chunk_header(self): # <<<<<<<<<<<<<< + * self._payload.begin_http_chunk_receiving() + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._on_chunk_header", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":453 + * self._payload.begin_http_chunk_receiving() + * + * cdef _on_chunk_complete(self): # <<<<<<<<<<<<<< + * self._payload.end_http_chunk_receiving() + * + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_chunk_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_RefNannySetupContext("_on_chunk_complete", 0); + + /* "aiohttp/_http_parser.pyx":454 + * + * cdef _on_chunk_complete(self): + * self._payload.end_http_chunk_receiving() # <<<<<<<<<<<<<< + * + * cdef object _on_status_complete(self): + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_payload, __pyx_n_s_end_http_chunk_receiving); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 454, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 454, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":453 + * self._payload.begin_http_chunk_receiving() + * + * cdef _on_chunk_complete(self): # <<<<<<<<<<<<<< + * self._payload.end_http_chunk_receiving() + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._on_chunk_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":456 + * self._payload.end_http_chunk_receiving() + * + * cdef object _on_status_complete(self): # <<<<<<<<<<<<<< + * pass + * + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_status_complete(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_on_status_complete", 0); + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":459 + * pass + * + * cdef inline http_version(self): # <<<<<<<<<<<<<< + * cdef cparser.http_parser* parser = self._cparser + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser_http_version(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { + struct http_parser *__pyx_v_parser; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + struct http_parser *__pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + __Pyx_RefNannySetupContext("http_version", 0); + + /* "aiohttp/_http_parser.pyx":460 + * + * cdef inline http_version(self): + * cdef cparser.http_parser* parser = self._cparser # <<<<<<<<<<<<<< + * + * if parser.http_major == 1: + */ + __pyx_t_1 = __pyx_v_self->_cparser; + __pyx_v_parser = __pyx_t_1; + + /* "aiohttp/_http_parser.pyx":462 + * cdef cparser.http_parser* parser = self._cparser + * + * if parser.http_major == 1: # <<<<<<<<<<<<<< + * if parser.http_minor == 0: + * return HttpVersion10 + */ + __pyx_t_2 = ((__pyx_v_parser->http_major == 1) != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_parser.pyx":463 + * + * if parser.http_major == 1: + * if parser.http_minor == 0: # <<<<<<<<<<<<<< + * return HttpVersion10 + * elif parser.http_minor == 1: + */ + switch (__pyx_v_parser->http_minor) { + case 0: + + /* "aiohttp/_http_parser.pyx":464 + * if parser.http_major == 1: + * if parser.http_minor == 0: + * return HttpVersion10 # <<<<<<<<<<<<<< + * elif parser.http_minor == 1: + * return HttpVersion11 + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_HttpVersion10); + __pyx_r = __pyx_v_7aiohttp_12_http_parser_HttpVersion10; + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":463 + * + * if parser.http_major == 1: + * if parser.http_minor == 0: # <<<<<<<<<<<<<< + * return HttpVersion10 + * elif parser.http_minor == 1: + */ + break; + case 1: + + /* "aiohttp/_http_parser.pyx":466 + * return HttpVersion10 + * elif parser.http_minor == 1: + * return HttpVersion11 # <<<<<<<<<<<<<< + * + * return HttpVersion(parser.http_major, parser.http_minor) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_HttpVersion11); + __pyx_r = __pyx_v_7aiohttp_12_http_parser_HttpVersion11; + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":465 + * if parser.http_minor == 0: + * return HttpVersion10 + * elif parser.http_minor == 1: # <<<<<<<<<<<<<< + * return HttpVersion11 + * + */ + break; + default: break; + } + + /* "aiohttp/_http_parser.pyx":462 + * cdef cparser.http_parser* parser = self._cparser + * + * if parser.http_major == 1: # <<<<<<<<<<<<<< + * if parser.http_minor == 0: + * return HttpVersion10 + */ + } + + /* "aiohttp/_http_parser.pyx":468 + * return HttpVersion11 + * + * return HttpVersion(parser.http_major, parser.http_minor) # <<<<<<<<<<<<<< + * + * ### Public API ### + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = __Pyx_PyInt_From_unsigned_short(__pyx_v_parser->http_major); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 468, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyInt_From_unsigned_short(__pyx_v_parser->http_minor); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 468, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_HttpVersion); + __pyx_t_6 = __pyx_v_7aiohttp_12_http_parser_HttpVersion; __pyx_t_7 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_4, __pyx_t_5}; + __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 468, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_4, __pyx_t_5}; + __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 468, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } else + #endif + { + __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 468, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + if (__pyx_t_7) { + __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; + } + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_5); + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 468, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":459 + * pass + * + * cdef inline http_version(self): # <<<<<<<<<<<<<< + * cdef cparser.http_parser* parser = self._cparser + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("aiohttp._http_parser.HttpParser.http_version", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":472 + * ### Public API ### + * + * def feed_eof(self): # <<<<<<<<<<<<<< + * cdef bytes desc + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_5feed_eof(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_5feed_eof(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("feed_eof (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_10HttpParser_4feed_eof(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_10HttpParser_4feed_eof(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { + PyObject *__pyx_v_desc = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + __Pyx_RefNannySetupContext("feed_eof", 0); + + /* "aiohttp/_http_parser.pyx":475 + * cdef bytes desc + * + * if self._payload is not None: # <<<<<<<<<<<<<< + * if self._cparser.flags & cparser.F_CHUNKED: + * raise TransferEncodingError( + */ + __pyx_t_1 = (__pyx_v_self->_payload != Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_parser.pyx":476 + * + * if self._payload is not None: + * if self._cparser.flags & cparser.F_CHUNKED: # <<<<<<<<<<<<<< + * raise TransferEncodingError( + * "Not enough data for satisfy transfer length header.") + */ + __pyx_t_2 = ((__pyx_v_self->_cparser->flags & F_CHUNKED) != 0); + if (unlikely(__pyx_t_2)) { + + /* "aiohttp/_http_parser.pyx":477 + * if self._payload is not None: + * if self._cparser.flags & cparser.F_CHUNKED: + * raise TransferEncodingError( # <<<<<<<<<<<<<< + * "Not enough data for satisfy transfer length header.") + * elif self._cparser.flags & cparser.F_CONTENTLENGTH: + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_TransferEncodingError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_kp_u_Not_enough_data_for_satisfy_tran) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_u_Not_enough_data_for_satisfy_tran); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(0, 477, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":476 + * + * if self._payload is not None: + * if self._cparser.flags & cparser.F_CHUNKED: # <<<<<<<<<<<<<< + * raise TransferEncodingError( + * "Not enough data for satisfy transfer length header.") + */ + } + + /* "aiohttp/_http_parser.pyx":479 + * raise TransferEncodingError( + * "Not enough data for satisfy transfer length header.") + * elif self._cparser.flags & cparser.F_CONTENTLENGTH: # <<<<<<<<<<<<<< + * raise ContentLengthError( + * "Not enough data for satisfy content length header.") + */ + __pyx_t_2 = ((__pyx_v_self->_cparser->flags & F_CONTENTLENGTH) != 0); + if (unlikely(__pyx_t_2)) { + + /* "aiohttp/_http_parser.pyx":480 + * "Not enough data for satisfy transfer length header.") + * elif self._cparser.flags & cparser.F_CONTENTLENGTH: + * raise ContentLengthError( # <<<<<<<<<<<<<< + * "Not enough data for satisfy content length header.") + * elif self._cparser.http_errno != cparser.HPE_OK: + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ContentLengthError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 480, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_kp_u_Not_enough_data_for_satisfy_cont) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_u_Not_enough_data_for_satisfy_cont); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 480, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(0, 480, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":479 + * raise TransferEncodingError( + * "Not enough data for satisfy transfer length header.") + * elif self._cparser.flags & cparser.F_CONTENTLENGTH: # <<<<<<<<<<<<<< + * raise ContentLengthError( + * "Not enough data for satisfy content length header.") + */ + } + + /* "aiohttp/_http_parser.pyx":482 + * raise ContentLengthError( + * "Not enough data for satisfy content length header.") + * elif self._cparser.http_errno != cparser.HPE_OK: # <<<<<<<<<<<<<< + * desc = cparser.http_errno_description( + * self._cparser.http_errno) + */ + __pyx_t_2 = ((__pyx_v_self->_cparser->http_errno != HPE_OK) != 0); + if (unlikely(__pyx_t_2)) { + + /* "aiohttp/_http_parser.pyx":483 + * "Not enough data for satisfy content length header.") + * elif self._cparser.http_errno != cparser.HPE_OK: + * desc = cparser.http_errno_description( # <<<<<<<<<<<<<< + * self._cparser.http_errno) + * raise PayloadEncodingError(desc.decode('latin-1')) + */ + __pyx_t_3 = __Pyx_PyBytes_FromString(http_errno_description(((enum http_errno)__pyx_v_self->_cparser->http_errno))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 483, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_desc = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":485 + * desc = cparser.http_errno_description( + * self._cparser.http_errno) + * raise PayloadEncodingError(desc.decode('latin-1')) # <<<<<<<<<<<<<< + * else: + * self._payload.feed_eof() + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_PayloadEncodingError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 485, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_decode_bytes(__pyx_v_desc, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 485, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 485, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(0, 485, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":482 + * raise ContentLengthError( + * "Not enough data for satisfy content length header.") + * elif self._cparser.http_errno != cparser.HPE_OK: # <<<<<<<<<<<<<< + * desc = cparser.http_errno_description( + * self._cparser.http_errno) + */ + } + + /* "aiohttp/_http_parser.pyx":487 + * raise PayloadEncodingError(desc.decode('latin-1')) + * else: + * self._payload.feed_eof() # <<<<<<<<<<<<<< + * elif self._started: + * self._on_headers_complete() + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_payload, __pyx_n_s_feed_eof); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + + /* "aiohttp/_http_parser.pyx":475 + * cdef bytes desc + * + * if self._payload is not None: # <<<<<<<<<<<<<< + * if self._cparser.flags & cparser.F_CHUNKED: + * raise TransferEncodingError( + */ + goto __pyx_L3; + } + + /* "aiohttp/_http_parser.pyx":488 + * else: + * self._payload.feed_eof() + * elif self._started: # <<<<<<<<<<<<<< + * self._on_headers_complete() + * if self._messages: + */ + __pyx_t_2 = (__pyx_v_self->_started != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_parser.pyx":489 + * self._payload.feed_eof() + * elif self._started: + * self._on_headers_complete() # <<<<<<<<<<<<<< + * if self._messages: + * return self._messages[-1][0] + */ + __pyx_t_3 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self->__pyx_vtab)->_on_headers_complete(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 489, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":490 + * elif self._started: + * self._on_headers_complete() + * if self._messages: # <<<<<<<<<<<<<< + * return self._messages[-1][0] + * + */ + __pyx_t_2 = (__pyx_v_self->_messages != Py_None)&&(PyList_GET_SIZE(__pyx_v_self->_messages) != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_parser.pyx":491 + * self._on_headers_complete() + * if self._messages: + * return self._messages[-1][0] # <<<<<<<<<<<<<< + * + * def feed_data(self, data): + */ + __Pyx_XDECREF(__pyx_r); + if (unlikely(__pyx_v_self->_messages == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 491, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_GetItemInt_List(__pyx_v_self->_messages, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":490 + * elif self._started: + * self._on_headers_complete() + * if self._messages: # <<<<<<<<<<<<<< + * return self._messages[-1][0] + * + */ + } + + /* "aiohttp/_http_parser.pyx":488 + * else: + * self._payload.feed_eof() + * elif self._started: # <<<<<<<<<<<<<< + * self._on_headers_complete() + * if self._messages: + */ + } + __pyx_L3:; + + /* "aiohttp/_http_parser.pyx":472 + * ### Public API ### + * + * def feed_eof(self): # <<<<<<<<<<<<<< + * cdef bytes desc + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("aiohttp._http_parser.HttpParser.feed_eof", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_desc); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":493 + * return self._messages[-1][0] + * + * def feed_data(self, data): # <<<<<<<<<<<<<< + * cdef: + * size_t data_len + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_7feed_data(PyObject *__pyx_v_self, PyObject *__pyx_v_data); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_7feed_data(PyObject *__pyx_v_self, PyObject *__pyx_v_data) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("feed_data (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_10HttpParser_6feed_data(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self), ((PyObject *)__pyx_v_data)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_10HttpParser_6feed_data(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, PyObject *__pyx_v_data) { + size_t __pyx_v_data_len; + size_t __pyx_v_nb; + PyObject *__pyx_v_ex = NULL; + PyObject *__pyx_v_messages = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + __Pyx_RefNannySetupContext("feed_data", 0); + + /* "aiohttp/_http_parser.pyx":498 + * size_t nb + * + * PyObject_GetBuffer(data, &self.py_buf, PyBUF_SIMPLE) # <<<<<<<<<<<<<< + * data_len = self.py_buf.len + * + */ + __pyx_t_1 = PyObject_GetBuffer(__pyx_v_data, (&__pyx_v_self->py_buf), PyBUF_SIMPLE); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 498, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":499 + * + * PyObject_GetBuffer(data, &self.py_buf, PyBUF_SIMPLE) + * data_len = self.py_buf.len # <<<<<<<<<<<<<< + * + * nb = cparser.http_parser_execute( + */ + __pyx_v_data_len = ((size_t)__pyx_v_self->py_buf.len); + + /* "aiohttp/_http_parser.pyx":501 + * data_len = self.py_buf.len + * + * nb = cparser.http_parser_execute( # <<<<<<<<<<<<<< + * self._cparser, + * self._csettings, + */ + __pyx_v_nb = http_parser_execute(__pyx_v_self->_cparser, __pyx_v_self->_csettings, ((char *)__pyx_v_self->py_buf.buf), __pyx_v_data_len); + + /* "aiohttp/_http_parser.pyx":507 + * data_len) + * + * PyBuffer_Release(&self.py_buf) # <<<<<<<<<<<<<< + * + * # i am not sure about cparser.HPE_INVALID_METHOD, + */ + PyBuffer_Release((&__pyx_v_self->py_buf)); + + /* "aiohttp/_http_parser.pyx":512 + * # seems get err for valid request + * # test_client_functional.py::test_post_data_with_bytesio_file + * if (self._cparser.http_errno != cparser.HPE_OK and # <<<<<<<<<<<<<< + * (self._cparser.http_errno != cparser.HPE_INVALID_METHOD or + * self._cparser.method == 0)): + */ + __pyx_t_3 = ((__pyx_v_self->_cparser->http_errno != HPE_OK) != 0); + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + + /* "aiohttp/_http_parser.pyx":513 + * # test_client_functional.py::test_post_data_with_bytesio_file + * if (self._cparser.http_errno != cparser.HPE_OK and + * (self._cparser.http_errno != cparser.HPE_INVALID_METHOD or # <<<<<<<<<<<<<< + * self._cparser.method == 0)): + * if self._payload_error == 0: + */ + __pyx_t_3 = ((__pyx_v_self->_cparser->http_errno != HPE_INVALID_METHOD) != 0); + if (!__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + + /* "aiohttp/_http_parser.pyx":514 + * if (self._cparser.http_errno != cparser.HPE_OK and + * (self._cparser.http_errno != cparser.HPE_INVALID_METHOD or + * self._cparser.method == 0)): # <<<<<<<<<<<<<< + * if self._payload_error == 0: + * if self._last_error is not None: + */ + __pyx_t_3 = ((__pyx_v_self->_cparser->method == 0) != 0); + __pyx_t_2 = __pyx_t_3; + __pyx_L4_bool_binop_done:; + + /* "aiohttp/_http_parser.pyx":512 + * # seems get err for valid request + * # test_client_functional.py::test_post_data_with_bytesio_file + * if (self._cparser.http_errno != cparser.HPE_OK and # <<<<<<<<<<<<<< + * (self._cparser.http_errno != cparser.HPE_INVALID_METHOD or + * self._cparser.method == 0)): + */ + if (__pyx_t_2) { + + /* "aiohttp/_http_parser.pyx":515 + * (self._cparser.http_errno != cparser.HPE_INVALID_METHOD or + * self._cparser.method == 0)): + * if self._payload_error == 0: # <<<<<<<<<<<<<< + * if self._last_error is not None: + * ex = self._last_error + */ + __pyx_t_2 = ((__pyx_v_self->_payload_error == 0) != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_parser.pyx":516 + * self._cparser.method == 0)): + * if self._payload_error == 0: + * if self._last_error is not None: # <<<<<<<<<<<<<< + * ex = self._last_error + * self._last_error = None + */ + __pyx_t_2 = (__pyx_v_self->_last_error != Py_None); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "aiohttp/_http_parser.pyx":517 + * if self._payload_error == 0: + * if self._last_error is not None: + * ex = self._last_error # <<<<<<<<<<<<<< + * self._last_error = None + * else: + */ + __pyx_t_4 = __pyx_v_self->_last_error; + __Pyx_INCREF(__pyx_t_4); + __pyx_v_ex = __pyx_t_4; + __pyx_t_4 = 0; + + /* "aiohttp/_http_parser.pyx":518 + * if self._last_error is not None: + * ex = self._last_error + * self._last_error = None # <<<<<<<<<<<<<< + * else: + * ex = parser_error_from_errno( + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->_last_error); + __Pyx_DECREF(__pyx_v_self->_last_error); + __pyx_v_self->_last_error = Py_None; + + /* "aiohttp/_http_parser.pyx":516 + * self._cparser.method == 0)): + * if self._payload_error == 0: + * if self._last_error is not None: # <<<<<<<<<<<<<< + * ex = self._last_error + * self._last_error = None + */ + goto __pyx_L8; + } + + /* "aiohttp/_http_parser.pyx":520 + * self._last_error = None + * else: + * ex = parser_error_from_errno( # <<<<<<<<<<<<<< + * self._cparser.http_errno) + * self._payload = None + */ + /*else*/ { + + /* "aiohttp/_http_parser.pyx":521 + * else: + * ex = parser_error_from_errno( + * self._cparser.http_errno) # <<<<<<<<<<<<<< + * self._payload = None + * raise ex + */ + __pyx_t_4 = __pyx_f_7aiohttp_12_http_parser_parser_error_from_errno(((enum http_errno)__pyx_v_self->_cparser->http_errno)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_v_ex = __pyx_t_4; + __pyx_t_4 = 0; + } + __pyx_L8:; + + /* "aiohttp/_http_parser.pyx":522 + * ex = parser_error_from_errno( + * self._cparser.http_errno) + * self._payload = None # <<<<<<<<<<<<<< + * raise ex + * + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->_payload); + __Pyx_DECREF(__pyx_v_self->_payload); + __pyx_v_self->_payload = Py_None; + + /* "aiohttp/_http_parser.pyx":523 + * self._cparser.http_errno) + * self._payload = None + * raise ex # <<<<<<<<<<<<<< + * + * if self._messages: + */ + __Pyx_Raise(__pyx_v_ex, 0, 0, 0); + __PYX_ERR(0, 523, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":515 + * (self._cparser.http_errno != cparser.HPE_INVALID_METHOD or + * self._cparser.method == 0)): + * if self._payload_error == 0: # <<<<<<<<<<<<<< + * if self._last_error is not None: + * ex = self._last_error + */ + } + + /* "aiohttp/_http_parser.pyx":512 + * # seems get err for valid request + * # test_client_functional.py::test_post_data_with_bytesio_file + * if (self._cparser.http_errno != cparser.HPE_OK and # <<<<<<<<<<<<<< + * (self._cparser.http_errno != cparser.HPE_INVALID_METHOD or + * self._cparser.method == 0)): + */ + } + + /* "aiohttp/_http_parser.pyx":525 + * raise ex + * + * if self._messages: # <<<<<<<<<<<<<< + * messages = self._messages + * self._messages = [] + */ + __pyx_t_3 = (__pyx_v_self->_messages != Py_None)&&(PyList_GET_SIZE(__pyx_v_self->_messages) != 0); + if (__pyx_t_3) { + + /* "aiohttp/_http_parser.pyx":526 + * + * if self._messages: + * messages = self._messages # <<<<<<<<<<<<<< + * self._messages = [] + * else: + */ + __pyx_t_4 = __pyx_v_self->_messages; + __Pyx_INCREF(__pyx_t_4); + __pyx_v_messages = __pyx_t_4; + __pyx_t_4 = 0; + + /* "aiohttp/_http_parser.pyx":527 + * if self._messages: + * messages = self._messages + * self._messages = [] # <<<<<<<<<<<<<< + * else: + * messages = () + */ + __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __Pyx_GOTREF(__pyx_v_self->_messages); + __Pyx_DECREF(__pyx_v_self->_messages); + __pyx_v_self->_messages = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + + /* "aiohttp/_http_parser.pyx":525 + * raise ex + * + * if self._messages: # <<<<<<<<<<<<<< + * messages = self._messages + * self._messages = [] + */ + goto __pyx_L9; + } + + /* "aiohttp/_http_parser.pyx":529 + * self._messages = [] + * else: + * messages = () # <<<<<<<<<<<<<< + * + * if self._upgraded: + */ + /*else*/ { + __Pyx_INCREF(__pyx_empty_tuple); + __pyx_v_messages = __pyx_empty_tuple; + } + __pyx_L9:; + + /* "aiohttp/_http_parser.pyx":531 + * messages = () + * + * if self._upgraded: # <<<<<<<<<<<<<< + * return messages, True, data[nb:] + * else: + */ + __pyx_t_3 = (__pyx_v_self->_upgraded != 0); + if (__pyx_t_3) { + + /* "aiohttp/_http_parser.pyx":532 + * + * if self._upgraded: + * return messages, True, data[nb:] # <<<<<<<<<<<<<< + * else: + * return messages, False, b'' + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_v_data, __pyx_v_nb, 0, NULL, NULL, NULL, 1, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_messages); + __Pyx_GIVEREF(__pyx_v_messages); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_messages); + __Pyx_INCREF(Py_True); + __Pyx_GIVEREF(Py_True); + PyTuple_SET_ITEM(__pyx_t_5, 1, Py_True); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":531 + * messages = () + * + * if self._upgraded: # <<<<<<<<<<<<<< + * return messages, True, data[nb:] + * else: + */ + } + + /* "aiohttp/_http_parser.pyx":534 + * return messages, True, data[nb:] + * else: + * return messages, False, b'' # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_messages); + __Pyx_GIVEREF(__pyx_v_messages); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_messages); + __Pyx_INCREF(Py_False); + __Pyx_GIVEREF(Py_False); + PyTuple_SET_ITEM(__pyx_t_5, 1, Py_False); + __Pyx_INCREF(__pyx_kp_b__4); + __Pyx_GIVEREF(__pyx_kp_b__4); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_b__4); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + } + + /* "aiohttp/_http_parser.pyx":493 + * return self._messages[-1][0] + * + * def feed_data(self, data): # <<<<<<<<<<<<<< + * cdef: + * size_t data_len + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("aiohttp._http_parser.HttpParser.feed_data", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_ex); + __Pyx_XDECREF(__pyx_v_messages); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_10HttpParser_8__reduce_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_10HttpParser_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser.HttpParser.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_10HttpParser_10__setstate_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_10HttpParser_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser.HttpParser.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":539 + * cdef class HttpRequestParser(HttpParser): + * + * def __init__(self, protocol, loop, timer=None, # <<<<<<<<<<<<<< + * size_t max_line_size=8190, size_t max_headers=32768, + * size_t max_field_size=8190, payload_exception=None, + */ + +/* Python wrapper */ +static int __pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_protocol = 0; + PyObject *__pyx_v_loop = 0; + PyObject *__pyx_v_timer = 0; + size_t __pyx_v_max_line_size; + size_t __pyx_v_max_headers; + size_t __pyx_v_max_field_size; + PyObject *__pyx_v_payload_exception = 0; + int __pyx_v_response_with_body; + CYTHON_UNUSED int __pyx_v_read_until_eof; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_protocol,&__pyx_n_s_loop,&__pyx_n_s_timer,&__pyx_n_s_max_line_size,&__pyx_n_s_max_headers,&__pyx_n_s_max_field_size,&__pyx_n_s_payload_exception,&__pyx_n_s_response_with_body,&__pyx_n_s_read_until_eof,0}; + PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; + values[2] = ((PyObject *)Py_None); + + /* "aiohttp/_http_parser.pyx":541 + * def __init__(self, protocol, loop, timer=None, + * size_t max_line_size=8190, size_t max_headers=32768, + * size_t max_field_size=8190, payload_exception=None, # <<<<<<<<<<<<<< + * bint response_with_body=True, bint read_until_eof=False): + * self._init(cparser.HTTP_REQUEST, protocol, loop, timer, + */ + values[6] = ((PyObject *)Py_None); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_protocol)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_loop)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 9, 1); __PYX_ERR(0, 539, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_timer); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_line_size); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_headers); + if (value) { values[4] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_field_size); + if (value) { values[5] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_payload_exception); + if (value) { values[6] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 7: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_response_with_body); + if (value) { values[7] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 8: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_read_until_eof); + if (value) { values[8] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 539, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_protocol = values[0]; + __pyx_v_loop = values[1]; + __pyx_v_timer = values[2]; + if (values[3]) { + __pyx_v_max_line_size = __Pyx_PyInt_As_size_t(values[3]); if (unlikely((__pyx_v_max_line_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L3_error) + } else { + __pyx_v_max_line_size = ((size_t)0x1FFE); + } + if (values[4]) { + __pyx_v_max_headers = __Pyx_PyInt_As_size_t(values[4]); if (unlikely((__pyx_v_max_headers == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L3_error) + } else { + __pyx_v_max_headers = ((size_t)0x8000); + } + if (values[5]) { + __pyx_v_max_field_size = __Pyx_PyInt_As_size_t(values[5]); if (unlikely((__pyx_v_max_field_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 541, __pyx_L3_error) + } else { + __pyx_v_max_field_size = ((size_t)0x1FFE); + } + __pyx_v_payload_exception = values[6]; + if (values[7]) { + __pyx_v_response_with_body = __Pyx_PyObject_IsTrue(values[7]); if (unlikely((__pyx_v_response_with_body == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L3_error) + } else { + + /* "aiohttp/_http_parser.pyx":542 + * size_t max_line_size=8190, size_t max_headers=32768, + * size_t max_field_size=8190, payload_exception=None, + * bint response_with_body=True, bint read_until_eof=False): # <<<<<<<<<<<<<< + * self._init(cparser.HTTP_REQUEST, protocol, loop, timer, + * max_line_size, max_headers, max_field_size, + */ + __pyx_v_response_with_body = ((int)1); + } + if (values[8]) { + __pyx_v_read_until_eof = __Pyx_PyObject_IsTrue(values[8]); if (unlikely((__pyx_v_read_until_eof == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L3_error) + } else { + __pyx_v_read_until_eof = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 539, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._http_parser.HttpRequestParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17HttpRequestParser___init__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *)__pyx_v_self), __pyx_v_protocol, __pyx_v_loop, __pyx_v_timer, __pyx_v_max_line_size, __pyx_v_max_headers, __pyx_v_max_field_size, __pyx_v_payload_exception, __pyx_v_response_with_body, __pyx_v_read_until_eof); + + /* "aiohttp/_http_parser.pyx":539 + * cdef class HttpRequestParser(HttpParser): + * + * def __init__(self, protocol, loop, timer=None, # <<<<<<<<<<<<<< + * size_t max_line_size=8190, size_t max_headers=32768, + * size_t max_field_size=8190, payload_exception=None, + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_7aiohttp_12_http_parser_17HttpRequestParser___init__(struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *__pyx_v_self, PyObject *__pyx_v_protocol, PyObject *__pyx_v_loop, PyObject *__pyx_v_timer, size_t __pyx_v_max_line_size, size_t __pyx_v_max_headers, size_t __pyx_v_max_field_size, PyObject *__pyx_v_payload_exception, int __pyx_v_response_with_body, CYTHON_UNUSED int __pyx_v_read_until_eof) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init __pyx_t_2; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "aiohttp/_http_parser.pyx":543 + * size_t max_field_size=8190, payload_exception=None, + * bint response_with_body=True, bint read_until_eof=False): + * self._init(cparser.HTTP_REQUEST, protocol, loop, timer, # <<<<<<<<<<<<<< + * max_line_size, max_headers, max_field_size, + * payload_exception, response_with_body) + */ + __pyx_t_2.__pyx_n = 6; + __pyx_t_2.timer = __pyx_v_timer; + __pyx_t_2.max_line_size = __pyx_v_max_line_size; + __pyx_t_2.max_headers = __pyx_v_max_headers; + __pyx_t_2.max_field_size = __pyx_v_max_field_size; + __pyx_t_2.payload_exception = __pyx_v_payload_exception; + __pyx_t_2.response_with_body = __pyx_v_response_with_body; + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpRequestParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._init(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self), HTTP_REQUEST, __pyx_v_protocol, __pyx_v_loop, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 543, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":539 + * cdef class HttpRequestParser(HttpParser): + * + * def __init__(self, protocol, loop, timer=None, # <<<<<<<<<<<<<< + * size_t max_line_size=8190, size_t max_headers=32768, + * size_t max_field_size=8190, payload_exception=None, + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser.HttpRequestParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":547 + * payload_exception, response_with_body) + * + * cdef object _on_status_complete(self): # <<<<<<<<<<<<<< + * cdef Py_buffer py_buf + * if not self._buf: + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser_17HttpRequestParser__on_status_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *__pyx_v_self) { + Py_buffer __pyx_v_py_buf; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_t_7; + char const *__pyx_t_8; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + __Pyx_RefNannySetupContext("_on_status_complete", 0); + + /* "aiohttp/_http_parser.pyx":549 + * cdef object _on_status_complete(self): + * cdef Py_buffer py_buf + * if not self._buf: # <<<<<<<<<<<<<< + * return + * self._path = self._buf.decode('utf-8', 'surrogateescape') + */ + __pyx_t_1 = (__pyx_v_self->__pyx_base._buf != Py_None)&&(PyByteArray_GET_SIZE(__pyx_v_self->__pyx_base._buf) != 0); + __pyx_t_2 = ((!__pyx_t_1) != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_parser.pyx":550 + * cdef Py_buffer py_buf + * if not self._buf: + * return # <<<<<<<<<<<<<< + * self._path = self._buf.decode('utf-8', 'surrogateescape') + * if self._cparser.method == 5: # CONNECT + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":549 + * cdef object _on_status_complete(self): + * cdef Py_buffer py_buf + * if not self._buf: # <<<<<<<<<<<<<< + * return + * self._path = self._buf.decode('utf-8', 'surrogateescape') + */ + } + + /* "aiohttp/_http_parser.pyx":551 + * if not self._buf: + * return + * self._path = self._buf.decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< + * if self._cparser.method == 5: # CONNECT + * self._url = URL(self._path) + */ + if (unlikely(__pyx_v_self->__pyx_base._buf == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); + __PYX_ERR(0, 551, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_decode_bytearray(__pyx_v_self->__pyx_base._buf, 0, PY_SSIZE_T_MAX, NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_v_self->__pyx_base._path); + __Pyx_DECREF(__pyx_v_self->__pyx_base._path); + __pyx_v_self->__pyx_base._path = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":552 + * return + * self._path = self._buf.decode('utf-8', 'surrogateescape') + * if self._cparser.method == 5: # CONNECT # <<<<<<<<<<<<<< + * self._url = URL(self._path) + * else: + */ + __pyx_t_2 = ((__pyx_v_self->__pyx_base._cparser->method == 5) != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_parser.pyx":553 + * self._path = self._buf.decode('utf-8', 'surrogateescape') + * if self._cparser.method == 5: # CONNECT + * self._url = URL(self._path) # <<<<<<<<<<<<<< + * else: + * PyObject_GetBuffer(self._buf, &py_buf, PyBUF_SIMPLE) + */ + __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_URL); + __pyx_t_4 = __pyx_v_7aiohttp_12_http_parser_URL; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_self->__pyx_base._path) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_self->__pyx_base._path); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 553, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_v_self->__pyx_base._url); + __Pyx_DECREF(__pyx_v_self->__pyx_base._url); + __pyx_v_self->__pyx_base._url = __pyx_t_3; + __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":552 + * return + * self._path = self._buf.decode('utf-8', 'surrogateescape') + * if self._cparser.method == 5: # CONNECT # <<<<<<<<<<<<<< + * self._url = URL(self._path) + * else: + */ + goto __pyx_L4; + } + + /* "aiohttp/_http_parser.pyx":555 + * self._url = URL(self._path) + * else: + * PyObject_GetBuffer(self._buf, &py_buf, PyBUF_SIMPLE) # <<<<<<<<<<<<<< + * try: + * self._url = _parse_url(py_buf.buf, + */ + /*else*/ { + __pyx_t_3 = __pyx_v_self->__pyx_base._buf; + __Pyx_INCREF(__pyx_t_3); + __pyx_t_6 = PyObject_GetBuffer(__pyx_t_3, (&__pyx_v_py_buf), PyBUF_SIMPLE); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":556 + * else: + * PyObject_GetBuffer(self._buf, &py_buf, PyBUF_SIMPLE) + * try: # <<<<<<<<<<<<<< + * self._url = _parse_url(py_buf.buf, + * py_buf.len) + */ + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":557 + * PyObject_GetBuffer(self._buf, &py_buf, PyBUF_SIMPLE) + * try: + * self._url = _parse_url(py_buf.buf, # <<<<<<<<<<<<<< + * py_buf.len) + * finally: + */ + __pyx_t_3 = __pyx_f_7aiohttp_12_http_parser__parse_url(((char *)__pyx_v_py_buf.buf), __pyx_v_py_buf.len); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 557, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_v_self->__pyx_base._url); + __Pyx_DECREF(__pyx_v_self->__pyx_base._url); + __pyx_v_self->__pyx_base._url = __pyx_t_3; + __pyx_t_3 = 0; + } + + /* "aiohttp/_http_parser.pyx":560 + * py_buf.len) + * finally: + * PyBuffer_Release(&py_buf) # <<<<<<<<<<<<<< + * PyByteArray_Resize(self._buf, 0) + * + */ + /*finally:*/ { + /*normal exit:*/{ + PyBuffer_Release((&__pyx_v_py_buf)); + goto __pyx_L7; + } + __pyx_L6_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_14); + __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename; + { + PyBuffer_Release((&__pyx_v_py_buf)); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_14); + __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); + } + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11); + __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; + __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8; + goto __pyx_L1_error; + } + __pyx_L7:; + } + } + __pyx_L4:; + + /* "aiohttp/_http_parser.pyx":561 + * finally: + * PyBuffer_Release(&py_buf) + * PyByteArray_Resize(self._buf, 0) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_v_self->__pyx_base._buf; + __Pyx_INCREF(__pyx_t_3); + __pyx_t_7 = PyByteArray_Resize(__pyx_t_3, 0); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":547 + * payload_exception, response_with_body) + * + * cdef object _on_status_complete(self): # <<<<<<<<<<<<<< + * cdef Py_buffer py_buf + * if not self._buf: + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("aiohttp._http_parser.HttpRequestParser._on_status_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17HttpRequestParser_2__reduce_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17HttpRequestParser_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser.HttpRequestParser.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17HttpRequestParser_4__setstate_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_17HttpRequestParser_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser.HttpRequestParser.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":566 + * cdef class HttpResponseParser(HttpParser): + * + * def __init__(self, protocol, loop, timer=None, # <<<<<<<<<<<<<< + * size_t max_line_size=8190, size_t max_headers=32768, + * size_t max_field_size=8190, payload_exception=None, + */ + +/* Python wrapper */ +static int __pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_protocol = 0; + PyObject *__pyx_v_loop = 0; + PyObject *__pyx_v_timer = 0; + size_t __pyx_v_max_line_size; + size_t __pyx_v_max_headers; + size_t __pyx_v_max_field_size; + PyObject *__pyx_v_payload_exception = 0; + int __pyx_v_response_with_body; + CYTHON_UNUSED int __pyx_v_read_until_eof; + int __pyx_v_auto_decompress; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_protocol,&__pyx_n_s_loop,&__pyx_n_s_timer,&__pyx_n_s_max_line_size,&__pyx_n_s_max_headers,&__pyx_n_s_max_field_size,&__pyx_n_s_payload_exception,&__pyx_n_s_response_with_body,&__pyx_n_s_read_until_eof,&__pyx_n_s_auto_decompress,0}; + PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0}; + values[2] = ((PyObject *)Py_None); + + /* "aiohttp/_http_parser.pyx":568 + * def __init__(self, protocol, loop, timer=None, + * size_t max_line_size=8190, size_t max_headers=32768, + * size_t max_field_size=8190, payload_exception=None, # <<<<<<<<<<<<<< + * bint response_with_body=True, bint read_until_eof=False, + * bint auto_decompress=True): + */ + values[6] = ((PyObject *)Py_None); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_protocol)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_loop)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 10, 1); __PYX_ERR(0, 566, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_timer); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_line_size); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_headers); + if (value) { values[4] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_field_size); + if (value) { values[5] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_payload_exception); + if (value) { values[6] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 7: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_response_with_body); + if (value) { values[7] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 8: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_read_until_eof); + if (value) { values[8] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 9: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_auto_decompress); + if (value) { values[9] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 566, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_protocol = values[0]; + __pyx_v_loop = values[1]; + __pyx_v_timer = values[2]; + if (values[3]) { + __pyx_v_max_line_size = __Pyx_PyInt_As_size_t(values[3]); if (unlikely((__pyx_v_max_line_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 567, __pyx_L3_error) + } else { + __pyx_v_max_line_size = ((size_t)0x1FFE); + } + if (values[4]) { + __pyx_v_max_headers = __Pyx_PyInt_As_size_t(values[4]); if (unlikely((__pyx_v_max_headers == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 567, __pyx_L3_error) + } else { + __pyx_v_max_headers = ((size_t)0x8000); + } + if (values[5]) { + __pyx_v_max_field_size = __Pyx_PyInt_As_size_t(values[5]); if (unlikely((__pyx_v_max_field_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 568, __pyx_L3_error) + } else { + __pyx_v_max_field_size = ((size_t)0x1FFE); + } + __pyx_v_payload_exception = values[6]; + if (values[7]) { + __pyx_v_response_with_body = __Pyx_PyObject_IsTrue(values[7]); if (unlikely((__pyx_v_response_with_body == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 569, __pyx_L3_error) + } else { + + /* "aiohttp/_http_parser.pyx":569 + * size_t max_line_size=8190, size_t max_headers=32768, + * size_t max_field_size=8190, payload_exception=None, + * bint response_with_body=True, bint read_until_eof=False, # <<<<<<<<<<<<<< + * bint auto_decompress=True): + * self._init(cparser.HTTP_RESPONSE, protocol, loop, timer, + */ + __pyx_v_response_with_body = ((int)1); + } + if (values[8]) { + __pyx_v_read_until_eof = __Pyx_PyObject_IsTrue(values[8]); if (unlikely((__pyx_v_read_until_eof == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 569, __pyx_L3_error) + } else { + __pyx_v_read_until_eof = ((int)0); + } + if (values[9]) { + __pyx_v_auto_decompress = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_auto_decompress == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 570, __pyx_L3_error) + } else { + + /* "aiohttp/_http_parser.pyx":570 + * size_t max_field_size=8190, payload_exception=None, + * bint response_with_body=True, bint read_until_eof=False, + * bint auto_decompress=True): # <<<<<<<<<<<<<< + * self._init(cparser.HTTP_RESPONSE, protocol, loop, timer, + * max_line_size, max_headers, max_field_size, + */ + __pyx_v_auto_decompress = ((int)1); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 566, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._http_parser.HttpResponseParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18HttpResponseParser___init__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *)__pyx_v_self), __pyx_v_protocol, __pyx_v_loop, __pyx_v_timer, __pyx_v_max_line_size, __pyx_v_max_headers, __pyx_v_max_field_size, __pyx_v_payload_exception, __pyx_v_response_with_body, __pyx_v_read_until_eof, __pyx_v_auto_decompress); + + /* "aiohttp/_http_parser.pyx":566 + * cdef class HttpResponseParser(HttpParser): + * + * def __init__(self, protocol, loop, timer=None, # <<<<<<<<<<<<<< + * size_t max_line_size=8190, size_t max_headers=32768, + * size_t max_field_size=8190, payload_exception=None, + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_7aiohttp_12_http_parser_18HttpResponseParser___init__(struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *__pyx_v_self, PyObject *__pyx_v_protocol, PyObject *__pyx_v_loop, PyObject *__pyx_v_timer, size_t __pyx_v_max_line_size, size_t __pyx_v_max_headers, size_t __pyx_v_max_field_size, PyObject *__pyx_v_payload_exception, int __pyx_v_response_with_body, CYTHON_UNUSED int __pyx_v_read_until_eof, int __pyx_v_auto_decompress) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init __pyx_t_2; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "aiohttp/_http_parser.pyx":571 + * bint response_with_body=True, bint read_until_eof=False, + * bint auto_decompress=True): + * self._init(cparser.HTTP_RESPONSE, protocol, loop, timer, # <<<<<<<<<<<<<< + * max_line_size, max_headers, max_field_size, + * payload_exception, response_with_body, auto_decompress) + */ + __pyx_t_2.__pyx_n = 7; + __pyx_t_2.timer = __pyx_v_timer; + __pyx_t_2.max_line_size = __pyx_v_max_line_size; + __pyx_t_2.max_headers = __pyx_v_max_headers; + __pyx_t_2.max_field_size = __pyx_v_max_field_size; + __pyx_t_2.payload_exception = __pyx_v_payload_exception; + __pyx_t_2.response_with_body = __pyx_v_response_with_body; + __pyx_t_2.auto_decompress = __pyx_v_auto_decompress; + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpResponseParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._init(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self), HTTP_RESPONSE, __pyx_v_protocol, __pyx_v_loop, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 571, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":566 + * cdef class HttpResponseParser(HttpParser): + * + * def __init__(self, protocol, loop, timer=None, # <<<<<<<<<<<<<< + * size_t max_line_size=8190, size_t max_headers=32768, + * size_t max_field_size=8190, payload_exception=None, + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser.HttpResponseParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":575 + * payload_exception, response_with_body, auto_decompress) + * + * cdef object _on_status_complete(self): # <<<<<<<<<<<<<< + * if self._buf: + * self._reason = self._buf.decode('utf-8', 'surrogateescape') + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser_18HttpResponseParser__on_status_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + __Pyx_RefNannySetupContext("_on_status_complete", 0); + + /* "aiohttp/_http_parser.pyx":576 + * + * cdef object _on_status_complete(self): + * if self._buf: # <<<<<<<<<<<<<< + * self._reason = self._buf.decode('utf-8', 'surrogateescape') + * PyByteArray_Resize(self._buf, 0) + */ + __pyx_t_1 = (__pyx_v_self->__pyx_base._buf != Py_None)&&(PyByteArray_GET_SIZE(__pyx_v_self->__pyx_base._buf) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_parser.pyx":577 + * cdef object _on_status_complete(self): + * if self._buf: + * self._reason = self._buf.decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< + * PyByteArray_Resize(self._buf, 0) + * else: + */ + if (unlikely(__pyx_v_self->__pyx_base._buf == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); + __PYX_ERR(0, 577, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_decode_bytearray(__pyx_v_self->__pyx_base._buf, 0, PY_SSIZE_T_MAX, NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_self->__pyx_base._reason); + __Pyx_DECREF(__pyx_v_self->__pyx_base._reason); + __pyx_v_self->__pyx_base._reason = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":578 + * if self._buf: + * self._reason = self._buf.decode('utf-8', 'surrogateescape') + * PyByteArray_Resize(self._buf, 0) # <<<<<<<<<<<<<< + * else: + * self._reason = self._reason or '' + */ + __pyx_t_2 = __pyx_v_self->__pyx_base._buf; + __Pyx_INCREF(__pyx_t_2); + __pyx_t_3 = PyByteArray_Resize(__pyx_t_2, 0); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 578, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":576 + * + * cdef object _on_status_complete(self): + * if self._buf: # <<<<<<<<<<<<<< + * self._reason = self._buf.decode('utf-8', 'surrogateescape') + * PyByteArray_Resize(self._buf, 0) + */ + goto __pyx_L3; + } + + /* "aiohttp/_http_parser.pyx":580 + * PyByteArray_Resize(self._buf, 0) + * else: + * self._reason = self._reason or '' # <<<<<<<<<<<<<< + * + * cdef int cb_on_message_begin(cparser.http_parser* parser) except -1: + */ + /*else*/ { + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_self->__pyx_base._reason); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 580, __pyx_L1_error) + if (!__pyx_t_1) { + } else { + __Pyx_INCREF(__pyx_v_self->__pyx_base._reason); + __pyx_t_2 = __pyx_v_self->__pyx_base._reason; + goto __pyx_L4_bool_binop_done; + } + __Pyx_INCREF(__pyx_kp_u__4); + __pyx_t_2 = __pyx_kp_u__4; + __pyx_L4_bool_binop_done:; + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_self->__pyx_base._reason); + __Pyx_DECREF(__pyx_v_self->__pyx_base._reason); + __pyx_v_self->__pyx_base._reason = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + } + __pyx_L3:; + + /* "aiohttp/_http_parser.pyx":575 + * payload_exception, response_with_body, auto_decompress) + * + * cdef object _on_status_complete(self): # <<<<<<<<<<<<<< + * if self._buf: + * self._reason = self._buf.decode('utf-8', 'surrogateescape') + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("aiohttp._http_parser.HttpResponseParser._on_status_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18HttpResponseParser_2__reduce_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18HttpResponseParser_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser.HttpResponseParser.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18HttpResponseParser_4__setstate_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_18HttpResponseParser_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._http_parser.HttpResponseParser.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":582 + * self._reason = self._reason or '' + * + * cdef int cb_on_message_begin(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< + * cdef HttpParser pyparser = parser.data + * + */ + +static int __pyx_f_7aiohttp_12_http_parser_cb_on_message_begin(struct http_parser *__pyx_v_parser) { + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + __Pyx_RefNannySetupContext("cb_on_message_begin", 0); + + /* "aiohttp/_http_parser.pyx":583 + * + * cdef int cb_on_message_begin(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< + * + * pyparser._started = True + */ + __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":585 + * cdef HttpParser pyparser = parser.data + * + * pyparser._started = True # <<<<<<<<<<<<<< + * pyparser._headers = CIMultiDict() + * pyparser._raw_headers = [] + */ + __pyx_v_pyparser->_started = 1; + + /* "aiohttp/_http_parser.pyx":586 + * + * pyparser._started = True + * pyparser._headers = CIMultiDict() # <<<<<<<<<<<<<< + * pyparser._raw_headers = [] + * PyByteArray_Resize(pyparser._buf, 0) + */ + __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_CIMultiDict); + __pyx_t_2 = __pyx_v_7aiohttp_12_http_parser_CIMultiDict; __pyx_t_3 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 586, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_pyparser->_headers); + __Pyx_DECREF(__pyx_v_pyparser->_headers); + __pyx_v_pyparser->_headers = __pyx_t_1; + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":587 + * pyparser._started = True + * pyparser._headers = CIMultiDict() + * pyparser._raw_headers = [] # <<<<<<<<<<<<<< + * PyByteArray_Resize(pyparser._buf, 0) + * pyparser._path = None + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 587, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_pyparser->_raw_headers); + __Pyx_DECREF(__pyx_v_pyparser->_raw_headers); + __pyx_v_pyparser->_raw_headers = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":588 + * pyparser._headers = CIMultiDict() + * pyparser._raw_headers = [] + * PyByteArray_Resize(pyparser._buf, 0) # <<<<<<<<<<<<<< + * pyparser._path = None + * pyparser._reason = None + */ + __pyx_t_1 = __pyx_v_pyparser->_buf; + __Pyx_INCREF(__pyx_t_1); + __pyx_t_4 = PyByteArray_Resize(__pyx_t_1, 0); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 588, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":589 + * pyparser._raw_headers = [] + * PyByteArray_Resize(pyparser._buf, 0) + * pyparser._path = None # <<<<<<<<<<<<<< + * pyparser._reason = None + * return 0 + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_pyparser->_path); + __Pyx_DECREF(__pyx_v_pyparser->_path); + __pyx_v_pyparser->_path = ((PyObject*)Py_None); + + /* "aiohttp/_http_parser.pyx":590 + * PyByteArray_Resize(pyparser._buf, 0) + * pyparser._path = None + * pyparser._reason = None # <<<<<<<<<<<<<< + * return 0 + * + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_pyparser->_reason); + __Pyx_DECREF(__pyx_v_pyparser->_reason); + __pyx_v_pyparser->_reason = ((PyObject*)Py_None); + + /* "aiohttp/_http_parser.pyx":591 + * pyparser._path = None + * pyparser._reason = None + * return 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":582 + * self._reason = self._reason or '' + * + * cdef int cb_on_message_begin(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< + * cdef HttpParser pyparser = parser.data + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_message_begin", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":594 + * + * + * cdef int cb_on_url(cparser.http_parser* parser, # <<<<<<<<<<<<<< + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data + */ + +static int __pyx_f_7aiohttp_12_http_parser_cb_on_url(struct http_parser *__pyx_v_parser, char const *__pyx_v_at, size_t __pyx_v_length) { + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; + PyObject *__pyx_v_ex = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + __Pyx_RefNannySetupContext("cb_on_url", 0); + + /* "aiohttp/_http_parser.pyx":596 + * cdef int cb_on_url(cparser.http_parser* parser, + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< + * try: + * if length > pyparser._max_line_size: + */ + __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":597 + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * if length > pyparser._max_line_size: + * raise LineTooLong( + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":598 + * cdef HttpParser pyparser = parser.data + * try: + * if length > pyparser._max_line_size: # <<<<<<<<<<<<<< + * raise LineTooLong( + * 'Status line is too long', pyparser._max_line_size, length) + */ + __pyx_t_5 = ((__pyx_v_length > __pyx_v_pyparser->_max_line_size) != 0); + if (unlikely(__pyx_t_5)) { + + /* "aiohttp/_http_parser.pyx":599 + * try: + * if length > pyparser._max_line_size: + * raise LineTooLong( # <<<<<<<<<<<<<< + * 'Status line is too long', pyparser._max_line_size, length) + * extend(pyparser._buf, at, length) + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_LineTooLong); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 599, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "aiohttp/_http_parser.pyx":600 + * if length > pyparser._max_line_size: + * raise LineTooLong( + * 'Status line is too long', pyparser._max_line_size, length) # <<<<<<<<<<<<<< + * extend(pyparser._buf, at, length) + * except BaseException as ex: + */ + __pyx_t_7 = __Pyx_PyInt_FromSize_t(__pyx_v_pyparser->_max_line_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 600, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyInt_FromSize_t(__pyx_v_length); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 600, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = NULL; + __pyx_t_10 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_10 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_kp_u_Status_line_is_too_long, __pyx_t_7, __pyx_t_8}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 599, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_kp_u_Status_line_is_too_long, __pyx_t_7, __pyx_t_8}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 599, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } else + #endif + { + __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 599, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_11); + if (__pyx_t_9) { + __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL; + } + __Pyx_INCREF(__pyx_kp_u_Status_line_is_too_long); + __Pyx_GIVEREF(__pyx_kp_u_Status_line_is_too_long); + PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_kp_u_Status_line_is_too_long); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_t_8); + __pyx_t_7 = 0; + __pyx_t_8 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 599, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 599, __pyx_L3_error) + + /* "aiohttp/_http_parser.pyx":598 + * cdef HttpParser pyparser = parser.data + * try: + * if length > pyparser._max_line_size: # <<<<<<<<<<<<<< + * raise LineTooLong( + * 'Status line is too long', pyparser._max_line_size, length) + */ + } + + /* "aiohttp/_http_parser.pyx":601 + * raise LineTooLong( + * 'Status line is too long', pyparser._max_line_size, length) + * extend(pyparser._buf, at, length) # <<<<<<<<<<<<<< + * except BaseException as ex: + * pyparser._last_error = ex + */ + __pyx_t_1 = __pyx_v_pyparser->_buf; + __Pyx_INCREF(__pyx_t_1); + __pyx_t_6 = __pyx_f_7aiohttp_12_http_parser_extend(__pyx_t_1, __pyx_v_at, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 601, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "aiohttp/_http_parser.pyx":597 + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * if length > pyparser._max_line_size: + * raise LineTooLong( + */ + } + + /* "aiohttp/_http_parser.pyx":606 + * return -1 + * else: + * return 0 # <<<<<<<<<<<<<< + * + * + */ + /*else:*/ { + __pyx_r = 0; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "aiohttp/_http_parser.pyx":602 + * 'Status line is too long', pyparser._max_line_size, length) + * extend(pyparser._buf, at, length) + * except BaseException as ex: # <<<<<<<<<<<<<< + * pyparser._last_error = ex + * return -1 + */ + __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); + if (__pyx_t_10) { + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_url", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_1, &__pyx_t_11) < 0) __PYX_ERR(0, 602, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_ex = __pyx_t_1; + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":603 + * extend(pyparser._buf, at, length) + * except BaseException as ex: + * pyparser._last_error = ex # <<<<<<<<<<<<<< + * return -1 + * else: + */ + __Pyx_INCREF(__pyx_v_ex); + __Pyx_GIVEREF(__pyx_v_ex); + __Pyx_GOTREF(__pyx_v_pyparser->_last_error); + __Pyx_DECREF(__pyx_v_pyparser->_last_error); + __pyx_v_pyparser->_last_error = __pyx_v_ex; + + /* "aiohttp/_http_parser.pyx":604 + * except BaseException as ex: + * pyparser._last_error = ex + * return -1 # <<<<<<<<<<<<<< + * else: + * return 0 + */ + __pyx_r = -1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + goto __pyx_L14_return; + } + + /* "aiohttp/_http_parser.pyx":602 + * 'Status line is too long', pyparser._max_line_size, length) + * extend(pyparser._buf, at, length) + * except BaseException as ex: # <<<<<<<<<<<<<< + * pyparser._last_error = ex + * return -1 + */ + /*finally:*/ { + __pyx_L14_return: { + __pyx_t_10 = __pyx_r; + __Pyx_DECREF(__pyx_v_ex); + __pyx_v_ex = NULL; + __pyx_r = __pyx_t_10; + goto __pyx_L6_except_return; + } + } + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "aiohttp/_http_parser.pyx":597 + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * if length > pyparser._max_line_size: + * raise LineTooLong( + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "aiohttp/_http_parser.pyx":594 + * + * + * cdef int cb_on_url(cparser.http_parser* parser, # <<<<<<<<<<<<<< + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_url", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); + __Pyx_XDECREF(__pyx_v_ex); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":609 + * + * + * cdef int cb_on_status(cparser.http_parser* parser, # <<<<<<<<<<<<<< + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data + */ + +static int __pyx_f_7aiohttp_12_http_parser_cb_on_status(struct http_parser *__pyx_v_parser, char const *__pyx_v_at, size_t __pyx_v_length) { + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; + PyObject *__pyx_v_ex = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + __Pyx_RefNannySetupContext("cb_on_status", 0); + + /* "aiohttp/_http_parser.pyx":611 + * cdef int cb_on_status(cparser.http_parser* parser, + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< + * cdef str reason + * try: + */ + __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":613 + * cdef HttpParser pyparser = parser.data + * cdef str reason + * try: # <<<<<<<<<<<<<< + * if length > pyparser._max_line_size: + * raise LineTooLong( + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":614 + * cdef str reason + * try: + * if length > pyparser._max_line_size: # <<<<<<<<<<<<<< + * raise LineTooLong( + * 'Status line is too long', pyparser._max_line_size, length) + */ + __pyx_t_5 = ((__pyx_v_length > __pyx_v_pyparser->_max_line_size) != 0); + if (unlikely(__pyx_t_5)) { + + /* "aiohttp/_http_parser.pyx":615 + * try: + * if length > pyparser._max_line_size: + * raise LineTooLong( # <<<<<<<<<<<<<< + * 'Status line is too long', pyparser._max_line_size, length) + * extend(pyparser._buf, at, length) + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_LineTooLong); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 615, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "aiohttp/_http_parser.pyx":616 + * if length > pyparser._max_line_size: + * raise LineTooLong( + * 'Status line is too long', pyparser._max_line_size, length) # <<<<<<<<<<<<<< + * extend(pyparser._buf, at, length) + * except BaseException as ex: + */ + __pyx_t_7 = __Pyx_PyInt_FromSize_t(__pyx_v_pyparser->_max_line_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 616, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyInt_FromSize_t(__pyx_v_length); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 616, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = NULL; + __pyx_t_10 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_10 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_kp_u_Status_line_is_too_long, __pyx_t_7, __pyx_t_8}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 615, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_kp_u_Status_line_is_too_long, __pyx_t_7, __pyx_t_8}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 615, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } else + #endif + { + __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 615, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_11); + if (__pyx_t_9) { + __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL; + } + __Pyx_INCREF(__pyx_kp_u_Status_line_is_too_long); + __Pyx_GIVEREF(__pyx_kp_u_Status_line_is_too_long); + PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_kp_u_Status_line_is_too_long); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_t_8); + __pyx_t_7 = 0; + __pyx_t_8 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 615, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 615, __pyx_L3_error) + + /* "aiohttp/_http_parser.pyx":614 + * cdef str reason + * try: + * if length > pyparser._max_line_size: # <<<<<<<<<<<<<< + * raise LineTooLong( + * 'Status line is too long', pyparser._max_line_size, length) + */ + } + + /* "aiohttp/_http_parser.pyx":617 + * raise LineTooLong( + * 'Status line is too long', pyparser._max_line_size, length) + * extend(pyparser._buf, at, length) # <<<<<<<<<<<<<< + * except BaseException as ex: + * pyparser._last_error = ex + */ + __pyx_t_1 = __pyx_v_pyparser->_buf; + __Pyx_INCREF(__pyx_t_1); + __pyx_t_6 = __pyx_f_7aiohttp_12_http_parser_extend(__pyx_t_1, __pyx_v_at, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 617, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "aiohttp/_http_parser.pyx":613 + * cdef HttpParser pyparser = parser.data + * cdef str reason + * try: # <<<<<<<<<<<<<< + * if length > pyparser._max_line_size: + * raise LineTooLong( + */ + } + + /* "aiohttp/_http_parser.pyx":622 + * return -1 + * else: + * return 0 # <<<<<<<<<<<<<< + * + * + */ + /*else:*/ { + __pyx_r = 0; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "aiohttp/_http_parser.pyx":618 + * 'Status line is too long', pyparser._max_line_size, length) + * extend(pyparser._buf, at, length) + * except BaseException as ex: # <<<<<<<<<<<<<< + * pyparser._last_error = ex + * return -1 + */ + __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); + if (__pyx_t_10) { + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_status", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_1, &__pyx_t_11) < 0) __PYX_ERR(0, 618, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_ex = __pyx_t_1; + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":619 + * extend(pyparser._buf, at, length) + * except BaseException as ex: + * pyparser._last_error = ex # <<<<<<<<<<<<<< + * return -1 + * else: + */ + __Pyx_INCREF(__pyx_v_ex); + __Pyx_GIVEREF(__pyx_v_ex); + __Pyx_GOTREF(__pyx_v_pyparser->_last_error); + __Pyx_DECREF(__pyx_v_pyparser->_last_error); + __pyx_v_pyparser->_last_error = __pyx_v_ex; + + /* "aiohttp/_http_parser.pyx":620 + * except BaseException as ex: + * pyparser._last_error = ex + * return -1 # <<<<<<<<<<<<<< + * else: + * return 0 + */ + __pyx_r = -1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + goto __pyx_L14_return; + } + + /* "aiohttp/_http_parser.pyx":618 + * 'Status line is too long', pyparser._max_line_size, length) + * extend(pyparser._buf, at, length) + * except BaseException as ex: # <<<<<<<<<<<<<< + * pyparser._last_error = ex + * return -1 + */ + /*finally:*/ { + __pyx_L14_return: { + __pyx_t_10 = __pyx_r; + __Pyx_DECREF(__pyx_v_ex); + __pyx_v_ex = NULL; + __pyx_r = __pyx_t_10; + goto __pyx_L6_except_return; + } + } + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "aiohttp/_http_parser.pyx":613 + * cdef HttpParser pyparser = parser.data + * cdef str reason + * try: # <<<<<<<<<<<<<< + * if length > pyparser._max_line_size: + * raise LineTooLong( + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "aiohttp/_http_parser.pyx":609 + * + * + * cdef int cb_on_status(cparser.http_parser* parser, # <<<<<<<<<<<<<< + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_status", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); + __Pyx_XDECREF(__pyx_v_ex); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":625 + * + * + * cdef int cb_on_header_field(cparser.http_parser* parser, # <<<<<<<<<<<<<< + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data + */ + +static int __pyx_f_7aiohttp_12_http_parser_cb_on_header_field(struct http_parser *__pyx_v_parser, char const *__pyx_v_at, size_t __pyx_v_length) { + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; + Py_ssize_t __pyx_v_size; + PyObject *__pyx_v_ex = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + Py_ssize_t __pyx_t_5; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + int __pyx_t_11; + PyObject *__pyx_t_12 = NULL; + __Pyx_RefNannySetupContext("cb_on_header_field", 0); + + /* "aiohttp/_http_parser.pyx":627 + * cdef int cb_on_header_field(cparser.http_parser* parser, + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< + * cdef Py_ssize_t size + * try: + */ + __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":629 + * cdef HttpParser pyparser = parser.data + * cdef Py_ssize_t size + * try: # <<<<<<<<<<<<<< + * pyparser._on_status_complete() + * size = len(pyparser._raw_name) + length + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":630 + * cdef Py_ssize_t size + * try: + * pyparser._on_status_complete() # <<<<<<<<<<<<<< + * size = len(pyparser._raw_name) + length + * if size > pyparser._max_field_size: + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_status_complete(__pyx_v_pyparser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 630, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":631 + * try: + * pyparser._on_status_complete() + * size = len(pyparser._raw_name) + length # <<<<<<<<<<<<<< + * if size > pyparser._max_field_size: + * raise LineTooLong( + */ + __pyx_t_1 = __pyx_v_pyparser->_raw_name; + __Pyx_INCREF(__pyx_t_1); + if (unlikely(__pyx_t_1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 631, __pyx_L3_error) + } + __pyx_t_5 = PyByteArray_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 631, __pyx_L3_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_size = (__pyx_t_5 + __pyx_v_length); + + /* "aiohttp/_http_parser.pyx":632 + * pyparser._on_status_complete() + * size = len(pyparser._raw_name) + length + * if size > pyparser._max_field_size: # <<<<<<<<<<<<<< + * raise LineTooLong( + * 'Header name is too long', pyparser._max_field_size, size) + */ + __pyx_t_6 = ((__pyx_v_size > __pyx_v_pyparser->_max_field_size) != 0); + if (unlikely(__pyx_t_6)) { + + /* "aiohttp/_http_parser.pyx":633 + * size = len(pyparser._raw_name) + length + * if size > pyparser._max_field_size: + * raise LineTooLong( # <<<<<<<<<<<<<< + * 'Header name is too long', pyparser._max_field_size, size) + * pyparser._on_header_field(at, length) + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_LineTooLong); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 633, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "aiohttp/_http_parser.pyx":634 + * if size > pyparser._max_field_size: + * raise LineTooLong( + * 'Header name is too long', pyparser._max_field_size, size) # <<<<<<<<<<<<<< + * pyparser._on_header_field(at, length) + * except BaseException as ex: + */ + __pyx_t_8 = __Pyx_PyInt_FromSize_t(__pyx_v_pyparser->_max_field_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 634, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 634, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = NULL; + __pyx_t_11 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_11 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_7)) { + PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_kp_u_Header_name_is_too_long, __pyx_t_8, __pyx_t_9}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 633, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) { + PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_kp_u_Header_name_is_too_long, __pyx_t_8, __pyx_t_9}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 633, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else + #endif + { + __pyx_t_12 = PyTuple_New(3+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 633, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_12); + if (__pyx_t_10) { + __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL; + } + __Pyx_INCREF(__pyx_kp_u_Header_name_is_too_long); + __Pyx_GIVEREF(__pyx_kp_u_Header_name_is_too_long); + PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_11, __pyx_kp_u_Header_name_is_too_long); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_11, __pyx_t_9); + __pyx_t_8 = 0; + __pyx_t_9 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 633, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 633, __pyx_L3_error) + + /* "aiohttp/_http_parser.pyx":632 + * pyparser._on_status_complete() + * size = len(pyparser._raw_name) + length + * if size > pyparser._max_field_size: # <<<<<<<<<<<<<< + * raise LineTooLong( + * 'Header name is too long', pyparser._max_field_size, size) + */ + } + + /* "aiohttp/_http_parser.pyx":635 + * raise LineTooLong( + * 'Header name is too long', pyparser._max_field_size, size) + * pyparser._on_header_field(at, length) # <<<<<<<<<<<<<< + * except BaseException as ex: + * pyparser._last_error = ex + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_header_field(__pyx_v_pyparser, __pyx_v_at, __pyx_v_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 635, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":629 + * cdef HttpParser pyparser = parser.data + * cdef Py_ssize_t size + * try: # <<<<<<<<<<<<<< + * pyparser._on_status_complete() + * size = len(pyparser._raw_name) + length + */ + } + + /* "aiohttp/_http_parser.pyx":640 + * return -1 + * else: + * return 0 # <<<<<<<<<<<<<< + * + * + */ + /*else:*/ { + __pyx_r = 0; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "aiohttp/_http_parser.pyx":636 + * 'Header name is too long', pyparser._max_field_size, size) + * pyparser._on_header_field(at, length) + * except BaseException as ex: # <<<<<<<<<<<<<< + * pyparser._last_error = ex + * return -1 + */ + __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); + if (__pyx_t_11) { + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_header_field", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_12) < 0) __PYX_ERR(0, 636, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(__pyx_t_7); + __pyx_v_ex = __pyx_t_7; + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":637 + * pyparser._on_header_field(at, length) + * except BaseException as ex: + * pyparser._last_error = ex # <<<<<<<<<<<<<< + * return -1 + * else: + */ + __Pyx_INCREF(__pyx_v_ex); + __Pyx_GIVEREF(__pyx_v_ex); + __Pyx_GOTREF(__pyx_v_pyparser->_last_error); + __Pyx_DECREF(__pyx_v_pyparser->_last_error); + __pyx_v_pyparser->_last_error = __pyx_v_ex; + + /* "aiohttp/_http_parser.pyx":638 + * except BaseException as ex: + * pyparser._last_error = ex + * return -1 # <<<<<<<<<<<<<< + * else: + * return 0 + */ + __pyx_r = -1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + goto __pyx_L14_return; + } + + /* "aiohttp/_http_parser.pyx":636 + * 'Header name is too long', pyparser._max_field_size, size) + * pyparser._on_header_field(at, length) + * except BaseException as ex: # <<<<<<<<<<<<<< + * pyparser._last_error = ex + * return -1 + */ + /*finally:*/ { + __pyx_L14_return: { + __pyx_t_11 = __pyx_r; + __Pyx_DECREF(__pyx_v_ex); + __pyx_v_ex = NULL; + __pyx_r = __pyx_t_11; + goto __pyx_L6_except_return; + } + } + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "aiohttp/_http_parser.pyx":629 + * cdef HttpParser pyparser = parser.data + * cdef Py_ssize_t size + * try: # <<<<<<<<<<<<<< + * pyparser._on_status_complete() + * size = len(pyparser._raw_name) + length + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "aiohttp/_http_parser.pyx":625 + * + * + * cdef int cb_on_header_field(cparser.http_parser* parser, # <<<<<<<<<<<<<< + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_header_field", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); + __Pyx_XDECREF(__pyx_v_ex); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":643 + * + * + * cdef int cb_on_header_value(cparser.http_parser* parser, # <<<<<<<<<<<<<< + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data + */ + +static int __pyx_f_7aiohttp_12_http_parser_cb_on_header_value(struct http_parser *__pyx_v_parser, char const *__pyx_v_at, size_t __pyx_v_length) { + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; + Py_ssize_t __pyx_v_size; + PyObject *__pyx_v_ex = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + Py_ssize_t __pyx_t_5; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + int __pyx_t_11; + PyObject *__pyx_t_12 = NULL; + __Pyx_RefNannySetupContext("cb_on_header_value", 0); + + /* "aiohttp/_http_parser.pyx":645 + * cdef int cb_on_header_value(cparser.http_parser* parser, + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< + * cdef Py_ssize_t size + * try: + */ + __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":647 + * cdef HttpParser pyparser = parser.data + * cdef Py_ssize_t size + * try: # <<<<<<<<<<<<<< + * size = len(pyparser._raw_value) + length + * if size > pyparser._max_field_size: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":648 + * cdef Py_ssize_t size + * try: + * size = len(pyparser._raw_value) + length # <<<<<<<<<<<<<< + * if size > pyparser._max_field_size: + * raise LineTooLong( + */ + __pyx_t_1 = __pyx_v_pyparser->_raw_value; + __Pyx_INCREF(__pyx_t_1); + if (unlikely(__pyx_t_1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 648, __pyx_L3_error) + } + __pyx_t_5 = PyByteArray_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 648, __pyx_L3_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_size = (__pyx_t_5 + __pyx_v_length); + + /* "aiohttp/_http_parser.pyx":649 + * try: + * size = len(pyparser._raw_value) + length + * if size > pyparser._max_field_size: # <<<<<<<<<<<<<< + * raise LineTooLong( + * 'Header value is too long', pyparser._max_field_size, size) + */ + __pyx_t_6 = ((__pyx_v_size > __pyx_v_pyparser->_max_field_size) != 0); + if (unlikely(__pyx_t_6)) { + + /* "aiohttp/_http_parser.pyx":650 + * size = len(pyparser._raw_value) + length + * if size > pyparser._max_field_size: + * raise LineTooLong( # <<<<<<<<<<<<<< + * 'Header value is too long', pyparser._max_field_size, size) + * pyparser._on_header_value(at, length) + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_LineTooLong); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 650, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "aiohttp/_http_parser.pyx":651 + * if size > pyparser._max_field_size: + * raise LineTooLong( + * 'Header value is too long', pyparser._max_field_size, size) # <<<<<<<<<<<<<< + * pyparser._on_header_value(at, length) + * except BaseException as ex: + */ + __pyx_t_8 = __Pyx_PyInt_FromSize_t(__pyx_v_pyparser->_max_field_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 651, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 651, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = NULL; + __pyx_t_11 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_11 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_7)) { + PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_kp_u_Header_value_is_too_long, __pyx_t_8, __pyx_t_9}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 650, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) { + PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_kp_u_Header_value_is_too_long, __pyx_t_8, __pyx_t_9}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 650, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else + #endif + { + __pyx_t_12 = PyTuple_New(3+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 650, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_12); + if (__pyx_t_10) { + __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL; + } + __Pyx_INCREF(__pyx_kp_u_Header_value_is_too_long); + __Pyx_GIVEREF(__pyx_kp_u_Header_value_is_too_long); + PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_11, __pyx_kp_u_Header_value_is_too_long); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_11, __pyx_t_9); + __pyx_t_8 = 0; + __pyx_t_9 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 650, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 650, __pyx_L3_error) + + /* "aiohttp/_http_parser.pyx":649 + * try: + * size = len(pyparser._raw_value) + length + * if size > pyparser._max_field_size: # <<<<<<<<<<<<<< + * raise LineTooLong( + * 'Header value is too long', pyparser._max_field_size, size) + */ + } + + /* "aiohttp/_http_parser.pyx":652 + * raise LineTooLong( + * 'Header value is too long', pyparser._max_field_size, size) + * pyparser._on_header_value(at, length) # <<<<<<<<<<<<<< + * except BaseException as ex: + * pyparser._last_error = ex + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_header_value(__pyx_v_pyparser, __pyx_v_at, __pyx_v_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 652, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":647 + * cdef HttpParser pyparser = parser.data + * cdef Py_ssize_t size + * try: # <<<<<<<<<<<<<< + * size = len(pyparser._raw_value) + length + * if size > pyparser._max_field_size: + */ + } + + /* "aiohttp/_http_parser.pyx":657 + * return -1 + * else: + * return 0 # <<<<<<<<<<<<<< + * + * + */ + /*else:*/ { + __pyx_r = 0; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "aiohttp/_http_parser.pyx":653 + * 'Header value is too long', pyparser._max_field_size, size) + * pyparser._on_header_value(at, length) + * except BaseException as ex: # <<<<<<<<<<<<<< + * pyparser._last_error = ex + * return -1 + */ + __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); + if (__pyx_t_11) { + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_header_value", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_12) < 0) __PYX_ERR(0, 653, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(__pyx_t_7); + __pyx_v_ex = __pyx_t_7; + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":654 + * pyparser._on_header_value(at, length) + * except BaseException as ex: + * pyparser._last_error = ex # <<<<<<<<<<<<<< + * return -1 + * else: + */ + __Pyx_INCREF(__pyx_v_ex); + __Pyx_GIVEREF(__pyx_v_ex); + __Pyx_GOTREF(__pyx_v_pyparser->_last_error); + __Pyx_DECREF(__pyx_v_pyparser->_last_error); + __pyx_v_pyparser->_last_error = __pyx_v_ex; + + /* "aiohttp/_http_parser.pyx":655 + * except BaseException as ex: + * pyparser._last_error = ex + * return -1 # <<<<<<<<<<<<<< + * else: + * return 0 + */ + __pyx_r = -1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + goto __pyx_L14_return; + } + + /* "aiohttp/_http_parser.pyx":653 + * 'Header value is too long', pyparser._max_field_size, size) + * pyparser._on_header_value(at, length) + * except BaseException as ex: # <<<<<<<<<<<<<< + * pyparser._last_error = ex + * return -1 + */ + /*finally:*/ { + __pyx_L14_return: { + __pyx_t_11 = __pyx_r; + __Pyx_DECREF(__pyx_v_ex); + __pyx_v_ex = NULL; + __pyx_r = __pyx_t_11; + goto __pyx_L6_except_return; + } + } + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "aiohttp/_http_parser.pyx":647 + * cdef HttpParser pyparser = parser.data + * cdef Py_ssize_t size + * try: # <<<<<<<<<<<<<< + * size = len(pyparser._raw_value) + length + * if size > pyparser._max_field_size: + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "aiohttp/_http_parser.pyx":643 + * + * + * cdef int cb_on_header_value(cparser.http_parser* parser, # <<<<<<<<<<<<<< + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_header_value", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); + __Pyx_XDECREF(__pyx_v_ex); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":660 + * + * + * cdef int cb_on_headers_complete(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< + * cdef HttpParser pyparser = parser.data + * try: + */ + +static int __pyx_f_7aiohttp_12_http_parser_cb_on_headers_complete(struct http_parser *__pyx_v_parser) { + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; + PyObject *__pyx_v_exc = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + __Pyx_RefNannySetupContext("cb_on_headers_complete", 0); + + /* "aiohttp/_http_parser.pyx":661 + * + * cdef int cb_on_headers_complete(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< + * try: + * pyparser._on_status_complete() + */ + __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":662 + * cdef int cb_on_headers_complete(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * pyparser._on_status_complete() + * pyparser._on_headers_complete() + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":663 + * cdef HttpParser pyparser = parser.data + * try: + * pyparser._on_status_complete() # <<<<<<<<<<<<<< + * pyparser._on_headers_complete() + * except BaseException as exc: + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_status_complete(__pyx_v_pyparser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 663, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":664 + * try: + * pyparser._on_status_complete() + * pyparser._on_headers_complete() # <<<<<<<<<<<<<< + * except BaseException as exc: + * pyparser._last_error = exc + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_headers_complete(__pyx_v_pyparser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 664, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":662 + * cdef int cb_on_headers_complete(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * pyparser._on_status_complete() + * pyparser._on_headers_complete() + */ + } + + /* "aiohttp/_http_parser.pyx":669 + * return -1 + * else: + * if pyparser._cparser.upgrade or pyparser._cparser.method == 5: # CONNECT # <<<<<<<<<<<<<< + * return 2 + * else: + */ + /*else:*/ { + __pyx_t_6 = (__pyx_v_pyparser->_cparser->upgrade != 0); + if (!__pyx_t_6) { + } else { + __pyx_t_5 = __pyx_t_6; + goto __pyx_L10_bool_binop_done; + } + __pyx_t_6 = ((__pyx_v_pyparser->_cparser->method == 5) != 0); + __pyx_t_5 = __pyx_t_6; + __pyx_L10_bool_binop_done:; + if (__pyx_t_5) { + + /* "aiohttp/_http_parser.pyx":670 + * else: + * if pyparser._cparser.upgrade or pyparser._cparser.method == 5: # CONNECT + * return 2 # <<<<<<<<<<<<<< + * else: + * return 0 + */ + __pyx_r = 2; + goto __pyx_L6_except_return; + + /* "aiohttp/_http_parser.pyx":669 + * return -1 + * else: + * if pyparser._cparser.upgrade or pyparser._cparser.method == 5: # CONNECT # <<<<<<<<<<<<<< + * return 2 + * else: + */ + } + + /* "aiohttp/_http_parser.pyx":672 + * return 2 + * else: + * return 0 # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __pyx_r = 0; + goto __pyx_L6_except_return; + } + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":665 + * pyparser._on_status_complete() + * pyparser._on_headers_complete() + * except BaseException as exc: # <<<<<<<<<<<<<< + * pyparser._last_error = exc + * return -1 + */ + __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); + if (__pyx_t_7) { + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_headers_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_8, &__pyx_t_9) < 0) __PYX_ERR(0, 665, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GOTREF(__pyx_t_9); + __Pyx_INCREF(__pyx_t_8); + __pyx_v_exc = __pyx_t_8; + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":666 + * pyparser._on_headers_complete() + * except BaseException as exc: + * pyparser._last_error = exc # <<<<<<<<<<<<<< + * return -1 + * else: + */ + __Pyx_INCREF(__pyx_v_exc); + __Pyx_GIVEREF(__pyx_v_exc); + __Pyx_GOTREF(__pyx_v_pyparser->_last_error); + __Pyx_DECREF(__pyx_v_pyparser->_last_error); + __pyx_v_pyparser->_last_error = __pyx_v_exc; + + /* "aiohttp/_http_parser.pyx":667 + * except BaseException as exc: + * pyparser._last_error = exc + * return -1 # <<<<<<<<<<<<<< + * else: + * if pyparser._cparser.upgrade or pyparser._cparser.method == 5: # CONNECT + */ + __pyx_r = -1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L16_return; + } + + /* "aiohttp/_http_parser.pyx":665 + * pyparser._on_status_complete() + * pyparser._on_headers_complete() + * except BaseException as exc: # <<<<<<<<<<<<<< + * pyparser._last_error = exc + * return -1 + */ + /*finally:*/ { + __pyx_L16_return: { + __pyx_t_7 = __pyx_r; + __Pyx_DECREF(__pyx_v_exc); + __pyx_v_exc = NULL; + __pyx_r = __pyx_t_7; + goto __pyx_L6_except_return; + } + } + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "aiohttp/_http_parser.pyx":662 + * cdef int cb_on_headers_complete(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * pyparser._on_status_complete() + * pyparser._on_headers_complete() + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "aiohttp/_http_parser.pyx":660 + * + * + * cdef int cb_on_headers_complete(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< + * cdef HttpParser pyparser = parser.data + * try: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_headers_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); + __Pyx_XDECREF(__pyx_v_exc); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":675 + * + * + * cdef int cb_on_body(cparser.http_parser* parser, # <<<<<<<<<<<<<< + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data + */ + +static int __pyx_f_7aiohttp_12_http_parser_cb_on_body(struct http_parser *__pyx_v_parser, char const *__pyx_v_at, size_t __pyx_v_length) { + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; + PyObject *__pyx_v_body = 0; + PyObject *__pyx_v_exc = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + int __pyx_t_10; + int __pyx_t_11; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + int __pyx_t_16; + char const *__pyx_t_17; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + __Pyx_RefNannySetupContext("cb_on_body", 0); + + /* "aiohttp/_http_parser.pyx":677 + * cdef int cb_on_body(cparser.http_parser* parser, + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< + * cdef bytes body = at[:length] + * try: + */ + __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":678 + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data + * cdef bytes body = at[:length] # <<<<<<<<<<<<<< + * try: + * pyparser._payload.feed_data(body, length) + */ + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_at + 0, __pyx_v_length - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 678, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_body = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":679 + * cdef HttpParser pyparser = parser.data + * cdef bytes body = at[:length] + * try: # <<<<<<<<<<<<<< + * pyparser._payload.feed_data(body, length) + * except BaseException as exc: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":680 + * cdef bytes body = at[:length] + * try: + * pyparser._payload.feed_data(body, length) # <<<<<<<<<<<<<< + * except BaseException as exc: + * if pyparser._payload_exception is not None: + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_pyparser->_payload, __pyx_n_s_feed_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 680, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_FromSize_t(__pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 680, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_body, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 680, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_body, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 680, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else + #endif + { + __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 680, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + if (__pyx_t_7) { + __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; + } + __Pyx_INCREF(__pyx_v_body); + __Pyx_GIVEREF(__pyx_v_body); + PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_v_body); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_6); + __pyx_t_6 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 680, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":679 + * cdef HttpParser pyparser = parser.data + * cdef bytes body = at[:length] + * try: # <<<<<<<<<<<<<< + * pyparser._payload.feed_data(body, length) + * except BaseException as exc: + */ + } + + /* "aiohttp/_http_parser.pyx":689 + * return -1 + * else: + * return 0 # <<<<<<<<<<<<<< + * + * + */ + /*else:*/ { + __pyx_r = 0; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "aiohttp/_http_parser.pyx":681 + * try: + * pyparser._payload.feed_data(body, length) + * except BaseException as exc: # <<<<<<<<<<<<<< + * if pyparser._payload_exception is not None: + * pyparser._payload.set_exception(pyparser._payload_exception(str(exc))) + */ + __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); + if (__pyx_t_8) { + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_body", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_9) < 0) __PYX_ERR(0, 681, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_9); + __Pyx_INCREF(__pyx_t_5); + __pyx_v_exc = __pyx_t_5; + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":682 + * pyparser._payload.feed_data(body, length) + * except BaseException as exc: + * if pyparser._payload_exception is not None: # <<<<<<<<<<<<<< + * pyparser._payload.set_exception(pyparser._payload_exception(str(exc))) + * else: + */ + __pyx_t_10 = (__pyx_v_pyparser->_payload_exception != Py_None); + __pyx_t_11 = (__pyx_t_10 != 0); + if (__pyx_t_11) { + + /* "aiohttp/_http_parser.pyx":683 + * except BaseException as exc: + * if pyparser._payload_exception is not None: + * pyparser._payload.set_exception(pyparser._payload_exception(str(exc))) # <<<<<<<<<<<<<< + * else: + * pyparser._payload.set_exception(exc) + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_pyparser->_payload, __pyx_n_s_set_exception); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 683, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_13 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_exc); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 683, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_INCREF(__pyx_v_pyparser->_payload_exception); + __pyx_t_14 = __pyx_v_pyparser->_payload_exception; __pyx_t_15 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_15)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + } + } + __pyx_t_12 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_15, __pyx_t_13) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_13); + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 683, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + } + } + __pyx_t_6 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_14, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_12); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 683, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "aiohttp/_http_parser.pyx":682 + * pyparser._payload.feed_data(body, length) + * except BaseException as exc: + * if pyparser._payload_exception is not None: # <<<<<<<<<<<<<< + * pyparser._payload.set_exception(pyparser._payload_exception(str(exc))) + * else: + */ + goto __pyx_L16; + } + + /* "aiohttp/_http_parser.pyx":685 + * pyparser._payload.set_exception(pyparser._payload_exception(str(exc))) + * else: + * pyparser._payload.set_exception(exc) # <<<<<<<<<<<<<< + * pyparser._payload_error = 1 + * return -1 + */ + /*else*/ { + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_pyparser->_payload, __pyx_n_s_set_exception); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 685, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_12 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + } + } + __pyx_t_6 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_12, __pyx_v_exc) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_exc); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 685, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_L16:; + + /* "aiohttp/_http_parser.pyx":686 + * else: + * pyparser._payload.set_exception(exc) + * pyparser._payload_error = 1 # <<<<<<<<<<<<<< + * return -1 + * else: + */ + __pyx_v_pyparser->_payload_error = 1; + + /* "aiohttp/_http_parser.pyx":687 + * pyparser._payload.set_exception(exc) + * pyparser._payload_error = 1 + * return -1 # <<<<<<<<<<<<<< + * else: + * return 0 + */ + __pyx_r = -1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L13_return; + } + + /* "aiohttp/_http_parser.pyx":681 + * try: + * pyparser._payload.feed_data(body, length) + * except BaseException as exc: # <<<<<<<<<<<<<< + * if pyparser._payload_exception is not None: + * pyparser._payload.set_exception(pyparser._payload_exception(str(exc))) + */ + /*finally:*/ { + __pyx_L14_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __pyx_t_8 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename; + { + __Pyx_DECREF(__pyx_v_exc); + __pyx_v_exc = NULL; + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23); + } + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20); + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17; + goto __pyx_L5_except_error; + } + __pyx_L13_return: { + __pyx_t_16 = __pyx_r; + __Pyx_DECREF(__pyx_v_exc); + __pyx_v_exc = NULL; + __pyx_r = __pyx_t_16; + goto __pyx_L6_except_return; + } + } + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "aiohttp/_http_parser.pyx":679 + * cdef HttpParser pyparser = parser.data + * cdef bytes body = at[:length] + * try: # <<<<<<<<<<<<<< + * pyparser._payload.feed_data(body, length) + * except BaseException as exc: + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "aiohttp/_http_parser.pyx":675 + * + * + * cdef int cb_on_body(cparser.http_parser* parser, # <<<<<<<<<<<<<< + * const char *at, size_t length) except -1: + * cdef HttpParser pyparser = parser.data + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_body", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); + __Pyx_XDECREF(__pyx_v_body); + __Pyx_XDECREF(__pyx_v_exc); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":692 + * + * + * cdef int cb_on_message_complete(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< + * cdef HttpParser pyparser = parser.data + * try: + */ + +static int __pyx_f_7aiohttp_12_http_parser_cb_on_message_complete(struct http_parser *__pyx_v_parser) { + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; + PyObject *__pyx_v_exc = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + __Pyx_RefNannySetupContext("cb_on_message_complete", 0); + + /* "aiohttp/_http_parser.pyx":693 + * + * cdef int cb_on_message_complete(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< + * try: + * pyparser._started = False + */ + __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":694 + * cdef int cb_on_message_complete(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * pyparser._started = False + * pyparser._on_message_complete() + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":695 + * cdef HttpParser pyparser = parser.data + * try: + * pyparser._started = False # <<<<<<<<<<<<<< + * pyparser._on_message_complete() + * except BaseException as exc: + */ + __pyx_v_pyparser->_started = 0; + + /* "aiohttp/_http_parser.pyx":696 + * try: + * pyparser._started = False + * pyparser._on_message_complete() # <<<<<<<<<<<<<< + * except BaseException as exc: + * pyparser._last_error = exc + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_message_complete(__pyx_v_pyparser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 696, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":694 + * cdef int cb_on_message_complete(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * pyparser._started = False + * pyparser._on_message_complete() + */ + } + + /* "aiohttp/_http_parser.pyx":701 + * return -1 + * else: + * return 0 # <<<<<<<<<<<<<< + * + * + */ + /*else:*/ { + __pyx_r = 0; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":697 + * pyparser._started = False + * pyparser._on_message_complete() + * except BaseException as exc: # <<<<<<<<<<<<<< + * pyparser._last_error = exc + * return -1 + */ + __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); + if (__pyx_t_5) { + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_message_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 697, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); + __pyx_v_exc = __pyx_t_6; + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":698 + * pyparser._on_message_complete() + * except BaseException as exc: + * pyparser._last_error = exc # <<<<<<<<<<<<<< + * return -1 + * else: + */ + __Pyx_INCREF(__pyx_v_exc); + __Pyx_GIVEREF(__pyx_v_exc); + __Pyx_GOTREF(__pyx_v_pyparser->_last_error); + __Pyx_DECREF(__pyx_v_pyparser->_last_error); + __pyx_v_pyparser->_last_error = __pyx_v_exc; + + /* "aiohttp/_http_parser.pyx":699 + * except BaseException as exc: + * pyparser._last_error = exc + * return -1 # <<<<<<<<<<<<<< + * else: + * return 0 + */ + __pyx_r = -1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L13_return; + } + + /* "aiohttp/_http_parser.pyx":697 + * pyparser._started = False + * pyparser._on_message_complete() + * except BaseException as exc: # <<<<<<<<<<<<<< + * pyparser._last_error = exc + * return -1 + */ + /*finally:*/ { + __pyx_L13_return: { + __pyx_t_5 = __pyx_r; + __Pyx_DECREF(__pyx_v_exc); + __pyx_v_exc = NULL; + __pyx_r = __pyx_t_5; + goto __pyx_L6_except_return; + } + } + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "aiohttp/_http_parser.pyx":694 + * cdef int cb_on_message_complete(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * pyparser._started = False + * pyparser._on_message_complete() + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "aiohttp/_http_parser.pyx":692 + * + * + * cdef int cb_on_message_complete(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< + * cdef HttpParser pyparser = parser.data + * try: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_message_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); + __Pyx_XDECREF(__pyx_v_exc); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":704 + * + * + * cdef int cb_on_chunk_header(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< + * cdef HttpParser pyparser = parser.data + * try: + */ + +static int __pyx_f_7aiohttp_12_http_parser_cb_on_chunk_header(struct http_parser *__pyx_v_parser) { + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; + PyObject *__pyx_v_exc = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + __Pyx_RefNannySetupContext("cb_on_chunk_header", 0); + + /* "aiohttp/_http_parser.pyx":705 + * + * cdef int cb_on_chunk_header(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< + * try: + * pyparser._on_chunk_header() + */ + __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":706 + * cdef int cb_on_chunk_header(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * pyparser._on_chunk_header() + * except BaseException as exc: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":707 + * cdef HttpParser pyparser = parser.data + * try: + * pyparser._on_chunk_header() # <<<<<<<<<<<<<< + * except BaseException as exc: + * pyparser._last_error = exc + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_chunk_header(__pyx_v_pyparser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 707, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":706 + * cdef int cb_on_chunk_header(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * pyparser._on_chunk_header() + * except BaseException as exc: + */ + } + + /* "aiohttp/_http_parser.pyx":712 + * return -1 + * else: + * return 0 # <<<<<<<<<<<<<< + * + * + */ + /*else:*/ { + __pyx_r = 0; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":708 + * try: + * pyparser._on_chunk_header() + * except BaseException as exc: # <<<<<<<<<<<<<< + * pyparser._last_error = exc + * return -1 + */ + __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); + if (__pyx_t_5) { + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_chunk_header", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 708, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); + __pyx_v_exc = __pyx_t_6; + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":709 + * pyparser._on_chunk_header() + * except BaseException as exc: + * pyparser._last_error = exc # <<<<<<<<<<<<<< + * return -1 + * else: + */ + __Pyx_INCREF(__pyx_v_exc); + __Pyx_GIVEREF(__pyx_v_exc); + __Pyx_GOTREF(__pyx_v_pyparser->_last_error); + __Pyx_DECREF(__pyx_v_pyparser->_last_error); + __pyx_v_pyparser->_last_error = __pyx_v_exc; + + /* "aiohttp/_http_parser.pyx":710 + * except BaseException as exc: + * pyparser._last_error = exc + * return -1 # <<<<<<<<<<<<<< + * else: + * return 0 + */ + __pyx_r = -1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L13_return; + } + + /* "aiohttp/_http_parser.pyx":708 + * try: + * pyparser._on_chunk_header() + * except BaseException as exc: # <<<<<<<<<<<<<< + * pyparser._last_error = exc + * return -1 + */ + /*finally:*/ { + __pyx_L13_return: { + __pyx_t_5 = __pyx_r; + __Pyx_DECREF(__pyx_v_exc); + __pyx_v_exc = NULL; + __pyx_r = __pyx_t_5; + goto __pyx_L6_except_return; + } + } + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "aiohttp/_http_parser.pyx":706 + * cdef int cb_on_chunk_header(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * pyparser._on_chunk_header() + * except BaseException as exc: + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "aiohttp/_http_parser.pyx":704 + * + * + * cdef int cb_on_chunk_header(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< + * cdef HttpParser pyparser = parser.data + * try: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_chunk_header", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); + __Pyx_XDECREF(__pyx_v_exc); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":715 + * + * + * cdef int cb_on_chunk_complete(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< + * cdef HttpParser pyparser = parser.data + * try: + */ + +static int __pyx_f_7aiohttp_12_http_parser_cb_on_chunk_complete(struct http_parser *__pyx_v_parser) { + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; + PyObject *__pyx_v_exc = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + __Pyx_RefNannySetupContext("cb_on_chunk_complete", 0); + + /* "aiohttp/_http_parser.pyx":716 + * + * cdef int cb_on_chunk_complete(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< + * try: + * pyparser._on_chunk_complete() + */ + __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":717 + * cdef int cb_on_chunk_complete(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * pyparser._on_chunk_complete() + * except BaseException as exc: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":718 + * cdef HttpParser pyparser = parser.data + * try: + * pyparser._on_chunk_complete() # <<<<<<<<<<<<<< + * except BaseException as exc: + * pyparser._last_error = exc + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_chunk_complete(__pyx_v_pyparser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 718, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":717 + * cdef int cb_on_chunk_complete(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * pyparser._on_chunk_complete() + * except BaseException as exc: + */ + } + + /* "aiohttp/_http_parser.pyx":723 + * return -1 + * else: + * return 0 # <<<<<<<<<<<<<< + * + * + */ + /*else:*/ { + __pyx_r = 0; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":719 + * try: + * pyparser._on_chunk_complete() + * except BaseException as exc: # <<<<<<<<<<<<<< + * pyparser._last_error = exc + * return -1 + */ + __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); + if (__pyx_t_5) { + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_chunk_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 719, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); + __pyx_v_exc = __pyx_t_6; + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":720 + * pyparser._on_chunk_complete() + * except BaseException as exc: + * pyparser._last_error = exc # <<<<<<<<<<<<<< + * return -1 + * else: + */ + __Pyx_INCREF(__pyx_v_exc); + __Pyx_GIVEREF(__pyx_v_exc); + __Pyx_GOTREF(__pyx_v_pyparser->_last_error); + __Pyx_DECREF(__pyx_v_pyparser->_last_error); + __pyx_v_pyparser->_last_error = __pyx_v_exc; + + /* "aiohttp/_http_parser.pyx":721 + * except BaseException as exc: + * pyparser._last_error = exc + * return -1 # <<<<<<<<<<<<<< + * else: + * return 0 + */ + __pyx_r = -1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L13_return; + } + + /* "aiohttp/_http_parser.pyx":719 + * try: + * pyparser._on_chunk_complete() + * except BaseException as exc: # <<<<<<<<<<<<<< + * pyparser._last_error = exc + * return -1 + */ + /*finally:*/ { + __pyx_L13_return: { + __pyx_t_5 = __pyx_r; + __Pyx_DECREF(__pyx_v_exc); + __pyx_v_exc = NULL; + __pyx_r = __pyx_t_5; + goto __pyx_L6_except_return; + } + } + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "aiohttp/_http_parser.pyx":717 + * cdef int cb_on_chunk_complete(cparser.http_parser* parser) except -1: + * cdef HttpParser pyparser = parser.data + * try: # <<<<<<<<<<<<<< + * pyparser._on_chunk_complete() + * except BaseException as exc: + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "aiohttp/_http_parser.pyx":715 + * + * + * cdef int cb_on_chunk_complete(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< + * cdef HttpParser pyparser = parser.data + * try: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("aiohttp._http_parser.cb_on_chunk_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); + __Pyx_XDECREF(__pyx_v_exc); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":726 + * + * + * cdef parser_error_from_errno(cparser.http_errno errno): # <<<<<<<<<<<<<< + * cdef bytes desc = cparser.http_errno_description(errno) + * + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser_parser_error_from_errno(enum http_errno __pyx_v_errno) { + PyObject *__pyx_v_desc = 0; + PyObject *__pyx_v_cls = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + __Pyx_RefNannySetupContext("parser_error_from_errno", 0); + + /* "aiohttp/_http_parser.pyx":727 + * + * cdef parser_error_from_errno(cparser.http_errno errno): + * cdef bytes desc = cparser.http_errno_description(errno) # <<<<<<<<<<<<<< + * + * if errno in (cparser.HPE_CB_message_begin, + */ + __pyx_t_1 = __Pyx_PyBytes_FromString(http_errno_description(__pyx_v_errno)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_desc = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":729 + * cdef bytes desc = cparser.http_errno_description(errno) + * + * if errno in (cparser.HPE_CB_message_begin, # <<<<<<<<<<<<<< + * cparser.HPE_CB_url, + * cparser.HPE_CB_header_field, + */ + switch (__pyx_v_errno) { + case HPE_CB_message_begin: + case HPE_CB_url: + + /* "aiohttp/_http_parser.pyx":730 + * + * if errno in (cparser.HPE_CB_message_begin, + * cparser.HPE_CB_url, # <<<<<<<<<<<<<< + * cparser.HPE_CB_header_field, + * cparser.HPE_CB_header_value, + */ + case HPE_CB_header_field: + + /* "aiohttp/_http_parser.pyx":731 + * if errno in (cparser.HPE_CB_message_begin, + * cparser.HPE_CB_url, + * cparser.HPE_CB_header_field, # <<<<<<<<<<<<<< + * cparser.HPE_CB_header_value, + * cparser.HPE_CB_headers_complete, + */ + case HPE_CB_header_value: + + /* "aiohttp/_http_parser.pyx":732 + * cparser.HPE_CB_url, + * cparser.HPE_CB_header_field, + * cparser.HPE_CB_header_value, # <<<<<<<<<<<<<< + * cparser.HPE_CB_headers_complete, + * cparser.HPE_CB_body, + */ + case HPE_CB_headers_complete: + + /* "aiohttp/_http_parser.pyx":733 + * cparser.HPE_CB_header_field, + * cparser.HPE_CB_header_value, + * cparser.HPE_CB_headers_complete, # <<<<<<<<<<<<<< + * cparser.HPE_CB_body, + * cparser.HPE_CB_message_complete, + */ + case HPE_CB_body: + + /* "aiohttp/_http_parser.pyx":734 + * cparser.HPE_CB_header_value, + * cparser.HPE_CB_headers_complete, + * cparser.HPE_CB_body, # <<<<<<<<<<<<<< + * cparser.HPE_CB_message_complete, + * cparser.HPE_CB_status, + */ + case HPE_CB_message_complete: + + /* "aiohttp/_http_parser.pyx":735 + * cparser.HPE_CB_headers_complete, + * cparser.HPE_CB_body, + * cparser.HPE_CB_message_complete, # <<<<<<<<<<<<<< + * cparser.HPE_CB_status, + * cparser.HPE_CB_chunk_header, + */ + case HPE_CB_status: + + /* "aiohttp/_http_parser.pyx":736 + * cparser.HPE_CB_body, + * cparser.HPE_CB_message_complete, + * cparser.HPE_CB_status, # <<<<<<<<<<<<<< + * cparser.HPE_CB_chunk_header, + * cparser.HPE_CB_chunk_complete): + */ + case HPE_CB_chunk_header: + + /* "aiohttp/_http_parser.pyx":737 + * cparser.HPE_CB_message_complete, + * cparser.HPE_CB_status, + * cparser.HPE_CB_chunk_header, # <<<<<<<<<<<<<< + * cparser.HPE_CB_chunk_complete): + * cls = BadHttpMessage + */ + case HPE_CB_chunk_complete: + + /* "aiohttp/_http_parser.pyx":739 + * cparser.HPE_CB_chunk_header, + * cparser.HPE_CB_chunk_complete): + * cls = BadHttpMessage # <<<<<<<<<<<<<< + * + * elif errno == cparser.HPE_INVALID_STATUS: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_BadHttpMessage); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 739, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_cls = __pyx_t_1; + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":729 + * cdef bytes desc = cparser.http_errno_description(errno) + * + * if errno in (cparser.HPE_CB_message_begin, # <<<<<<<<<<<<<< + * cparser.HPE_CB_url, + * cparser.HPE_CB_header_field, + */ + break; + case HPE_INVALID_STATUS: + + /* "aiohttp/_http_parser.pyx":742 + * + * elif errno == cparser.HPE_INVALID_STATUS: + * cls = BadStatusLine # <<<<<<<<<<<<<< + * + * elif errno == cparser.HPE_INVALID_METHOD: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_BadStatusLine); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 742, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_cls = __pyx_t_1; + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":741 + * cls = BadHttpMessage + * + * elif errno == cparser.HPE_INVALID_STATUS: # <<<<<<<<<<<<<< + * cls = BadStatusLine + * + */ + break; + case HPE_INVALID_METHOD: + + /* "aiohttp/_http_parser.pyx":745 + * + * elif errno == cparser.HPE_INVALID_METHOD: + * cls = BadStatusLine # <<<<<<<<<<<<<< + * + * elif errno == cparser.HPE_INVALID_URL: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_BadStatusLine); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_cls = __pyx_t_1; + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":744 + * cls = BadStatusLine + * + * elif errno == cparser.HPE_INVALID_METHOD: # <<<<<<<<<<<<<< + * cls = BadStatusLine + * + */ + break; + case HPE_INVALID_URL: + + /* "aiohttp/_http_parser.pyx":748 + * + * elif errno == cparser.HPE_INVALID_URL: + * cls = InvalidURLError # <<<<<<<<<<<<<< + * + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InvalidURLError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 748, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_cls = __pyx_t_1; + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":747 + * cls = BadStatusLine + * + * elif errno == cparser.HPE_INVALID_URL: # <<<<<<<<<<<<<< + * cls = InvalidURLError + * + */ + break; + default: + + /* "aiohttp/_http_parser.pyx":751 + * + * else: + * cls = BadHttpMessage # <<<<<<<<<<<<<< + * + * return cls(desc.decode('latin-1')) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_BadHttpMessage); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_cls = __pyx_t_1; + __pyx_t_1 = 0; + break; + } + + /* "aiohttp/_http_parser.pyx":753 + * cls = BadHttpMessage + * + * return cls(desc.decode('latin-1')) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_decode_bytes(__pyx_v_desc, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 753, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_cls); + __pyx_t_3 = __pyx_v_cls; __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + } + } + __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 753, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_http_parser.pyx":726 + * + * + * cdef parser_error_from_errno(cparser.http_errno errno): # <<<<<<<<<<<<<< + * cdef bytes desc = cparser.http_errno_description(errno) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("aiohttp._http_parser.parser_error_from_errno", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_desc); + __Pyx_XDECREF(__pyx_v_cls); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":756 + * + * + * def parse_url(url): # <<<<<<<<<<<<<< + * cdef: + * Py_buffer py_buf + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_1parse_url(PyObject *__pyx_self, PyObject *__pyx_v_url); /*proto*/ +static PyMethodDef __pyx_mdef_7aiohttp_12_http_parser_1parse_url = {"parse_url", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_1parse_url, METH_O, 0}; +static PyObject *__pyx_pw_7aiohttp_12_http_parser_1parse_url(PyObject *__pyx_self, PyObject *__pyx_v_url) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("parse_url (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_parse_url(__pyx_self, ((PyObject *)__pyx_v_url)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_parse_url(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_url) { + Py_buffer __pyx_v_py_buf; + char *__pyx_v_buf_data; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + char const *__pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + __Pyx_RefNannySetupContext("parse_url", 0); + + /* "aiohttp/_http_parser.pyx":761 + * char* buf_data + * + * PyObject_GetBuffer(url, &py_buf, PyBUF_SIMPLE) # <<<<<<<<<<<<<< + * try: + * buf_data = py_buf.buf + */ + __pyx_t_1 = PyObject_GetBuffer(__pyx_v_url, (&__pyx_v_py_buf), PyBUF_SIMPLE); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 761, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":762 + * + * PyObject_GetBuffer(url, &py_buf, PyBUF_SIMPLE) + * try: # <<<<<<<<<<<<<< + * buf_data = py_buf.buf + * return _parse_url(buf_data, py_buf.len) + */ + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":763 + * PyObject_GetBuffer(url, &py_buf, PyBUF_SIMPLE) + * try: + * buf_data = py_buf.buf # <<<<<<<<<<<<<< + * return _parse_url(buf_data, py_buf.len) + * finally: + */ + __pyx_v_buf_data = ((char *)__pyx_v_py_buf.buf); + + /* "aiohttp/_http_parser.pyx":764 + * try: + * buf_data = py_buf.buf + * return _parse_url(buf_data, py_buf.len) # <<<<<<<<<<<<<< + * finally: + * PyBuffer_Release(&py_buf) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_f_7aiohttp_12_http_parser__parse_url(__pyx_v_buf_data, __pyx_v_py_buf.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 764, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L3_return; + } + + /* "aiohttp/_http_parser.pyx":766 + * return _parse_url(buf_data, py_buf.len) + * finally: + * PyBuffer_Release(&py_buf) # <<<<<<<<<<<<<< + * + * + */ + /*finally:*/ { + __pyx_L4_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + __pyx_t_1 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename; + { + PyBuffer_Release((&__pyx_v_py_buf)); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + } + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7); + __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; + __pyx_lineno = __pyx_t_1; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4; + goto __pyx_L1_error; + } + __pyx_L3_return: { + __pyx_t_10 = __pyx_r; + __pyx_r = 0; + PyBuffer_Release((&__pyx_v_py_buf)); + __pyx_r = __pyx_t_10; + __pyx_t_10 = 0; + goto __pyx_L0; + } + } + + /* "aiohttp/_http_parser.pyx":756 + * + * + * def parse_url(url): # <<<<<<<<<<<<<< + * cdef: + * Py_buffer py_buf + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("aiohttp._http_parser.parse_url", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_parser.pyx":769 + * + * + * cdef _parse_url(char* buf_data, size_t length): # <<<<<<<<<<<<<< + * cdef: + * cparser.http_parser_url* parsed + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser__parse_url(char *__pyx_v_buf_data, size_t __pyx_v_length) { + struct http_parser_url *__pyx_v_parsed; + int __pyx_v_res; + PyObject *__pyx_v_schema = 0; + PyObject *__pyx_v_host = 0; + PyObject *__pyx_v_port = 0; + PyObject *__pyx_v_path = 0; + PyObject *__pyx_v_query = 0; + PyObject *__pyx_v_fragment = 0; + PyObject *__pyx_v_user = 0; + PyObject *__pyx_v_password = 0; + PyObject *__pyx_v_userinfo = 0; + CYTHON_UNUSED PyObject *__pyx_v_result = 0; + int __pyx_v_off; + int __pyx_v_ln; + CYTHON_UNUSED PyObject *__pyx_v_sep = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + uint16_t __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *(*__pyx_t_8)(PyObject *); + PyObject *__pyx_t_9 = NULL; + int __pyx_t_10; + int __pyx_t_11; + char const *__pyx_t_12; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; + __Pyx_RefNannySetupContext("_parse_url", 0); + + /* "aiohttp/_http_parser.pyx":773 + * cparser.http_parser_url* parsed + * int res + * str schema = None # <<<<<<<<<<<<<< + * str host = None + * object port = None + */ + __Pyx_INCREF(Py_None); + __pyx_v_schema = ((PyObject*)Py_None); + + /* "aiohttp/_http_parser.pyx":774 + * int res + * str schema = None + * str host = None # <<<<<<<<<<<<<< + * object port = None + * str path = None + */ + __Pyx_INCREF(Py_None); + __pyx_v_host = ((PyObject*)Py_None); + + /* "aiohttp/_http_parser.pyx":775 + * str schema = None + * str host = None + * object port = None # <<<<<<<<<<<<<< + * str path = None + * str query = None + */ + __Pyx_INCREF(Py_None); + __pyx_v_port = Py_None; + + /* "aiohttp/_http_parser.pyx":776 + * str host = None + * object port = None + * str path = None # <<<<<<<<<<<<<< + * str query = None + * str fragment = None + */ + __Pyx_INCREF(Py_None); + __pyx_v_path = ((PyObject*)Py_None); + + /* "aiohttp/_http_parser.pyx":777 + * object port = None + * str path = None + * str query = None # <<<<<<<<<<<<<< + * str fragment = None + * str user = None + */ + __Pyx_INCREF(Py_None); + __pyx_v_query = ((PyObject*)Py_None); + + /* "aiohttp/_http_parser.pyx":778 + * str path = None + * str query = None + * str fragment = None # <<<<<<<<<<<<<< + * str user = None + * str password = None + */ + __Pyx_INCREF(Py_None); + __pyx_v_fragment = ((PyObject*)Py_None); + + /* "aiohttp/_http_parser.pyx":779 + * str query = None + * str fragment = None + * str user = None # <<<<<<<<<<<<<< + * str password = None + * str userinfo = None + */ + __Pyx_INCREF(Py_None); + __pyx_v_user = ((PyObject*)Py_None); + + /* "aiohttp/_http_parser.pyx":780 + * str fragment = None + * str user = None + * str password = None # <<<<<<<<<<<<<< + * str userinfo = None + * object result = None + */ + __Pyx_INCREF(Py_None); + __pyx_v_password = ((PyObject*)Py_None); + + /* "aiohttp/_http_parser.pyx":781 + * str user = None + * str password = None + * str userinfo = None # <<<<<<<<<<<<<< + * object result = None + * int off + */ + __Pyx_INCREF(Py_None); + __pyx_v_userinfo = ((PyObject*)Py_None); + + /* "aiohttp/_http_parser.pyx":782 + * str password = None + * str userinfo = None + * object result = None # <<<<<<<<<<<<<< + * int off + * int ln + */ + __Pyx_INCREF(Py_None); + __pyx_v_result = Py_None; + + /* "aiohttp/_http_parser.pyx":786 + * int ln + * + * parsed = \ # <<<<<<<<<<<<<< + * PyMem_Malloc(sizeof(cparser.http_parser_url)) + * if parsed is NULL: + */ + __pyx_v_parsed = ((struct http_parser_url *)PyMem_Malloc((sizeof(struct http_parser_url)))); + + /* "aiohttp/_http_parser.pyx":788 + * parsed = \ + * PyMem_Malloc(sizeof(cparser.http_parser_url)) + * if parsed is NULL: # <<<<<<<<<<<<<< + * raise MemoryError() + * cparser.http_parser_url_init(parsed) + */ + __pyx_t_1 = ((__pyx_v_parsed == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_http_parser.pyx":789 + * PyMem_Malloc(sizeof(cparser.http_parser_url)) + * if parsed is NULL: + * raise MemoryError() # <<<<<<<<<<<<<< + * cparser.http_parser_url_init(parsed) + * try: + */ + PyErr_NoMemory(); __PYX_ERR(0, 789, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":788 + * parsed = \ + * PyMem_Malloc(sizeof(cparser.http_parser_url)) + * if parsed is NULL: # <<<<<<<<<<<<<< + * raise MemoryError() + * cparser.http_parser_url_init(parsed) + */ + } + + /* "aiohttp/_http_parser.pyx":790 + * if parsed is NULL: + * raise MemoryError() + * cparser.http_parser_url_init(parsed) # <<<<<<<<<<<<<< + * try: + * res = cparser.http_parser_parse_url(buf_data, length, 0, parsed) + */ + http_parser_url_init(__pyx_v_parsed); + + /* "aiohttp/_http_parser.pyx":791 + * raise MemoryError() + * cparser.http_parser_url_init(parsed) + * try: # <<<<<<<<<<<<<< + * res = cparser.http_parser_parse_url(buf_data, length, 0, parsed) + * + */ + /*try:*/ { + + /* "aiohttp/_http_parser.pyx":792 + * cparser.http_parser_url_init(parsed) + * try: + * res = cparser.http_parser_parse_url(buf_data, length, 0, parsed) # <<<<<<<<<<<<<< + * + * if res == 0: + */ + __pyx_v_res = http_parser_parse_url(__pyx_v_buf_data, __pyx_v_length, 0, __pyx_v_parsed); + + /* "aiohttp/_http_parser.pyx":794 + * res = cparser.http_parser_parse_url(buf_data, length, 0, parsed) + * + * if res == 0: # <<<<<<<<<<<<<< + * if parsed.field_set & (1 << cparser.UF_SCHEMA): + * off = parsed.field_data[cparser.UF_SCHEMA].off + */ + __pyx_t_1 = ((__pyx_v_res == 0) != 0); + if (likely(__pyx_t_1)) { + + /* "aiohttp/_http_parser.pyx":795 + * + * if res == 0: + * if parsed.field_set & (1 << cparser.UF_SCHEMA): # <<<<<<<<<<<<<< + * off = parsed.field_data[cparser.UF_SCHEMA].off + * ln = parsed.field_data[cparser.UF_SCHEMA].len + */ + __pyx_t_1 = ((__pyx_v_parsed->field_set & (1 << UF_SCHEMA)) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_parser.pyx":796 + * if res == 0: + * if parsed.field_set & (1 << cparser.UF_SCHEMA): + * off = parsed.field_data[cparser.UF_SCHEMA].off # <<<<<<<<<<<<<< + * ln = parsed.field_data[cparser.UF_SCHEMA].len + * schema = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + */ + __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_SCHEMA)]).off; + __pyx_v_off = __pyx_t_2; + + /* "aiohttp/_http_parser.pyx":797 + * if parsed.field_set & (1 << cparser.UF_SCHEMA): + * off = parsed.field_data[cparser.UF_SCHEMA].off + * ln = parsed.field_data[cparser.UF_SCHEMA].len # <<<<<<<<<<<<<< + * schema = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + * else: + */ + __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_SCHEMA)]).len; + __pyx_v_ln = __pyx_t_2; + + /* "aiohttp/_http_parser.pyx":798 + * off = parsed.field_data[cparser.UF_SCHEMA].off + * ln = parsed.field_data[cparser.UF_SCHEMA].len + * schema = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< + * else: + * schema = '' + */ + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_buf_data, __pyx_v_off, (__pyx_v_off + __pyx_v_ln), NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 798, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_schema, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":795 + * + * if res == 0: + * if parsed.field_set & (1 << cparser.UF_SCHEMA): # <<<<<<<<<<<<<< + * off = parsed.field_data[cparser.UF_SCHEMA].off + * ln = parsed.field_data[cparser.UF_SCHEMA].len + */ + goto __pyx_L8; + } + + /* "aiohttp/_http_parser.pyx":800 + * schema = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + * else: + * schema = '' # <<<<<<<<<<<<<< + * + * if parsed.field_set & (1 << cparser.UF_HOST): + */ + /*else*/ { + __Pyx_INCREF(__pyx_kp_u__4); + __Pyx_DECREF_SET(__pyx_v_schema, __pyx_kp_u__4); + } + __pyx_L8:; + + /* "aiohttp/_http_parser.pyx":802 + * schema = '' + * + * if parsed.field_set & (1 << cparser.UF_HOST): # <<<<<<<<<<<<<< + * off = parsed.field_data[cparser.UF_HOST].off + * ln = parsed.field_data[cparser.UF_HOST].len + */ + __pyx_t_1 = ((__pyx_v_parsed->field_set & (1 << UF_HOST)) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_parser.pyx":803 + * + * if parsed.field_set & (1 << cparser.UF_HOST): + * off = parsed.field_data[cparser.UF_HOST].off # <<<<<<<<<<<<<< + * ln = parsed.field_data[cparser.UF_HOST].len + * host = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + */ + __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_HOST)]).off; + __pyx_v_off = __pyx_t_2; + + /* "aiohttp/_http_parser.pyx":804 + * if parsed.field_set & (1 << cparser.UF_HOST): + * off = parsed.field_data[cparser.UF_HOST].off + * ln = parsed.field_data[cparser.UF_HOST].len # <<<<<<<<<<<<<< + * host = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + * else: + */ + __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_HOST)]).len; + __pyx_v_ln = __pyx_t_2; + + /* "aiohttp/_http_parser.pyx":805 + * off = parsed.field_data[cparser.UF_HOST].off + * ln = parsed.field_data[cparser.UF_HOST].len + * host = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< + * else: + * host = '' + */ + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_buf_data, __pyx_v_off, (__pyx_v_off + __pyx_v_ln), NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 805, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_host, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":802 + * schema = '' + * + * if parsed.field_set & (1 << cparser.UF_HOST): # <<<<<<<<<<<<<< + * off = parsed.field_data[cparser.UF_HOST].off + * ln = parsed.field_data[cparser.UF_HOST].len + */ + goto __pyx_L9; + } + + /* "aiohttp/_http_parser.pyx":807 + * host = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + * else: + * host = '' # <<<<<<<<<<<<<< + * + * if parsed.field_set & (1 << cparser.UF_PORT): + */ + /*else*/ { + __Pyx_INCREF(__pyx_kp_u__4); + __Pyx_DECREF_SET(__pyx_v_host, __pyx_kp_u__4); + } + __pyx_L9:; + + /* "aiohttp/_http_parser.pyx":809 + * host = '' + * + * if parsed.field_set & (1 << cparser.UF_PORT): # <<<<<<<<<<<<<< + * port = parsed.port + * + */ + __pyx_t_1 = ((__pyx_v_parsed->field_set & (1 << UF_PORT)) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_parser.pyx":810 + * + * if parsed.field_set & (1 << cparser.UF_PORT): + * port = parsed.port # <<<<<<<<<<<<<< + * + * if parsed.field_set & (1 << cparser.UF_PATH): + */ + __pyx_t_3 = __Pyx_PyInt_From_uint16_t(__pyx_v_parsed->port); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 810, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_port, __pyx_t_3); + __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":809 + * host = '' + * + * if parsed.field_set & (1 << cparser.UF_PORT): # <<<<<<<<<<<<<< + * port = parsed.port + * + */ + } + + /* "aiohttp/_http_parser.pyx":812 + * port = parsed.port + * + * if parsed.field_set & (1 << cparser.UF_PATH): # <<<<<<<<<<<<<< + * off = parsed.field_data[cparser.UF_PATH].off + * ln = parsed.field_data[cparser.UF_PATH].len + */ + __pyx_t_1 = ((__pyx_v_parsed->field_set & (1 << UF_PATH)) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_parser.pyx":813 + * + * if parsed.field_set & (1 << cparser.UF_PATH): + * off = parsed.field_data[cparser.UF_PATH].off # <<<<<<<<<<<<<< + * ln = parsed.field_data[cparser.UF_PATH].len + * path = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + */ + __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_PATH)]).off; + __pyx_v_off = __pyx_t_2; + + /* "aiohttp/_http_parser.pyx":814 + * if parsed.field_set & (1 << cparser.UF_PATH): + * off = parsed.field_data[cparser.UF_PATH].off + * ln = parsed.field_data[cparser.UF_PATH].len # <<<<<<<<<<<<<< + * path = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + * else: + */ + __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_PATH)]).len; + __pyx_v_ln = __pyx_t_2; + + /* "aiohttp/_http_parser.pyx":815 + * off = parsed.field_data[cparser.UF_PATH].off + * ln = parsed.field_data[cparser.UF_PATH].len + * path = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< + * else: + * path = '' + */ + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_buf_data, __pyx_v_off, (__pyx_v_off + __pyx_v_ln), NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 815, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_path, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":812 + * port = parsed.port + * + * if parsed.field_set & (1 << cparser.UF_PATH): # <<<<<<<<<<<<<< + * off = parsed.field_data[cparser.UF_PATH].off + * ln = parsed.field_data[cparser.UF_PATH].len + */ + goto __pyx_L11; + } + + /* "aiohttp/_http_parser.pyx":817 + * path = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + * else: + * path = '' # <<<<<<<<<<<<<< + * + * if parsed.field_set & (1 << cparser.UF_QUERY): + */ + /*else*/ { + __Pyx_INCREF(__pyx_kp_u__4); + __Pyx_DECREF_SET(__pyx_v_path, __pyx_kp_u__4); + } + __pyx_L11:; + + /* "aiohttp/_http_parser.pyx":819 + * path = '' + * + * if parsed.field_set & (1 << cparser.UF_QUERY): # <<<<<<<<<<<<<< + * off = parsed.field_data[cparser.UF_QUERY].off + * ln = parsed.field_data[cparser.UF_QUERY].len + */ + __pyx_t_1 = ((__pyx_v_parsed->field_set & (1 << UF_QUERY)) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_parser.pyx":820 + * + * if parsed.field_set & (1 << cparser.UF_QUERY): + * off = parsed.field_data[cparser.UF_QUERY].off # <<<<<<<<<<<<<< + * ln = parsed.field_data[cparser.UF_QUERY].len + * query = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + */ + __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_QUERY)]).off; + __pyx_v_off = __pyx_t_2; + + /* "aiohttp/_http_parser.pyx":821 + * if parsed.field_set & (1 << cparser.UF_QUERY): + * off = parsed.field_data[cparser.UF_QUERY].off + * ln = parsed.field_data[cparser.UF_QUERY].len # <<<<<<<<<<<<<< + * query = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + * else: + */ + __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_QUERY)]).len; + __pyx_v_ln = __pyx_t_2; + + /* "aiohttp/_http_parser.pyx":822 + * off = parsed.field_data[cparser.UF_QUERY].off + * ln = parsed.field_data[cparser.UF_QUERY].len + * query = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< + * else: + * query = '' + */ + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_buf_data, __pyx_v_off, (__pyx_v_off + __pyx_v_ln), NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 822, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_query, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":819 + * path = '' + * + * if parsed.field_set & (1 << cparser.UF_QUERY): # <<<<<<<<<<<<<< + * off = parsed.field_data[cparser.UF_QUERY].off + * ln = parsed.field_data[cparser.UF_QUERY].len + */ + goto __pyx_L12; + } + + /* "aiohttp/_http_parser.pyx":824 + * query = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + * else: + * query = '' # <<<<<<<<<<<<<< + * + * if parsed.field_set & (1 << cparser.UF_FRAGMENT): + */ + /*else*/ { + __Pyx_INCREF(__pyx_kp_u__4); + __Pyx_DECREF_SET(__pyx_v_query, __pyx_kp_u__4); + } + __pyx_L12:; + + /* "aiohttp/_http_parser.pyx":826 + * query = '' + * + * if parsed.field_set & (1 << cparser.UF_FRAGMENT): # <<<<<<<<<<<<<< + * off = parsed.field_data[cparser.UF_FRAGMENT].off + * ln = parsed.field_data[cparser.UF_FRAGMENT].len + */ + __pyx_t_1 = ((__pyx_v_parsed->field_set & (1 << UF_FRAGMENT)) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_parser.pyx":827 + * + * if parsed.field_set & (1 << cparser.UF_FRAGMENT): + * off = parsed.field_data[cparser.UF_FRAGMENT].off # <<<<<<<<<<<<<< + * ln = parsed.field_data[cparser.UF_FRAGMENT].len + * fragment = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + */ + __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_FRAGMENT)]).off; + __pyx_v_off = __pyx_t_2; + + /* "aiohttp/_http_parser.pyx":828 + * if parsed.field_set & (1 << cparser.UF_FRAGMENT): + * off = parsed.field_data[cparser.UF_FRAGMENT].off + * ln = parsed.field_data[cparser.UF_FRAGMENT].len # <<<<<<<<<<<<<< + * fragment = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + * else: + */ + __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_FRAGMENT)]).len; + __pyx_v_ln = __pyx_t_2; + + /* "aiohttp/_http_parser.pyx":829 + * off = parsed.field_data[cparser.UF_FRAGMENT].off + * ln = parsed.field_data[cparser.UF_FRAGMENT].len + * fragment = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< + * else: + * fragment = '' + */ + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_buf_data, __pyx_v_off, (__pyx_v_off + __pyx_v_ln), NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 829, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_fragment, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":826 + * query = '' + * + * if parsed.field_set & (1 << cparser.UF_FRAGMENT): # <<<<<<<<<<<<<< + * off = parsed.field_data[cparser.UF_FRAGMENT].off + * ln = parsed.field_data[cparser.UF_FRAGMENT].len + */ + goto __pyx_L13; + } + + /* "aiohttp/_http_parser.pyx":831 + * fragment = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + * else: + * fragment = '' # <<<<<<<<<<<<<< + * + * if parsed.field_set & (1 << cparser.UF_USERINFO): + */ + /*else*/ { + __Pyx_INCREF(__pyx_kp_u__4); + __Pyx_DECREF_SET(__pyx_v_fragment, __pyx_kp_u__4); + } + __pyx_L13:; + + /* "aiohttp/_http_parser.pyx":833 + * fragment = '' + * + * if parsed.field_set & (1 << cparser.UF_USERINFO): # <<<<<<<<<<<<<< + * off = parsed.field_data[cparser.UF_USERINFO].off + * ln = parsed.field_data[cparser.UF_USERINFO].len + */ + __pyx_t_1 = ((__pyx_v_parsed->field_set & (1 << UF_USERINFO)) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_parser.pyx":834 + * + * if parsed.field_set & (1 << cparser.UF_USERINFO): + * off = parsed.field_data[cparser.UF_USERINFO].off # <<<<<<<<<<<<<< + * ln = parsed.field_data[cparser.UF_USERINFO].len + * userinfo = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + */ + __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_USERINFO)]).off; + __pyx_v_off = __pyx_t_2; + + /* "aiohttp/_http_parser.pyx":835 + * if parsed.field_set & (1 << cparser.UF_USERINFO): + * off = parsed.field_data[cparser.UF_USERINFO].off + * ln = parsed.field_data[cparser.UF_USERINFO].len # <<<<<<<<<<<<<< + * userinfo = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + * + */ + __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_USERINFO)]).len; + __pyx_v_ln = __pyx_t_2; + + /* "aiohttp/_http_parser.pyx":836 + * off = parsed.field_data[cparser.UF_USERINFO].off + * ln = parsed.field_data[cparser.UF_USERINFO].len + * userinfo = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< + * + * user, sep, password = userinfo.partition(':') + */ + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_buf_data, __pyx_v_off, (__pyx_v_off + __pyx_v_ln), NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 836, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_userinfo, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "aiohttp/_http_parser.pyx":838 + * userinfo = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + * + * user, sep, password = userinfo.partition(':') # <<<<<<<<<<<<<< + * + * return URL_build(scheme=schema, + */ + __pyx_t_3 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyUnicode_Type_partition, __pyx_v_userinfo, __pyx_kp_u__11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 838, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { + PyObject* sequence = __pyx_t_3; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 838, __pyx_L5_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_5 = PyList_GET_ITEM(sequence, 1); + __pyx_t_6 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + #else + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 838, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 838, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 838, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_6); + #endif + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 838, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; + index = 0; __pyx_t_4 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L15_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L15_unpacking_failed; + __Pyx_GOTREF(__pyx_t_5); + index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L15_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(0, 838, __pyx_L5_error) + __pyx_t_8 = NULL; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L16_unpacking_done; + __pyx_L15_unpacking_failed:; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_8 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 838, __pyx_L5_error) + __pyx_L16_unpacking_done:; + } + if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 838, __pyx_L5_error) + if (!(likely(PyUnicode_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 838, __pyx_L5_error) + __Pyx_DECREF_SET(__pyx_v_user, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + __pyx_v_sep = __pyx_t_5; + __pyx_t_5 = 0; + __Pyx_DECREF_SET(__pyx_v_password, ((PyObject*)__pyx_t_6)); + __pyx_t_6 = 0; + + /* "aiohttp/_http_parser.pyx":833 + * fragment = '' + * + * if parsed.field_set & (1 << cparser.UF_USERINFO): # <<<<<<<<<<<<<< + * off = parsed.field_data[cparser.UF_USERINFO].off + * ln = parsed.field_data[cparser.UF_USERINFO].len + */ + } + + /* "aiohttp/_http_parser.pyx":840 + * user, sep, password = userinfo.partition(':') + * + * return URL_build(scheme=schema, # <<<<<<<<<<<<<< + * user=user, password=password, host=host, port=port, + * path=path, query=query, fragment=fragment) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 840, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_scheme, __pyx_v_schema) < 0) __PYX_ERR(0, 840, __pyx_L5_error) + + /* "aiohttp/_http_parser.pyx":841 + * + * return URL_build(scheme=schema, + * user=user, password=password, host=host, port=port, # <<<<<<<<<<<<<< + * path=path, query=query, fragment=fragment) + * else: + */ + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_user, __pyx_v_user) < 0) __PYX_ERR(0, 840, __pyx_L5_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_password, __pyx_v_password) < 0) __PYX_ERR(0, 840, __pyx_L5_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_host, __pyx_v_host) < 0) __PYX_ERR(0, 840, __pyx_L5_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_port, __pyx_v_port) < 0) __PYX_ERR(0, 840, __pyx_L5_error) + + /* "aiohttp/_http_parser.pyx":842 + * return URL_build(scheme=schema, + * user=user, password=password, host=host, port=port, + * path=path, query=query, fragment=fragment) # <<<<<<<<<<<<<< + * else: + * raise InvalidURLError("invalid url {!r}".format(buf_data)) + */ + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_path, __pyx_v_path) < 0) __PYX_ERR(0, 840, __pyx_L5_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_query, __pyx_v_query) < 0) __PYX_ERR(0, 840, __pyx_L5_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_fragment, __pyx_v_fragment) < 0) __PYX_ERR(0, 840, __pyx_L5_error) + + /* "aiohttp/_http_parser.pyx":840 + * user, sep, password = userinfo.partition(':') + * + * return URL_build(scheme=schema, # <<<<<<<<<<<<<< + * user=user, password=password, host=host, port=port, + * path=path, query=query, fragment=fragment) + */ + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_7aiohttp_12_http_parser_URL_build, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 840, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L4_return; + + /* "aiohttp/_http_parser.pyx":794 + * res = cparser.http_parser_parse_url(buf_data, length, 0, parsed) + * + * if res == 0: # <<<<<<<<<<<<<< + * if parsed.field_set & (1 << cparser.UF_SCHEMA): + * off = parsed.field_data[cparser.UF_SCHEMA].off + */ + } + + /* "aiohttp/_http_parser.pyx":844 + * path=path, query=query, fragment=fragment) + * else: + * raise InvalidURLError("invalid url {!r}".format(buf_data)) # <<<<<<<<<<<<<< + * finally: + * PyMem_Free(parsed) + */ + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InvalidURLError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 844, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_invalid_url_r, __pyx_n_s_format); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 844, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = __Pyx_PyBytes_FromString(__pyx_v_buf_data); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 844, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_5 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 844, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + } + } + __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(0, 844, __pyx_L5_error) + } + } + + /* "aiohttp/_http_parser.pyx":846 + * raise InvalidURLError("invalid url {!r}".format(buf_data)) + * finally: + * PyMem_Free(parsed) # <<<<<<<<<<<<<< + */ + /*finally:*/ { + __pyx_L5_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_14); + __Pyx_XGOTREF(__pyx_t_15); + __Pyx_XGOTREF(__pyx_t_16); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_18); + __pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename; + { + PyMem_Free(__pyx_v_parsed); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_16); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18); + } + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_14); + __Pyx_XGIVEREF(__pyx_t_15); + __Pyx_ErrRestore(__pyx_t_13, __pyx_t_14, __pyx_t_15); + __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; + __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12; + goto __pyx_L1_error; + } + __pyx_L4_return: { + __pyx_t_18 = __pyx_r; + __pyx_r = 0; + PyMem_Free(__pyx_v_parsed); + __pyx_r = __pyx_t_18; + __pyx_t_18 = 0; + goto __pyx_L0; + } + } + + /* "aiohttp/_http_parser.pyx":769 + * + * + * cdef _parse_url(char* buf_data, size_t length): # <<<<<<<<<<<<<< + * cdef: + * cparser.http_parser_url* parsed + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("aiohttp._http_parser._parse_url", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_schema); + __Pyx_XDECREF(__pyx_v_host); + __Pyx_XDECREF(__pyx_v_port); + __Pyx_XDECREF(__pyx_v_path); + __Pyx_XDECREF(__pyx_v_query); + __Pyx_XDECREF(__pyx_v_fragment); + __Pyx_XDECREF(__pyx_v_user); + __Pyx_XDECREF(__pyx_v_password); + __Pyx_XDECREF(__pyx_v_userinfo); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_sep); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_RawRequestMessage(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_3__pyx_unpickle_RawRequestMessage(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_7aiohttp_12_http_parser_3__pyx_unpickle_RawRequestMessage = {"__pyx_unpickle_RawRequestMessage", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_12_http_parser_3__pyx_unpickle_RawRequestMessage, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_7aiohttp_12_http_parser_3__pyx_unpickle_RawRequestMessage(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_RawRequestMessage (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_RawRequestMessage", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_RawRequestMessage", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_RawRequestMessage") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + } + __pyx_v___pyx_type = values[0]; + __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_v___pyx_state = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_RawRequestMessage", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._http_parser.__pyx_unpickle_RawRequestMessage", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_2__pyx_unpickle_RawRequestMessage(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_2__pyx_unpickle_RawRequestMessage(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + __Pyx_RefNannySetupContext("__pyx_unpickle_RawRequestMessage", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0x1408252: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x1408252 = (chunked, compression, headers, method, path, raw_headers, should_close, upgrade, url, version))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x1408252) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0x1408252: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x1408252 = (chunked, compression, headers, method, path, raw_headers, should_close, upgrade, url, version))" % __pyx_checksum) + * __pyx_result = RawRequestMessage.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0x1408252: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x1408252 = (chunked, compression, headers, method, path, raw_headers, should_close, upgrade, url, version))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = RawRequestMessage.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x14, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0x1408252: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x1408252 = (chunked, compression, headers, method, path, raw_headers, should_close, upgrade, url, version))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x1408252 = (chunked, compression, headers, method, path, raw_headers, should_close, upgrade, url, version))" % __pyx_checksum) + * __pyx_result = RawRequestMessage.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_7aiohttp_12_http_parser_RawRequestMessage), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x1408252 = (chunked, compression, headers, method, path, raw_headers, should_close, upgrade, url, version))" % __pyx_checksum) + * __pyx_result = RawRequestMessage.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = RawRequestMessage.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawRequestMessage__set_state(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x1408252 = (chunked, compression, headers, method, path, raw_headers, should_close, upgrade, url, version))" % __pyx_checksum) + * __pyx_result = RawRequestMessage.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v___pyx_result); + __pyx_r = __pyx_v___pyx_result; + goto __pyx_L0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_RawRequestMessage(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("aiohttp._http_parser.__pyx_unpickle_RawRequestMessage", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v___pyx_PickleError); + __Pyx_XDECREF(__pyx_v___pyx_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":11 + * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] + * if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawRequestMessage__set_state(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + __Pyx_RefNannySetupContext("__pyx_unpickle_RawRequestMessage__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[10]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->chunked); + __Pyx_DECREF(__pyx_v___pyx_result->chunked); + __pyx_v___pyx_result->chunked = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->compression); + __Pyx_DECREF(__pyx_v___pyx_result->compression); + __pyx_v___pyx_result->compression = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->headers); + __Pyx_DECREF(__pyx_v___pyx_result->headers); + __pyx_v___pyx_result->headers = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->method); + __Pyx_DECREF(__pyx_v___pyx_result->method); + __pyx_v___pyx_result->method = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->path); + __Pyx_DECREF(__pyx_v___pyx_result->path); + __pyx_v___pyx_result->path = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->raw_headers); + __Pyx_DECREF(__pyx_v___pyx_result->raw_headers); + __pyx_v___pyx_result->raw_headers = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->should_close); + __Pyx_DECREF(__pyx_v___pyx_result->should_close); + __pyx_v___pyx_result->should_close = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->upgrade); + __Pyx_DECREF(__pyx_v___pyx_result->upgrade); + __pyx_v___pyx_result->upgrade = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->url); + __Pyx_DECREF(__pyx_v___pyx_result->url); + __pyx_v___pyx_result->url = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 9, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->version); + __Pyx_DECREF(__pyx_v___pyx_result->version); + __pyx_v___pyx_result->version = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] + * if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[10]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 13, __pyx_L1_error) + } + __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = ((__pyx_t_3 > 10) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 != 0); + __pyx_t_2 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "(tree fragment)":14 + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] + * if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[10]) # <<<<<<<<<<<<<< + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 14, __pyx_L1_error) + } + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 10, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + } + } + __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] + * if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[10]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] + * if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("aiohttp._http_parser.__pyx_unpickle_RawRequestMessage__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_RawResponseMessage(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_parser_5__pyx_unpickle_RawResponseMessage(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_7aiohttp_12_http_parser_5__pyx_unpickle_RawResponseMessage = {"__pyx_unpickle_RawResponseMessage", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_12_http_parser_5__pyx_unpickle_RawResponseMessage, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_7aiohttp_12_http_parser_5__pyx_unpickle_RawResponseMessage(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_RawResponseMessage (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_RawResponseMessage", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_RawResponseMessage", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_RawResponseMessage") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + } + __pyx_v___pyx_type = values[0]; + __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_v___pyx_state = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_RawResponseMessage", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._http_parser.__pyx_unpickle_RawResponseMessage", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_7aiohttp_12_http_parser_4__pyx_unpickle_RawResponseMessage(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_parser_4__pyx_unpickle_RawResponseMessage(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + __Pyx_RefNannySetupContext("__pyx_unpickle_RawResponseMessage", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xc7706dc: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc7706dc = (chunked, code, compression, headers, raw_headers, reason, should_close, upgrade, version))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xc7706dc) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0xc7706dc: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc7706dc = (chunked, code, compression, headers, raw_headers, reason, should_close, upgrade, version))" % __pyx_checksum) + * __pyx_result = RawResponseMessage.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0xc7706dc: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc7706dc = (chunked, code, compression, headers, raw_headers, reason, should_close, upgrade, version))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = RawResponseMessage.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xc7, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xc7706dc: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc7706dc = (chunked, code, compression, headers, raw_headers, reason, should_close, upgrade, version))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc7706dc = (chunked, code, compression, headers, raw_headers, reason, should_close, upgrade, version))" % __pyx_checksum) + * __pyx_result = RawResponseMessage.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_RawResponseMessage__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_7aiohttp_12_http_parser_RawResponseMessage), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc7706dc = (chunked, code, compression, headers, raw_headers, reason, should_close, upgrade, version))" % __pyx_checksum) + * __pyx_result = RawResponseMessage.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_RawResponseMessage__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = RawResponseMessage.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_RawResponseMessage__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_RawResponseMessage__set_state(RawResponseMessage __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawResponseMessage__set_state(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc7706dc = (chunked, code, compression, headers, raw_headers, reason, should_close, upgrade, version))" % __pyx_checksum) + * __pyx_result = RawResponseMessage.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_RawResponseMessage__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_RawResponseMessage__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_RawResponseMessage__set_state(RawResponseMessage __pyx_result, tuple __pyx_state): + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.code = __pyx_state[1]; __pyx_result.compression = __pyx_state[2]; __pyx_result.headers = __pyx_state[3]; __pyx_result.raw_headers = __pyx_state[4]; __pyx_result.reason = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.version = __pyx_state[8] + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v___pyx_result); + __pyx_r = __pyx_v___pyx_result; + goto __pyx_L0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_RawResponseMessage(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("aiohttp._http_parser.__pyx_unpickle_RawResponseMessage", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v___pyx_PickleError); + __Pyx_XDECREF(__pyx_v___pyx_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":11 + * __pyx_unpickle_RawResponseMessage__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_RawResponseMessage__set_state(RawResponseMessage __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.code = __pyx_state[1]; __pyx_result.compression = __pyx_state[2]; __pyx_result.headers = __pyx_state[3]; __pyx_result.raw_headers = __pyx_state[4]; __pyx_result.reason = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.version = __pyx_state[8] + * if len(__pyx_state) > 9 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawResponseMessage__set_state(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + Py_ssize_t __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + __Pyx_RefNannySetupContext("__pyx_unpickle_RawResponseMessage__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_RawResponseMessage__set_state(RawResponseMessage __pyx_result, tuple __pyx_state): + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.code = __pyx_state[1]; __pyx_result.compression = __pyx_state[2]; __pyx_result.headers = __pyx_state[3]; __pyx_result.raw_headers = __pyx_state[4]; __pyx_result.reason = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.version = __pyx_state[8] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 9 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[9]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->chunked); + __Pyx_DECREF(__pyx_v___pyx_result->chunked); + __pyx_v___pyx_result->chunked = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->code = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->compression); + __Pyx_DECREF(__pyx_v___pyx_result->compression); + __pyx_v___pyx_result->compression = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->headers); + __Pyx_DECREF(__pyx_v___pyx_result->headers); + __pyx_v___pyx_result->headers = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->raw_headers); + __Pyx_DECREF(__pyx_v___pyx_result->raw_headers); + __pyx_v___pyx_result->raw_headers = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->reason); + __Pyx_DECREF(__pyx_v___pyx_result->reason); + __pyx_v___pyx_result->reason = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->should_close); + __Pyx_DECREF(__pyx_v___pyx_result->should_close); + __pyx_v___pyx_result->should_close = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->upgrade); + __Pyx_DECREF(__pyx_v___pyx_result->upgrade); + __pyx_v___pyx_result->upgrade = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->version); + __Pyx_DECREF(__pyx_v___pyx_result->version); + __pyx_v___pyx_result->version = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_RawResponseMessage__set_state(RawResponseMessage __pyx_result, tuple __pyx_state): + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.code = __pyx_state[1]; __pyx_result.compression = __pyx_state[2]; __pyx_result.headers = __pyx_state[3]; __pyx_result.raw_headers = __pyx_state[4]; __pyx_result.reason = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.version = __pyx_state[8] + * if len(__pyx_state) > 9 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[9]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 13, __pyx_L1_error) + } + __pyx_t_4 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = ((__pyx_t_4 > 9) != 0); + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_6 = (__pyx_t_5 != 0); + __pyx_t_3 = __pyx_t_6; + __pyx_L4_bool_binop_done:; + if (__pyx_t_3) { + + /* "(tree fragment)":14 + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.code = __pyx_state[1]; __pyx_result.compression = __pyx_state[2]; __pyx_result.headers = __pyx_state[3]; __pyx_result.raw_headers = __pyx_state[4]; __pyx_result.reason = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.version = __pyx_state[8] + * if len(__pyx_state) > 9 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[9]) # <<<<<<<<<<<<<< + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 14, __pyx_L1_error) + } + __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 9, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + } + } + __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_RawResponseMessage__set_state(RawResponseMessage __pyx_result, tuple __pyx_state): + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.code = __pyx_state[1]; __pyx_result.compression = __pyx_state[2]; __pyx_result.headers = __pyx_state[3]; __pyx_result.raw_headers = __pyx_state[4]; __pyx_result.reason = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.version = __pyx_state[8] + * if len(__pyx_state) > 9 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[9]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_RawResponseMessage__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_RawResponseMessage__set_state(RawResponseMessage __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.code = __pyx_state[1]; __pyx_result.compression = __pyx_state[2]; __pyx_result.headers = __pyx_state[3]; __pyx_result.raw_headers = __pyx_state[4]; __pyx_result.reason = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.version = __pyx_state[8] + * if len(__pyx_state) > 9 and hasattr(__pyx_result, '__dict__'): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("aiohttp._http_parser.__pyx_unpickle_RawResponseMessage__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_freelist_7aiohttp_12_http_parser_RawRequestMessage[250]; +static int __pyx_freecount_7aiohttp_12_http_parser_RawRequestMessage = 0; + +static PyObject *__pyx_tp_new_7aiohttp_12_http_parser_RawRequestMessage(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *p; + PyObject *o; + if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7aiohttp_12_http_parser_RawRequestMessage > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage)) & ((t->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)) == 0))) { + o = (PyObject*)__pyx_freelist_7aiohttp_12_http_parser_RawRequestMessage[--__pyx_freecount_7aiohttp_12_http_parser_RawRequestMessage]; + memset(o, 0, sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else { + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + } + p = ((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)o); + p->method = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->path = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->version = Py_None; Py_INCREF(Py_None); + p->headers = Py_None; Py_INCREF(Py_None); + p->raw_headers = Py_None; Py_INCREF(Py_None); + p->should_close = Py_None; Py_INCREF(Py_None); + p->compression = Py_None; Py_INCREF(Py_None); + p->upgrade = Py_None; Py_INCREF(Py_None); + p->chunked = Py_None; Py_INCREF(Py_None); + p->url = Py_None; Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_7aiohttp_12_http_parser_RawRequestMessage(PyObject *o) { + struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *p = (struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->method); + Py_CLEAR(p->path); + Py_CLEAR(p->version); + Py_CLEAR(p->headers); + Py_CLEAR(p->raw_headers); + Py_CLEAR(p->should_close); + Py_CLEAR(p->compression); + Py_CLEAR(p->upgrade); + Py_CLEAR(p->chunked); + Py_CLEAR(p->url); + if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7aiohttp_12_http_parser_RawRequestMessage < 250) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage)) & ((Py_TYPE(o)->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)) == 0))) { + __pyx_freelist_7aiohttp_12_http_parser_RawRequestMessage[__pyx_freecount_7aiohttp_12_http_parser_RawRequestMessage++] = ((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)o); + } else { + (*Py_TYPE(o)->tp_free)(o); + } +} + +static int __pyx_tp_traverse_7aiohttp_12_http_parser_RawRequestMessage(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *p = (struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)o; + if (p->version) { + e = (*v)(p->version, a); if (e) return e; + } + if (p->headers) { + e = (*v)(p->headers, a); if (e) return e; + } + if (p->raw_headers) { + e = (*v)(p->raw_headers, a); if (e) return e; + } + if (p->should_close) { + e = (*v)(p->should_close, a); if (e) return e; + } + if (p->compression) { + e = (*v)(p->compression, a); if (e) return e; + } + if (p->upgrade) { + e = (*v)(p->upgrade, a); if (e) return e; + } + if (p->chunked) { + e = (*v)(p->chunked, a); if (e) return e; + } + if (p->url) { + e = (*v)(p->url, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_7aiohttp_12_http_parser_RawRequestMessage(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *p = (struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)o; + tmp = ((PyObject*)p->version); + p->version = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->headers); + p->headers = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->raw_headers); + p->raw_headers = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->should_close); + p->should_close = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->compression); + p->compression = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->upgrade); + p->upgrade = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->chunked); + p->chunked = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->url); + p->url = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_method(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_6method_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_path(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_4path_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_version(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7version_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_headers(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7headers_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_raw_headers(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_11raw_headers_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_should_close(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_12should_close_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_compression(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_11compression_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_upgrade(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7upgrade_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_chunked(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7chunked_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_url(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_3url_1__get__(o); +} + +static PyMethodDef __pyx_methods_7aiohttp_12_http_parser_RawRequestMessage[] = { + {"_replace", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_5_replace, METH_VARARGS|METH_KEYWORDS, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_9__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_7aiohttp_12_http_parser_RawRequestMessage[] = { + {(char *)"method", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_method, 0, (char *)0, 0}, + {(char *)"path", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_path, 0, (char *)0, 0}, + {(char *)"version", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_version, 0, (char *)0, 0}, + {(char *)"headers", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_headers, 0, (char *)0, 0}, + {(char *)"raw_headers", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_raw_headers, 0, (char *)0, 0}, + {(char *)"should_close", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_should_close, 0, (char *)0, 0}, + {(char *)"compression", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_compression, 0, (char *)0, 0}, + {(char *)"upgrade", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_upgrade, 0, (char *)0, 0}, + {(char *)"chunked", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_chunked, 0, (char *)0, 0}, + {(char *)"url", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_url, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type_7aiohttp_12_http_parser_RawRequestMessage = { + PyVarObject_HEAD_INIT(0, 0) + "aiohttp._http_parser.RawRequestMessage", /*tp_name*/ + sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_7aiohttp_12_http_parser_RawRequestMessage, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_3__repr__, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_7aiohttp_12_http_parser_RawRequestMessage, /*tp_traverse*/ + __pyx_tp_clear_7aiohttp_12_http_parser_RawRequestMessage, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_7aiohttp_12_http_parser_RawRequestMessage, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_7aiohttp_12_http_parser_RawRequestMessage, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_7aiohttp_12_http_parser_RawRequestMessage, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif +}; + +static struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_freelist_7aiohttp_12_http_parser_RawResponseMessage[250]; +static int __pyx_freecount_7aiohttp_12_http_parser_RawResponseMessage = 0; + +static PyObject *__pyx_tp_new_7aiohttp_12_http_parser_RawResponseMessage(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *p; + PyObject *o; + if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7aiohttp_12_http_parser_RawResponseMessage > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage)) & ((t->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)) == 0))) { + o = (PyObject*)__pyx_freelist_7aiohttp_12_http_parser_RawResponseMessage[--__pyx_freecount_7aiohttp_12_http_parser_RawResponseMessage]; + memset(o, 0, sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else { + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + } + p = ((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)o); + p->version = Py_None; Py_INCREF(Py_None); + p->reason = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->headers = Py_None; Py_INCREF(Py_None); + p->raw_headers = Py_None; Py_INCREF(Py_None); + p->should_close = Py_None; Py_INCREF(Py_None); + p->compression = Py_None; Py_INCREF(Py_None); + p->upgrade = Py_None; Py_INCREF(Py_None); + p->chunked = Py_None; Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_7aiohttp_12_http_parser_RawResponseMessage(PyObject *o) { + struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *p = (struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->version); + Py_CLEAR(p->reason); + Py_CLEAR(p->headers); + Py_CLEAR(p->raw_headers); + Py_CLEAR(p->should_close); + Py_CLEAR(p->compression); + Py_CLEAR(p->upgrade); + Py_CLEAR(p->chunked); + if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7aiohttp_12_http_parser_RawResponseMessage < 250) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage)) & ((Py_TYPE(o)->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)) == 0))) { + __pyx_freelist_7aiohttp_12_http_parser_RawResponseMessage[__pyx_freecount_7aiohttp_12_http_parser_RawResponseMessage++] = ((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)o); + } else { + (*Py_TYPE(o)->tp_free)(o); + } +} + +static int __pyx_tp_traverse_7aiohttp_12_http_parser_RawResponseMessage(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *p = (struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)o; + if (p->version) { + e = (*v)(p->version, a); if (e) return e; + } + if (p->headers) { + e = (*v)(p->headers, a); if (e) return e; + } + if (p->raw_headers) { + e = (*v)(p->raw_headers, a); if (e) return e; + } + if (p->should_close) { + e = (*v)(p->should_close, a); if (e) return e; + } + if (p->compression) { + e = (*v)(p->compression, a); if (e) return e; + } + if (p->upgrade) { + e = (*v)(p->upgrade, a); if (e) return e; + } + if (p->chunked) { + e = (*v)(p->chunked, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_7aiohttp_12_http_parser_RawResponseMessage(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *p = (struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)o; + tmp = ((PyObject*)p->version); + p->version = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->headers); + p->headers = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->raw_headers); + p->raw_headers = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->should_close); + p->should_close = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->compression); + p->compression = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->upgrade); + p->upgrade = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->chunked); + p->chunked = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_version(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7version_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_code(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_4code_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_reason(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_6reason_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_headers(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7headers_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_raw_headers(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_11raw_headers_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_should_close(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_12should_close_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_compression(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_11compression_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_upgrade(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7upgrade_1__get__(o); +} + +static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_chunked(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7chunked_1__get__(o); +} + +static PyMethodDef __pyx_methods_7aiohttp_12_http_parser_RawResponseMessage[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_5__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_7aiohttp_12_http_parser_RawResponseMessage[] = { + {(char *)"version", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_version, 0, (char *)0, 0}, + {(char *)"code", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_code, 0, (char *)0, 0}, + {(char *)"reason", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_reason, 0, (char *)0, 0}, + {(char *)"headers", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_headers, 0, (char *)0, 0}, + {(char *)"raw_headers", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_raw_headers, 0, (char *)0, 0}, + {(char *)"should_close", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_should_close, 0, (char *)0, 0}, + {(char *)"compression", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_compression, 0, (char *)0, 0}, + {(char *)"upgrade", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_upgrade, 0, (char *)0, 0}, + {(char *)"chunked", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_chunked, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type_7aiohttp_12_http_parser_RawResponseMessage = { + PyVarObject_HEAD_INIT(0, 0) + "aiohttp._http_parser.RawResponseMessage", /*tp_name*/ + sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_7aiohttp_12_http_parser_RawResponseMessage, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_3__repr__, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_7aiohttp_12_http_parser_RawResponseMessage, /*tp_traverse*/ + __pyx_tp_clear_7aiohttp_12_http_parser_RawResponseMessage, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_7aiohttp_12_http_parser_RawResponseMessage, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_7aiohttp_12_http_parser_RawResponseMessage, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_7aiohttp_12_http_parser_RawResponseMessage, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif +}; +static struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser __pyx_vtable_7aiohttp_12_http_parser_HttpParser; + +static PyObject *__pyx_tp_new_7aiohttp_12_http_parser_HttpParser(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)o); + p->__pyx_vtab = __pyx_vtabptr_7aiohttp_12_http_parser_HttpParser; + p->_raw_name = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->_raw_value = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->_protocol = Py_None; Py_INCREF(Py_None); + p->_loop = Py_None; Py_INCREF(Py_None); + p->_timer = Py_None; Py_INCREF(Py_None); + p->_url = Py_None; Py_INCREF(Py_None); + p->_buf = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->_path = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->_reason = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->_headers = Py_None; Py_INCREF(Py_None); + p->_raw_headers = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->_messages = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->_payload = Py_None; Py_INCREF(Py_None); + p->_payload_exception = Py_None; Py_INCREF(Py_None); + p->_last_error = Py_None; Py_INCREF(Py_None); + p->_content_encoding = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->py_buf.obj = NULL; + if (unlikely(__pyx_pw_7aiohttp_12_http_parser_10HttpParser_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad; + return o; + bad: + Py_DECREF(o); o = 0; + return NULL; +} + +static void __pyx_tp_dealloc_7aiohttp_12_http_parser_HttpParser(PyObject *o) { + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *p = (struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + ++Py_REFCNT(o); + __pyx_pw_7aiohttp_12_http_parser_10HttpParser_3__dealloc__(o); + --Py_REFCNT(o); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->_raw_name); + Py_CLEAR(p->_raw_value); + Py_CLEAR(p->_protocol); + Py_CLEAR(p->_loop); + Py_CLEAR(p->_timer); + Py_CLEAR(p->_url); + Py_CLEAR(p->_buf); + Py_CLEAR(p->_path); + Py_CLEAR(p->_reason); + Py_CLEAR(p->_headers); + Py_CLEAR(p->_raw_headers); + Py_CLEAR(p->_messages); + Py_CLEAR(p->_payload); + Py_CLEAR(p->_payload_exception); + Py_CLEAR(p->_last_error); + Py_CLEAR(p->_content_encoding); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_7aiohttp_12_http_parser_HttpParser(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *p = (struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)o; + if (p->_protocol) { + e = (*v)(p->_protocol, a); if (e) return e; + } + if (p->_loop) { + e = (*v)(p->_loop, a); if (e) return e; + } + if (p->_timer) { + e = (*v)(p->_timer, a); if (e) return e; + } + if (p->_url) { + e = (*v)(p->_url, a); if (e) return e; + } + if (p->_headers) { + e = (*v)(p->_headers, a); if (e) return e; + } + if (p->_raw_headers) { + e = (*v)(p->_raw_headers, a); if (e) return e; + } + if (p->_messages) { + e = (*v)(p->_messages, a); if (e) return e; + } + if (p->_payload) { + e = (*v)(p->_payload, a); if (e) return e; + } + if (p->_payload_exception) { + e = (*v)(p->_payload_exception, a); if (e) return e; + } + if (p->_last_error) { + e = (*v)(p->_last_error, a); if (e) return e; + } + if (p->py_buf.obj) { + e = (*v)(p->py_buf.obj, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_7aiohttp_12_http_parser_HttpParser(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *p = (struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)o; + tmp = ((PyObject*)p->_protocol); + p->_protocol = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_loop); + p->_loop = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_timer); + p->_timer = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_url); + p->_url = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_headers); + p->_headers = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_raw_headers); + p->_raw_headers = ((PyObject*)Py_None); Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_messages); + p->_messages = ((PyObject*)Py_None); Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_payload); + p->_payload = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_payload_exception); + p->_payload_exception = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_last_error); + p->_last_error = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + Py_CLEAR(p->py_buf.obj); + return 0; +} + +static PyMethodDef __pyx_methods_7aiohttp_12_http_parser_HttpParser[] = { + {"feed_eof", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_10HttpParser_5feed_eof, METH_NOARGS, 0}, + {"feed_data", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_10HttpParser_7feed_data, METH_O, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_10HttpParser_9__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_10HttpParser_11__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type_7aiohttp_12_http_parser_HttpParser = { + PyVarObject_HEAD_INIT(0, 0) + "aiohttp._http_parser.HttpParser", /*tp_name*/ + sizeof(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_7aiohttp_12_http_parser_HttpParser, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_7aiohttp_12_http_parser_HttpParser, /*tp_traverse*/ + __pyx_tp_clear_7aiohttp_12_http_parser_HttpParser, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_7aiohttp_12_http_parser_HttpParser, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_7aiohttp_12_http_parser_HttpParser, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif +}; +static struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpRequestParser __pyx_vtable_7aiohttp_12_http_parser_HttpRequestParser; + +static PyObject *__pyx_tp_new_7aiohttp_12_http_parser_HttpRequestParser(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *p; + PyObject *o = __pyx_tp_new_7aiohttp_12_http_parser_HttpParser(t, a, k); + if (unlikely(!o)) return 0; + p = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *)o); + p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser*)__pyx_vtabptr_7aiohttp_12_http_parser_HttpRequestParser; + return o; +} + +static PyMethodDef __pyx_methods_7aiohttp_12_http_parser_HttpRequestParser[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_3__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_5__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type_7aiohttp_12_http_parser_HttpRequestParser = { + PyVarObject_HEAD_INIT(0, 0) + "aiohttp._http_parser.HttpRequestParser", /*tp_name*/ + sizeof(struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_7aiohttp_12_http_parser_HttpParser, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_7aiohttp_12_http_parser_HttpParser, /*tp_traverse*/ + __pyx_tp_clear_7aiohttp_12_http_parser_HttpParser, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_7aiohttp_12_http_parser_HttpRequestParser, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_7aiohttp_12_http_parser_HttpRequestParser, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif +}; +static struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpResponseParser __pyx_vtable_7aiohttp_12_http_parser_HttpResponseParser; + +static PyObject *__pyx_tp_new_7aiohttp_12_http_parser_HttpResponseParser(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *p; + PyObject *o = __pyx_tp_new_7aiohttp_12_http_parser_HttpParser(t, a, k); + if (unlikely(!o)) return 0; + p = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *)o); + p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser*)__pyx_vtabptr_7aiohttp_12_http_parser_HttpResponseParser; + return o; +} + +static PyMethodDef __pyx_methods_7aiohttp_12_http_parser_HttpResponseParser[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_3__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_5__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type_7aiohttp_12_http_parser_HttpResponseParser = { + PyVarObject_HEAD_INIT(0, 0) + "aiohttp._http_parser.HttpResponseParser", /*tp_name*/ + sizeof(struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_7aiohttp_12_http_parser_HttpParser, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_7aiohttp_12_http_parser_HttpParser, /*tp_traverse*/ + __pyx_tp_clear_7aiohttp_12_http_parser_HttpParser, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_7aiohttp_12_http_parser_HttpResponseParser, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_7aiohttp_12_http_parser_HttpResponseParser, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif +}; + +static struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct____repr__[8]; +static int __pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct____repr__ = 0; + +static PyObject *__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct____repr__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct____repr__ > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__)))) { + o = (PyObject*)__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct____repr__[--__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct____repr__]; + memset(o, 0, sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + return o; +} + +static void __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct____repr__(PyObject *o) { + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *)o; + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_info); + if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct____repr__ < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__)))) { + __pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct____repr__[__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct____repr__++] = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *)o); + } else { + (*Py_TYPE(o)->tp_free)(o); + } +} + +static int __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct____repr__(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *)o; + if (p->__pyx_v_info) { + e = (*v)(p->__pyx_v_info, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_7aiohttp_12_http_parser___pyx_scope_struct____repr__(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *)o; + tmp = ((PyObject*)p->__pyx_v_info); + p->__pyx_v_info = ((PyObject*)Py_None); Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyTypeObject __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct____repr__ = { + PyVarObject_HEAD_INIT(0, 0) + "aiohttp._http_parser.__pyx_scope_struct____repr__", /*tp_name*/ + sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct____repr__, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct____repr__, /*tp_traverse*/ + __pyx_tp_clear_7aiohttp_12_http_parser___pyx_scope_struct____repr__, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct____repr__, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif +}; + +static struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr[8]; +static int __pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr = 0; + +static PyObject *__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr)))) { + o = (PyObject*)__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr[--__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr]; + memset(o, 0, sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + return o; +} + +static void __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr(PyObject *o) { + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *)o; + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_outer_scope); + Py_CLEAR(p->__pyx_v_name); + Py_CLEAR(p->__pyx_v_val); + if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr)))) { + __pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr[__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr++] = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *)o); + } else { + (*Py_TYPE(o)->tp_free)(o); + } +} + +static int __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *)o; + if (p->__pyx_outer_scope) { + e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e; + } + if (p->__pyx_v_name) { + e = (*v)(p->__pyx_v_name, a); if (e) return e; + } + if (p->__pyx_v_val) { + e = (*v)(p->__pyx_v_val, a); if (e) return e; + } + return 0; +} + +static PyTypeObject __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr = { + PyVarObject_HEAD_INIT(0, 0) + "aiohttp._http_parser.__pyx_scope_struct_1_genexpr", /*tp_name*/ + sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif +}; + +static struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__[8]; +static int __pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ = 0; + +static PyObject *__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__)))) { + o = (PyObject*)__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__[--__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__]; + memset(o, 0, sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + return o; +} + +static void __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__(PyObject *o) { + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *)o; + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_info); + if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__)))) { + __pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__[__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__++] = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *)o); + } else { + (*Py_TYPE(o)->tp_free)(o); + } +} + +static int __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *)o; + if (p->__pyx_v_info) { + e = (*v)(p->__pyx_v_info, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *)o; + tmp = ((PyObject*)p->__pyx_v_info); + p->__pyx_v_info = ((PyObject*)Py_None); Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyTypeObject __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ = { + PyVarObject_HEAD_INIT(0, 0) + "aiohttp._http_parser.__pyx_scope_struct_2___repr__", /*tp_name*/ + sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__, /*tp_traverse*/ + __pyx_tp_clear_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif +}; + +static struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr[8]; +static int __pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr = 0; + +static PyObject *__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr)))) { + o = (PyObject*)__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr[--__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr]; + memset(o, 0, sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + return o; +} + +static void __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr(PyObject *o) { + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *)o; + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_outer_scope); + Py_CLEAR(p->__pyx_v_name); + Py_CLEAR(p->__pyx_v_val); + if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr)))) { + __pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr[__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr++] = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *)o); + } else { + (*Py_TYPE(o)->tp_free)(o); + } +} + +static int __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *)o; + if (p->__pyx_outer_scope) { + e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e; + } + if (p->__pyx_v_name) { + e = (*v)(p->__pyx_v_name, a); if (e) return e; + } + if (p->__pyx_v_val) { + e = (*v)(p->__pyx_v_val, a); if (e) return e; + } + return 0; +} + +static PyTypeObject __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr = { + PyVarObject_HEAD_INIT(0, 0) + "aiohttp._http_parser.__pyx_scope_struct_3_genexpr", /*tp_name*/ + sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif +}; + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec__http_parser(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec__http_parser}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "_http_parser", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_, __pyx_k_, sizeof(__pyx_k_), 0, 1, 0, 0}, + {&__pyx_n_s_ACCEPT, __pyx_k_ACCEPT, sizeof(__pyx_k_ACCEPT), 0, 0, 1, 1}, + {&__pyx_n_s_ACCEPT_CHARSET, __pyx_k_ACCEPT_CHARSET, sizeof(__pyx_k_ACCEPT_CHARSET), 0, 0, 1, 1}, + {&__pyx_n_s_ACCEPT_ENCODING, __pyx_k_ACCEPT_ENCODING, sizeof(__pyx_k_ACCEPT_ENCODING), 0, 0, 1, 1}, + {&__pyx_n_s_ACCEPT_LANGUAGE, __pyx_k_ACCEPT_LANGUAGE, sizeof(__pyx_k_ACCEPT_LANGUAGE), 0, 0, 1, 1}, + {&__pyx_n_s_ACCEPT_RANGES, __pyx_k_ACCEPT_RANGES, sizeof(__pyx_k_ACCEPT_RANGES), 0, 0, 1, 1}, + {&__pyx_n_s_ACCESS_CONTROL_ALLOW_CREDENTIALS, __pyx_k_ACCESS_CONTROL_ALLOW_CREDENTIALS, sizeof(__pyx_k_ACCESS_CONTROL_ALLOW_CREDENTIALS), 0, 0, 1, 1}, + {&__pyx_n_s_ACCESS_CONTROL_ALLOW_HEADERS, __pyx_k_ACCESS_CONTROL_ALLOW_HEADERS, sizeof(__pyx_k_ACCESS_CONTROL_ALLOW_HEADERS), 0, 0, 1, 1}, + {&__pyx_n_s_ACCESS_CONTROL_ALLOW_METHODS, __pyx_k_ACCESS_CONTROL_ALLOW_METHODS, sizeof(__pyx_k_ACCESS_CONTROL_ALLOW_METHODS), 0, 0, 1, 1}, + {&__pyx_n_s_ACCESS_CONTROL_ALLOW_ORIGIN, __pyx_k_ACCESS_CONTROL_ALLOW_ORIGIN, sizeof(__pyx_k_ACCESS_CONTROL_ALLOW_ORIGIN), 0, 0, 1, 1}, + {&__pyx_n_s_ACCESS_CONTROL_EXPOSE_HEADERS, __pyx_k_ACCESS_CONTROL_EXPOSE_HEADERS, sizeof(__pyx_k_ACCESS_CONTROL_EXPOSE_HEADERS), 0, 0, 1, 1}, + {&__pyx_n_s_ACCESS_CONTROL_MAX_AGE, __pyx_k_ACCESS_CONTROL_MAX_AGE, sizeof(__pyx_k_ACCESS_CONTROL_MAX_AGE), 0, 0, 1, 1}, + {&__pyx_n_s_ACCESS_CONTROL_REQUEST_HEADERS, __pyx_k_ACCESS_CONTROL_REQUEST_HEADERS, sizeof(__pyx_k_ACCESS_CONTROL_REQUEST_HEADERS), 0, 0, 1, 1}, + {&__pyx_n_s_ACCESS_CONTROL_REQUEST_METHOD, __pyx_k_ACCESS_CONTROL_REQUEST_METHOD, sizeof(__pyx_k_ACCESS_CONTROL_REQUEST_METHOD), 0, 0, 1, 1}, + {&__pyx_n_s_AGE, __pyx_k_AGE, sizeof(__pyx_k_AGE), 0, 0, 1, 1}, + {&__pyx_n_s_ALLOW, __pyx_k_ALLOW, sizeof(__pyx_k_ALLOW), 0, 0, 1, 1}, + {&__pyx_n_s_AUTHORIZATION, __pyx_k_AUTHORIZATION, sizeof(__pyx_k_AUTHORIZATION), 0, 0, 1, 1}, + {&__pyx_n_s_BadHttpMessage, __pyx_k_BadHttpMessage, sizeof(__pyx_k_BadHttpMessage), 0, 0, 1, 1}, + {&__pyx_n_s_BadStatusLine, __pyx_k_BadStatusLine, sizeof(__pyx_k_BadStatusLine), 0, 0, 1, 1}, + {&__pyx_n_s_BaseException, __pyx_k_BaseException, sizeof(__pyx_k_BaseException), 0, 0, 1, 1}, + {&__pyx_n_s_CACHE_CONTROL, __pyx_k_CACHE_CONTROL, sizeof(__pyx_k_CACHE_CONTROL), 0, 0, 1, 1}, + {&__pyx_n_s_CIMultiDict, __pyx_k_CIMultiDict, sizeof(__pyx_k_CIMultiDict), 0, 0, 1, 1}, + {&__pyx_n_s_CIMultiDictProxy, __pyx_k_CIMultiDictProxy, sizeof(__pyx_k_CIMultiDictProxy), 0, 0, 1, 1}, + {&__pyx_n_s_CIMultiDictProxy_2, __pyx_k_CIMultiDictProxy_2, sizeof(__pyx_k_CIMultiDictProxy_2), 0, 0, 1, 1}, + {&__pyx_n_s_CIMultiDict_2, __pyx_k_CIMultiDict_2, sizeof(__pyx_k_CIMultiDict_2), 0, 0, 1, 1}, + {&__pyx_n_s_CONNECTION, __pyx_k_CONNECTION, sizeof(__pyx_k_CONNECTION), 0, 0, 1, 1}, + {&__pyx_n_s_CONTENT_DISPOSITION, __pyx_k_CONTENT_DISPOSITION, sizeof(__pyx_k_CONTENT_DISPOSITION), 0, 0, 1, 1}, + {&__pyx_n_s_CONTENT_ENCODING, __pyx_k_CONTENT_ENCODING, sizeof(__pyx_k_CONTENT_ENCODING), 0, 0, 1, 1}, + {&__pyx_n_s_CONTENT_LANGUAGE, __pyx_k_CONTENT_LANGUAGE, sizeof(__pyx_k_CONTENT_LANGUAGE), 0, 0, 1, 1}, + {&__pyx_n_s_CONTENT_LENGTH, __pyx_k_CONTENT_LENGTH, sizeof(__pyx_k_CONTENT_LENGTH), 0, 0, 1, 1}, + {&__pyx_n_s_CONTENT_LOCATION, __pyx_k_CONTENT_LOCATION, sizeof(__pyx_k_CONTENT_LOCATION), 0, 0, 1, 1}, + {&__pyx_n_s_CONTENT_MD5, __pyx_k_CONTENT_MD5, sizeof(__pyx_k_CONTENT_MD5), 0, 0, 1, 1}, + {&__pyx_n_s_CONTENT_RANGE, __pyx_k_CONTENT_RANGE, sizeof(__pyx_k_CONTENT_RANGE), 0, 0, 1, 1}, + {&__pyx_n_s_CONTENT_TRANSFER_ENCODING, __pyx_k_CONTENT_TRANSFER_ENCODING, sizeof(__pyx_k_CONTENT_TRANSFER_ENCODING), 0, 0, 1, 1}, + {&__pyx_n_s_CONTENT_TYPE, __pyx_k_CONTENT_TYPE, sizeof(__pyx_k_CONTENT_TYPE), 0, 0, 1, 1}, + {&__pyx_n_s_COOKIE, __pyx_k_COOKIE, sizeof(__pyx_k_COOKIE), 0, 0, 1, 1}, + {&__pyx_n_s_ContentLengthError, __pyx_k_ContentLengthError, sizeof(__pyx_k_ContentLengthError), 0, 0, 1, 1}, + {&__pyx_n_s_DATE, __pyx_k_DATE, sizeof(__pyx_k_DATE), 0, 0, 1, 1}, + {&__pyx_n_s_DESTINATION, __pyx_k_DESTINATION, sizeof(__pyx_k_DESTINATION), 0, 0, 1, 1}, + {&__pyx_n_s_DIGEST, __pyx_k_DIGEST, sizeof(__pyx_k_DIGEST), 0, 0, 1, 1}, + {&__pyx_n_s_DeflateBuffer, __pyx_k_DeflateBuffer, sizeof(__pyx_k_DeflateBuffer), 0, 0, 1, 1}, + {&__pyx_n_s_DeflateBuffer_2, __pyx_k_DeflateBuffer_2, sizeof(__pyx_k_DeflateBuffer_2), 0, 0, 1, 1}, + {&__pyx_n_s_EMPTY_PAYLOAD, __pyx_k_EMPTY_PAYLOAD, sizeof(__pyx_k_EMPTY_PAYLOAD), 0, 0, 1, 1}, + {&__pyx_n_s_EMPTY_PAYLOAD_2, __pyx_k_EMPTY_PAYLOAD_2, sizeof(__pyx_k_EMPTY_PAYLOAD_2), 0, 0, 1, 1}, + {&__pyx_n_s_ETAG, __pyx_k_ETAG, sizeof(__pyx_k_ETAG), 0, 0, 1, 1}, + {&__pyx_n_s_EXPECT, __pyx_k_EXPECT, sizeof(__pyx_k_EXPECT), 0, 0, 1, 1}, + {&__pyx_n_s_EXPIRES, __pyx_k_EXPIRES, sizeof(__pyx_k_EXPIRES), 0, 0, 1, 1}, + {&__pyx_n_s_FORWARDED, __pyx_k_FORWARDED, sizeof(__pyx_k_FORWARDED), 0, 0, 1, 1}, + {&__pyx_n_s_FROM, __pyx_k_FROM, sizeof(__pyx_k_FROM), 0, 0, 1, 1}, + {&__pyx_n_s_HOST, __pyx_k_HOST, sizeof(__pyx_k_HOST), 0, 0, 1, 1}, + {&__pyx_kp_u_Header_name_is_too_long, __pyx_k_Header_name_is_too_long, sizeof(__pyx_k_Header_name_is_too_long), 0, 1, 0, 0}, + {&__pyx_kp_u_Header_value_is_too_long, __pyx_k_Header_value_is_too_long, sizeof(__pyx_k_Header_value_is_too_long), 0, 1, 0, 0}, + {&__pyx_n_s_HttpRequestParser, __pyx_k_HttpRequestParser, sizeof(__pyx_k_HttpRequestParser), 0, 0, 1, 1}, + {&__pyx_n_u_HttpRequestParser, __pyx_k_HttpRequestParser, sizeof(__pyx_k_HttpRequestParser), 0, 1, 0, 1}, + {&__pyx_n_s_HttpResponseParser, __pyx_k_HttpResponseParser, sizeof(__pyx_k_HttpResponseParser), 0, 0, 1, 1}, + {&__pyx_n_u_HttpResponseParser, __pyx_k_HttpResponseParser, sizeof(__pyx_k_HttpResponseParser), 0, 1, 0, 1}, + {&__pyx_n_s_HttpVersion, __pyx_k_HttpVersion, sizeof(__pyx_k_HttpVersion), 0, 0, 1, 1}, + {&__pyx_n_s_HttpVersion10, __pyx_k_HttpVersion10, sizeof(__pyx_k_HttpVersion10), 0, 0, 1, 1}, + {&__pyx_n_s_HttpVersion10_2, __pyx_k_HttpVersion10_2, sizeof(__pyx_k_HttpVersion10_2), 0, 0, 1, 1}, + {&__pyx_n_s_HttpVersion11, __pyx_k_HttpVersion11, sizeof(__pyx_k_HttpVersion11), 0, 0, 1, 1}, + {&__pyx_n_s_HttpVersion11_2, __pyx_k_HttpVersion11_2, sizeof(__pyx_k_HttpVersion11_2), 0, 0, 1, 1}, + {&__pyx_n_s_HttpVersion_2, __pyx_k_HttpVersion_2, sizeof(__pyx_k_HttpVersion_2), 0, 0, 1, 1}, + {&__pyx_n_s_IF_MATCH, __pyx_k_IF_MATCH, sizeof(__pyx_k_IF_MATCH), 0, 0, 1, 1}, + {&__pyx_n_s_IF_MODIFIED_SINCE, __pyx_k_IF_MODIFIED_SINCE, sizeof(__pyx_k_IF_MODIFIED_SINCE), 0, 0, 1, 1}, + {&__pyx_n_s_IF_NONE_MATCH, __pyx_k_IF_NONE_MATCH, sizeof(__pyx_k_IF_NONE_MATCH), 0, 0, 1, 1}, + {&__pyx_n_s_IF_RANGE, __pyx_k_IF_RANGE, sizeof(__pyx_k_IF_RANGE), 0, 0, 1, 1}, + {&__pyx_n_s_IF_UNMODIFIED_SINCE, __pyx_k_IF_UNMODIFIED_SINCE, sizeof(__pyx_k_IF_UNMODIFIED_SINCE), 0, 0, 1, 1}, + {&__pyx_kp_s_Incompatible_checksums_s_vs_0x14, __pyx_k_Incompatible_checksums_s_vs_0x14, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x14), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_s_vs_0xc7, __pyx_k_Incompatible_checksums_s_vs_0xc7, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xc7), 0, 0, 1, 0}, + {&__pyx_n_s_InvalidHeader, __pyx_k_InvalidHeader, sizeof(__pyx_k_InvalidHeader), 0, 0, 1, 1}, + {&__pyx_n_s_InvalidURLError, __pyx_k_InvalidURLError, sizeof(__pyx_k_InvalidURLError), 0, 0, 1, 1}, + {&__pyx_n_s_KEEP_ALIVE, __pyx_k_KEEP_ALIVE, sizeof(__pyx_k_KEEP_ALIVE), 0, 0, 1, 1}, + {&__pyx_n_s_LAST_EVENT_ID, __pyx_k_LAST_EVENT_ID, sizeof(__pyx_k_LAST_EVENT_ID), 0, 0, 1, 1}, + {&__pyx_n_s_LAST_MODIFIED, __pyx_k_LAST_MODIFIED, sizeof(__pyx_k_LAST_MODIFIED), 0, 0, 1, 1}, + {&__pyx_n_s_LINK, __pyx_k_LINK, sizeof(__pyx_k_LINK), 0, 0, 1, 1}, + {&__pyx_n_s_LOCATION, __pyx_k_LOCATION, sizeof(__pyx_k_LOCATION), 0, 0, 1, 1}, + {&__pyx_n_s_LineTooLong, __pyx_k_LineTooLong, sizeof(__pyx_k_LineTooLong), 0, 0, 1, 1}, + {&__pyx_n_s_MAX_FORWARDS, __pyx_k_MAX_FORWARDS, sizeof(__pyx_k_MAX_FORWARDS), 0, 0, 1, 1}, + {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1}, + {&__pyx_kp_u_Not_enough_data_for_satisfy_cont, __pyx_k_Not_enough_data_for_satisfy_cont, sizeof(__pyx_k_Not_enough_data_for_satisfy_cont), 0, 1, 0, 0}, + {&__pyx_kp_u_Not_enough_data_for_satisfy_tran, __pyx_k_Not_enough_data_for_satisfy_tran, sizeof(__pyx_k_Not_enough_data_for_satisfy_tran), 0, 1, 0, 0}, + {&__pyx_n_s_ORIGIN, __pyx_k_ORIGIN, sizeof(__pyx_k_ORIGIN), 0, 0, 1, 1}, + {&__pyx_n_s_PRAGMA, __pyx_k_PRAGMA, sizeof(__pyx_k_PRAGMA), 0, 0, 1, 1}, + {&__pyx_n_s_PROXY_AUTHENTICATE, __pyx_k_PROXY_AUTHENTICATE, sizeof(__pyx_k_PROXY_AUTHENTICATE), 0, 0, 1, 1}, + {&__pyx_n_s_PROXY_AUTHORIZATION, __pyx_k_PROXY_AUTHORIZATION, sizeof(__pyx_k_PROXY_AUTHORIZATION), 0, 0, 1, 1}, + {&__pyx_n_s_PayloadEncodingError, __pyx_k_PayloadEncodingError, sizeof(__pyx_k_PayloadEncodingError), 0, 0, 1, 1}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_RANGE, __pyx_k_RANGE, sizeof(__pyx_k_RANGE), 0, 0, 1, 1}, + {&__pyx_n_s_REFERER, __pyx_k_REFERER, sizeof(__pyx_k_REFERER), 0, 0, 1, 1}, + {&__pyx_n_s_RETRY_AFTER, __pyx_k_RETRY_AFTER, sizeof(__pyx_k_RETRY_AFTER), 0, 0, 1, 1}, + {&__pyx_kp_u_RawRequestMessage, __pyx_k_RawRequestMessage, sizeof(__pyx_k_RawRequestMessage), 0, 1, 0, 0}, + {&__pyx_n_s_RawRequestMessage_2, __pyx_k_RawRequestMessage_2, sizeof(__pyx_k_RawRequestMessage_2), 0, 0, 1, 1}, + {&__pyx_n_u_RawRequestMessage_2, __pyx_k_RawRequestMessage_2, sizeof(__pyx_k_RawRequestMessage_2), 0, 1, 0, 1}, + {&__pyx_kp_u_RawResponseMessage, __pyx_k_RawResponseMessage, sizeof(__pyx_k_RawResponseMessage), 0, 1, 0, 0}, + {&__pyx_n_s_RawResponseMessage_2, __pyx_k_RawResponseMessage_2, sizeof(__pyx_k_RawResponseMessage_2), 0, 0, 1, 1}, + {&__pyx_n_u_RawResponseMessage_2, __pyx_k_RawResponseMessage_2, sizeof(__pyx_k_RawResponseMessage_2), 0, 1, 0, 1}, + {&__pyx_n_s_SEC_WEBSOCKET_ACCEPT, __pyx_k_SEC_WEBSOCKET_ACCEPT, sizeof(__pyx_k_SEC_WEBSOCKET_ACCEPT), 0, 0, 1, 1}, + {&__pyx_n_s_SEC_WEBSOCKET_EXTENSIONS, __pyx_k_SEC_WEBSOCKET_EXTENSIONS, sizeof(__pyx_k_SEC_WEBSOCKET_EXTENSIONS), 0, 0, 1, 1}, + {&__pyx_n_s_SEC_WEBSOCKET_KEY, __pyx_k_SEC_WEBSOCKET_KEY, sizeof(__pyx_k_SEC_WEBSOCKET_KEY), 0, 0, 1, 1}, + {&__pyx_n_s_SEC_WEBSOCKET_KEY1, __pyx_k_SEC_WEBSOCKET_KEY1, sizeof(__pyx_k_SEC_WEBSOCKET_KEY1), 0, 0, 1, 1}, + {&__pyx_n_s_SEC_WEBSOCKET_PROTOCOL, __pyx_k_SEC_WEBSOCKET_PROTOCOL, sizeof(__pyx_k_SEC_WEBSOCKET_PROTOCOL), 0, 0, 1, 1}, + {&__pyx_n_s_SEC_WEBSOCKET_VERSION, __pyx_k_SEC_WEBSOCKET_VERSION, sizeof(__pyx_k_SEC_WEBSOCKET_VERSION), 0, 0, 1, 1}, + {&__pyx_n_s_SERVER, __pyx_k_SERVER, sizeof(__pyx_k_SERVER), 0, 0, 1, 1}, + {&__pyx_n_s_SET_COOKIE, __pyx_k_SET_COOKIE, sizeof(__pyx_k_SET_COOKIE), 0, 0, 1, 1}, + {&__pyx_kp_u_Status_line_is_too_long, __pyx_k_Status_line_is_too_long, sizeof(__pyx_k_Status_line_is_too_long), 0, 1, 0, 0}, + {&__pyx_n_s_StreamReader, __pyx_k_StreamReader, sizeof(__pyx_k_StreamReader), 0, 0, 1, 1}, + {&__pyx_n_s_StreamReader_2, __pyx_k_StreamReader_2, sizeof(__pyx_k_StreamReader_2), 0, 0, 1, 1}, + {&__pyx_n_s_TE, __pyx_k_TE, sizeof(__pyx_k_TE), 0, 0, 1, 1}, + {&__pyx_n_s_TRAILER, __pyx_k_TRAILER, sizeof(__pyx_k_TRAILER), 0, 0, 1, 1}, + {&__pyx_n_s_TRANSFER_ENCODING, __pyx_k_TRANSFER_ENCODING, sizeof(__pyx_k_TRANSFER_ENCODING), 0, 0, 1, 1}, + {&__pyx_n_s_TransferEncodingError, __pyx_k_TransferEncodingError, sizeof(__pyx_k_TransferEncodingError), 0, 0, 1, 1}, + {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, + {&__pyx_n_s_UPGRADE, __pyx_k_UPGRADE, sizeof(__pyx_k_UPGRADE), 0, 0, 1, 1}, + {&__pyx_n_s_URI, __pyx_k_URI, sizeof(__pyx_k_URI), 0, 0, 1, 1}, + {&__pyx_n_s_URL, __pyx_k_URL, sizeof(__pyx_k_URL), 0, 0, 1, 1}, + {&__pyx_n_s_URL_2, __pyx_k_URL_2, sizeof(__pyx_k_URL_2), 0, 0, 1, 1}, + {&__pyx_n_s_USER_AGENT, __pyx_k_USER_AGENT, sizeof(__pyx_k_USER_AGENT), 0, 0, 1, 1}, + {&__pyx_n_s_VARY, __pyx_k_VARY, sizeof(__pyx_k_VARY), 0, 0, 1, 1}, + {&__pyx_n_s_VIA, __pyx_k_VIA, sizeof(__pyx_k_VIA), 0, 0, 1, 1}, + {&__pyx_n_s_WANT_DIGEST, __pyx_k_WANT_DIGEST, sizeof(__pyx_k_WANT_DIGEST), 0, 0, 1, 1}, + {&__pyx_n_s_WARNING, __pyx_k_WARNING, sizeof(__pyx_k_WARNING), 0, 0, 1, 1}, + {&__pyx_n_s_WEBSOCKET, __pyx_k_WEBSOCKET, sizeof(__pyx_k_WEBSOCKET), 0, 0, 1, 1}, + {&__pyx_n_s_WWW_AUTHENTICATE, __pyx_k_WWW_AUTHENTICATE, sizeof(__pyx_k_WWW_AUTHENTICATE), 0, 0, 1, 1}, + {&__pyx_n_s_X_FORWARDED_FOR, __pyx_k_X_FORWARDED_FOR, sizeof(__pyx_k_X_FORWARDED_FOR), 0, 0, 1, 1}, + {&__pyx_n_s_X_FORWARDED_HOST, __pyx_k_X_FORWARDED_HOST, sizeof(__pyx_k_X_FORWARDED_HOST), 0, 0, 1, 1}, + {&__pyx_n_s_X_FORWARDED_PROTO, __pyx_k_X_FORWARDED_PROTO, sizeof(__pyx_k_X_FORWARDED_PROTO), 0, 0, 1, 1}, + {&__pyx_kp_u__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 1, 0, 0}, + {&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0}, + {&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0}, + {&__pyx_n_s__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 0, 1, 1}, + {&__pyx_kp_b__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 0, 0, 0}, + {&__pyx_kp_u__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 1, 0, 0}, + {&__pyx_n_s_add, __pyx_k_add, sizeof(__pyx_k_add), 0, 0, 1, 1}, + {&__pyx_n_s_aiohttp, __pyx_k_aiohttp, sizeof(__pyx_k_aiohttp), 0, 0, 1, 1}, + {&__pyx_n_s_aiohttp__http_parser, __pyx_k_aiohttp__http_parser, sizeof(__pyx_k_aiohttp__http_parser), 0, 0, 1, 1}, + {&__pyx_kp_s_aiohttp__http_parser_pyx, __pyx_k_aiohttp__http_parser_pyx, sizeof(__pyx_k_aiohttp__http_parser_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_all, __pyx_k_all, sizeof(__pyx_k_all), 0, 0, 1, 1}, + {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, + {&__pyx_n_s_auto_decompress, __pyx_k_auto_decompress, sizeof(__pyx_k_auto_decompress), 0, 0, 1, 1}, + {&__pyx_n_s_begin_http_chunk_receiving, __pyx_k_begin_http_chunk_receiving, sizeof(__pyx_k_begin_http_chunk_receiving), 0, 0, 1, 1}, + {&__pyx_n_u_br, __pyx_k_br, sizeof(__pyx_k_br), 0, 1, 0, 1}, + {&__pyx_n_s_buf_data, __pyx_k_buf_data, sizeof(__pyx_k_buf_data), 0, 0, 1, 1}, + {&__pyx_n_s_build, __pyx_k_build, sizeof(__pyx_k_build), 0, 0, 1, 1}, + {&__pyx_n_s_chunked, __pyx_k_chunked, sizeof(__pyx_k_chunked), 0, 0, 1, 1}, + {&__pyx_n_u_chunked, __pyx_k_chunked, sizeof(__pyx_k_chunked), 0, 1, 0, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1}, + {&__pyx_n_s_code, __pyx_k_code, sizeof(__pyx_k_code), 0, 0, 1, 1}, + {&__pyx_n_u_code, __pyx_k_code, sizeof(__pyx_k_code), 0, 1, 0, 1}, + {&__pyx_n_s_compression, __pyx_k_compression, sizeof(__pyx_k_compression), 0, 0, 1, 1}, + {&__pyx_n_u_compression, __pyx_k_compression, sizeof(__pyx_k_compression), 0, 1, 0, 1}, + {&__pyx_n_u_deflate, __pyx_k_deflate, sizeof(__pyx_k_deflate), 0, 1, 0, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_n_s_end_http_chunk_receiving, __pyx_k_end_http_chunk_receiving, sizeof(__pyx_k_end_http_chunk_receiving), 0, 0, 1, 1}, + {&__pyx_n_s_feed_data, __pyx_k_feed_data, sizeof(__pyx_k_feed_data), 0, 0, 1, 1}, + {&__pyx_n_s_feed_eof, __pyx_k_feed_eof, sizeof(__pyx_k_feed_eof), 0, 0, 1, 1}, + {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, + {&__pyx_n_s_fragment, __pyx_k_fragment, sizeof(__pyx_k_fragment), 0, 0, 1, 1}, + {&__pyx_n_s_genexpr, __pyx_k_genexpr, sizeof(__pyx_k_genexpr), 0, 0, 1, 1}, + {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_n_u_gzip, __pyx_k_gzip, sizeof(__pyx_k_gzip), 0, 1, 0, 1}, + {&__pyx_n_s_hdrs, __pyx_k_hdrs, sizeof(__pyx_k_hdrs), 0, 0, 1, 1}, + {&__pyx_n_s_headers, __pyx_k_headers, sizeof(__pyx_k_headers), 0, 0, 1, 1}, + {&__pyx_n_u_headers, __pyx_k_headers, sizeof(__pyx_k_headers), 0, 1, 0, 1}, + {&__pyx_n_s_host, __pyx_k_host, sizeof(__pyx_k_host), 0, 0, 1, 1}, + {&__pyx_n_s_http_exceptions, __pyx_k_http_exceptions, sizeof(__pyx_k_http_exceptions), 0, 0, 1, 1}, + {&__pyx_n_s_http_parser, __pyx_k_http_parser, sizeof(__pyx_k_http_parser), 0, 0, 1, 1}, + {&__pyx_n_s_http_writer, __pyx_k_http_writer, sizeof(__pyx_k_http_writer), 0, 0, 1, 1}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_kp_u_invalid_url_r, __pyx_k_invalid_url_r, sizeof(__pyx_k_invalid_url_r), 0, 1, 0, 0}, + {&__pyx_n_s_loop, __pyx_k_loop, sizeof(__pyx_k_loop), 0, 0, 1, 1}, + {&__pyx_n_s_lower, __pyx_k_lower, sizeof(__pyx_k_lower), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_max_field_size, __pyx_k_max_field_size, sizeof(__pyx_k_max_field_size), 0, 0, 1, 1}, + {&__pyx_n_s_max_headers, __pyx_k_max_headers, sizeof(__pyx_k_max_headers), 0, 0, 1, 1}, + {&__pyx_n_s_max_line_size, __pyx_k_max_line_size, sizeof(__pyx_k_max_line_size), 0, 0, 1, 1}, + {&__pyx_n_s_method, __pyx_k_method, sizeof(__pyx_k_method), 0, 0, 1, 1}, + {&__pyx_n_u_method, __pyx_k_method, sizeof(__pyx_k_method), 0, 1, 0, 1}, + {&__pyx_n_s_multidict, __pyx_k_multidict, sizeof(__pyx_k_multidict), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, + {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0}, + {&__pyx_n_s_parse_url, __pyx_k_parse_url, sizeof(__pyx_k_parse_url), 0, 0, 1, 1}, + {&__pyx_n_s_partition, __pyx_k_partition, sizeof(__pyx_k_partition), 0, 0, 1, 1}, + {&__pyx_n_s_password, __pyx_k_password, sizeof(__pyx_k_password), 0, 0, 1, 1}, + {&__pyx_n_s_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 0, 1, 1}, + {&__pyx_n_u_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 1, 0, 1}, + {&__pyx_n_s_payload_exception, __pyx_k_payload_exception, sizeof(__pyx_k_payload_exception), 0, 0, 1, 1}, + {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, + {&__pyx_n_s_port, __pyx_k_port, sizeof(__pyx_k_port), 0, 0, 1, 1}, + {&__pyx_n_s_protocol, __pyx_k_protocol, sizeof(__pyx_k_protocol), 0, 0, 1, 1}, + {&__pyx_n_s_py_buf, __pyx_k_py_buf, sizeof(__pyx_k_py_buf), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_RawRequestMessage, __pyx_k_pyx_unpickle_RawRequestMessage, sizeof(__pyx_k_pyx_unpickle_RawRequestMessage), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_RawResponseMessag, __pyx_k_pyx_unpickle_RawResponseMessag, sizeof(__pyx_k_pyx_unpickle_RawResponseMessag), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_s_query, __pyx_k_query, sizeof(__pyx_k_query), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_raw_headers, __pyx_k_raw_headers, sizeof(__pyx_k_raw_headers), 0, 0, 1, 1}, + {&__pyx_n_u_raw_headers, __pyx_k_raw_headers, sizeof(__pyx_k_raw_headers), 0, 1, 0, 1}, + {&__pyx_n_s_read_until_eof, __pyx_k_read_until_eof, sizeof(__pyx_k_read_until_eof), 0, 0, 1, 1}, + {&__pyx_n_s_reason, __pyx_k_reason, sizeof(__pyx_k_reason), 0, 0, 1, 1}, + {&__pyx_n_u_reason, __pyx_k_reason, sizeof(__pyx_k_reason), 0, 1, 0, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, + {&__pyx_n_s_repr___locals_genexpr, __pyx_k_repr___locals_genexpr, sizeof(__pyx_k_repr___locals_genexpr), 0, 0, 1, 1}, + {&__pyx_n_s_response_with_body, __pyx_k_response_with_body, sizeof(__pyx_k_response_with_body), 0, 0, 1, 1}, + {&__pyx_n_s_scheme, __pyx_k_scheme, sizeof(__pyx_k_scheme), 0, 0, 1, 1}, + {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1}, + {&__pyx_n_s_set_exception, __pyx_k_set_exception, sizeof(__pyx_k_set_exception), 0, 0, 1, 1}, + {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, + {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_should_close, __pyx_k_should_close, sizeof(__pyx_k_should_close), 0, 0, 1, 1}, + {&__pyx_n_u_should_close, __pyx_k_should_close, sizeof(__pyx_k_should_close), 0, 1, 0, 1}, + {&__pyx_n_s_streams, __pyx_k_streams, sizeof(__pyx_k_streams), 0, 0, 1, 1}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1}, + {&__pyx_n_s_timer, __pyx_k_timer, sizeof(__pyx_k_timer), 0, 0, 1, 1}, + {&__pyx_kp_u_unknown, __pyx_k_unknown, sizeof(__pyx_k_unknown), 0, 1, 0, 0}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_upgrade, __pyx_k_upgrade, sizeof(__pyx_k_upgrade), 0, 0, 1, 1}, + {&__pyx_n_u_upgrade, __pyx_k_upgrade, sizeof(__pyx_k_upgrade), 0, 1, 0, 1}, + {&__pyx_n_s_url, __pyx_k_url, sizeof(__pyx_k_url), 0, 0, 1, 1}, + {&__pyx_n_u_url, __pyx_k_url, sizeof(__pyx_k_url), 0, 1, 0, 1}, + {&__pyx_n_s_user, __pyx_k_user, sizeof(__pyx_k_user), 0, 0, 1, 1}, + {&__pyx_n_s_version, __pyx_k_version, sizeof(__pyx_k_version), 0, 0, 1, 1}, + {&__pyx_n_u_version, __pyx_k_version, sizeof(__pyx_k_version), 0, 1, 0, 1}, + {&__pyx_n_s_yarl, __pyx_k_yarl, sizeof(__pyx_k_yarl), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 70, __pyx_L1_error) + __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(0, 297, __pyx_L1_error) + __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(1, 2, __pyx_L1_error) + __pyx_builtin_BaseException = __Pyx_GetBuiltinName(__pyx_n_s_BaseException); if (!__pyx_builtin_BaseException) __PYX_ERR(0, 602, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__6); + __Pyx_GIVEREF(__pyx_tuple__6); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__10); + __Pyx_GIVEREF(__pyx_tuple__10); + + /* "aiohttp/_http_parser.pyx":40 + * char* PyByteArray_AsString(object) + * + * __all__ = ('HttpRequestParser', 'HttpResponseParser', # <<<<<<<<<<<<<< + * 'RawRequestMessage', 'RawResponseMessage') + * + */ + __pyx_tuple__12 = PyTuple_Pack(4, __pyx_n_u_HttpRequestParser, __pyx_n_u_HttpResponseParser, __pyx_n_u_RawRequestMessage_2, __pyx_n_u_RawResponseMessage_2); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__12); + __Pyx_GIVEREF(__pyx_tuple__12); + + /* "aiohttp/_http_parser.pyx":756 + * + * + * def parse_url(url): # <<<<<<<<<<<<<< + * cdef: + * Py_buffer py_buf + */ + __pyx_tuple__13 = PyTuple_Pack(3, __pyx_n_s_url, __pyx_n_s_py_buf, __pyx_n_s_buf_data); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 756, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__13); + __Pyx_GIVEREF(__pyx_tuple__13); + __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__13, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_aiohttp__http_parser_pyx, __pyx_n_s_parse_url, 756, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(0, 756, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __pyx_unpickle_RawRequestMessage(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_tuple__15 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__15); + __Pyx_GIVEREF(__pyx_tuple__15); + __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__15, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_RawRequestMessage, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(1, 1, __pyx_L1_error) + __pyx_tuple__17 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__17); + __Pyx_GIVEREF(__pyx_tuple__17); + __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_RawResponseMessag, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + __pyx_umethod_PyUnicode_Type_partition.type = (PyObject*)&PyUnicode_Type; + if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_int_21004882 = PyInt_FromLong(21004882L); if (unlikely(!__pyx_int_21004882)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_209127132 = PyInt_FromLong(209127132L); if (unlikely(!__pyx_int_209127132)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __pyx_v_7aiohttp_12_http_parser_headers = ((PyObject*)Py_None); Py_INCREF(Py_None); + __pyx_v_7aiohttp_12_http_parser_URL = Py_None; Py_INCREF(Py_None); + __pyx_v_7aiohttp_12_http_parser_URL_build = Py_None; Py_INCREF(Py_None); + __pyx_v_7aiohttp_12_http_parser_CIMultiDict = Py_None; Py_INCREF(Py_None); + __pyx_v_7aiohttp_12_http_parser_CIMultiDictProxy = Py_None; Py_INCREF(Py_None); + __pyx_v_7aiohttp_12_http_parser_HttpVersion = Py_None; Py_INCREF(Py_None); + __pyx_v_7aiohttp_12_http_parser_HttpVersion10 = Py_None; Py_INCREF(Py_None); + __pyx_v_7aiohttp_12_http_parser_HttpVersion11 = Py_None; Py_INCREF(Py_None); + __pyx_v_7aiohttp_12_http_parser_SEC_WEBSOCKET_KEY1 = Py_None; Py_INCREF(Py_None); + __pyx_v_7aiohttp_12_http_parser_CONTENT_ENCODING = Py_None; Py_INCREF(Py_None); + __pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD = Py_None; Py_INCREF(Py_None); + __pyx_v_7aiohttp_12_http_parser_StreamReader = Py_None; Py_INCREF(Py_None); + __pyx_v_7aiohttp_12_http_parser_DeflateBuffer = Py_None; Py_INCREF(Py_None); + __pyx_v_7aiohttp_12_http_parser__http_method = ((PyObject*)Py_None); Py_INCREF(Py_None); + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser_RawRequestMessage) < 0) __PYX_ERR(0, 93, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_7aiohttp_12_http_parser_RawRequestMessage.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser_RawRequestMessage.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser_RawRequestMessage.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_7aiohttp_12_http_parser_RawRequestMessage.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_RawRequestMessage_2, (PyObject *)&__pyx_type_7aiohttp_12_http_parser_RawRequestMessage) < 0) __PYX_ERR(0, 93, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7aiohttp_12_http_parser_RawRequestMessage) < 0) __PYX_ERR(0, 93, __pyx_L1_error) + __pyx_ptype_7aiohttp_12_http_parser_RawRequestMessage = &__pyx_type_7aiohttp_12_http_parser_RawRequestMessage; + if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser_RawResponseMessage) < 0) __PYX_ERR(0, 193, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_7aiohttp_12_http_parser_RawResponseMessage.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser_RawResponseMessage.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser_RawResponseMessage.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_7aiohttp_12_http_parser_RawResponseMessage.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_RawResponseMessage_2, (PyObject *)&__pyx_type_7aiohttp_12_http_parser_RawResponseMessage) < 0) __PYX_ERR(0, 193, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7aiohttp_12_http_parser_RawResponseMessage) < 0) __PYX_ERR(0, 193, __pyx_L1_error) + __pyx_ptype_7aiohttp_12_http_parser_RawResponseMessage = &__pyx_type_7aiohttp_12_http_parser_RawResponseMessage; + __pyx_vtabptr_7aiohttp_12_http_parser_HttpParser = &__pyx_vtable_7aiohttp_12_http_parser_HttpParser; + __pyx_vtable_7aiohttp_12_http_parser_HttpParser._init = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *, enum http_parser_type, PyObject *, PyObject *, struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init *__pyx_optional_args))__pyx_f_7aiohttp_12_http_parser_10HttpParser__init; + __pyx_vtable_7aiohttp_12_http_parser_HttpParser._process_header = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_10HttpParser__process_header; + __pyx_vtable_7aiohttp_12_http_parser_HttpParser._on_header_field = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *, char *, size_t))__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_header_field; + __pyx_vtable_7aiohttp_12_http_parser_HttpParser._on_header_value = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *, char *, size_t))__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_header_value; + __pyx_vtable_7aiohttp_12_http_parser_HttpParser._on_headers_complete = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_headers_complete; + __pyx_vtable_7aiohttp_12_http_parser_HttpParser._on_message_complete = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_message_complete; + __pyx_vtable_7aiohttp_12_http_parser_HttpParser._on_chunk_header = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_chunk_header; + __pyx_vtable_7aiohttp_12_http_parser_HttpParser._on_chunk_complete = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_chunk_complete; + __pyx_vtable_7aiohttp_12_http_parser_HttpParser._on_status_complete = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_status_complete; + __pyx_vtable_7aiohttp_12_http_parser_HttpParser.http_version = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_10HttpParser_http_version; + if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser_HttpParser) < 0) __PYX_ERR(0, 255, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_7aiohttp_12_http_parser_HttpParser.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser_HttpParser.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser_HttpParser.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_7aiohttp_12_http_parser_HttpParser.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type_7aiohttp_12_http_parser_HttpParser.tp_dict, __pyx_vtabptr_7aiohttp_12_http_parser_HttpParser) < 0) __PYX_ERR(0, 255, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7aiohttp_12_http_parser_HttpParser) < 0) __PYX_ERR(0, 255, __pyx_L1_error) + __pyx_ptype_7aiohttp_12_http_parser_HttpParser = &__pyx_type_7aiohttp_12_http_parser_HttpParser; + __pyx_vtabptr_7aiohttp_12_http_parser_HttpRequestParser = &__pyx_vtable_7aiohttp_12_http_parser_HttpRequestParser; + __pyx_vtable_7aiohttp_12_http_parser_HttpRequestParser.__pyx_base = *__pyx_vtabptr_7aiohttp_12_http_parser_HttpParser; + __pyx_vtable_7aiohttp_12_http_parser_HttpRequestParser.__pyx_base._on_status_complete = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_17HttpRequestParser__on_status_complete; + __pyx_type_7aiohttp_12_http_parser_HttpRequestParser.tp_base = __pyx_ptype_7aiohttp_12_http_parser_HttpParser; + if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser_HttpRequestParser) < 0) __PYX_ERR(0, 537, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_7aiohttp_12_http_parser_HttpRequestParser.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser_HttpRequestParser.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser_HttpRequestParser.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_7aiohttp_12_http_parser_HttpRequestParser.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type_7aiohttp_12_http_parser_HttpRequestParser.tp_dict, __pyx_vtabptr_7aiohttp_12_http_parser_HttpRequestParser) < 0) __PYX_ERR(0, 537, __pyx_L1_error) + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_HttpRequestParser, (PyObject *)&__pyx_type_7aiohttp_12_http_parser_HttpRequestParser) < 0) __PYX_ERR(0, 537, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7aiohttp_12_http_parser_HttpRequestParser) < 0) __PYX_ERR(0, 537, __pyx_L1_error) + __pyx_ptype_7aiohttp_12_http_parser_HttpRequestParser = &__pyx_type_7aiohttp_12_http_parser_HttpRequestParser; + __pyx_vtabptr_7aiohttp_12_http_parser_HttpResponseParser = &__pyx_vtable_7aiohttp_12_http_parser_HttpResponseParser; + __pyx_vtable_7aiohttp_12_http_parser_HttpResponseParser.__pyx_base = *__pyx_vtabptr_7aiohttp_12_http_parser_HttpParser; + __pyx_vtable_7aiohttp_12_http_parser_HttpResponseParser.__pyx_base._on_status_complete = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_18HttpResponseParser__on_status_complete; + __pyx_type_7aiohttp_12_http_parser_HttpResponseParser.tp_base = __pyx_ptype_7aiohttp_12_http_parser_HttpParser; + if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser_HttpResponseParser) < 0) __PYX_ERR(0, 564, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_7aiohttp_12_http_parser_HttpResponseParser.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser_HttpResponseParser.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser_HttpResponseParser.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_7aiohttp_12_http_parser_HttpResponseParser.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type_7aiohttp_12_http_parser_HttpResponseParser.tp_dict, __pyx_vtabptr_7aiohttp_12_http_parser_HttpResponseParser) < 0) __PYX_ERR(0, 564, __pyx_L1_error) + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_HttpResponseParser, (PyObject *)&__pyx_type_7aiohttp_12_http_parser_HttpResponseParser) < 0) __PYX_ERR(0, 564, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7aiohttp_12_http_parser_HttpResponseParser) < 0) __PYX_ERR(0, 564, __pyx_L1_error) + __pyx_ptype_7aiohttp_12_http_parser_HttpResponseParser = &__pyx_type_7aiohttp_12_http_parser_HttpResponseParser; + if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct____repr__) < 0) __PYX_ERR(0, 118, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct____repr__.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct____repr__.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct____repr__.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct____repr__.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + __pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct____repr__ = &__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct____repr__; + if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr) < 0) __PYX_ERR(0, 130, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + __pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr = &__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr; + if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__) < 0) __PYX_ERR(0, 216, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + __pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ = &__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__; + if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr) < 0) __PYX_ERR(0, 227, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + __pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr = &__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", + #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 + sizeof(PyTypeObject), + #else + sizeof(PyHeapTypeObject), + #endif + __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_4bool_bool = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "bool", sizeof(PyBoolObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_7cpython_4bool_bool) __PYX_ERR(3, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_7complex_complex = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "complex", sizeof(PyComplexObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_7cpython_7complex_complex) __PYX_ERR(4, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION < 3 +#ifdef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC void +#else +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#endif +#else +#ifdef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC init_http_parser(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC init_http_parser(void) +#else +__Pyx_PyMODINIT_FUNC PyInit__http_parser(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit__http_parser(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { + result = PyDict_SetItemString(moddict, to_name, value); + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec__http_parser(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + PyObject *__pyx_t_25 = NULL; + PyObject *__pyx_t_26 = NULL; + PyObject *__pyx_t_27 = NULL; + PyObject *__pyx_t_28 = NULL; + PyObject *__pyx_t_29 = NULL; + PyObject *__pyx_t_30 = NULL; + PyObject *__pyx_t_31 = NULL; + PyObject *__pyx_t_32 = NULL; + PyObject *__pyx_t_33 = NULL; + PyObject *__pyx_t_34 = NULL; + PyObject *__pyx_t_35 = NULL; + PyObject *__pyx_t_36 = NULL; + PyObject *__pyx_t_37 = NULL; + PyObject *__pyx_t_38 = NULL; + PyObject *__pyx_t_39 = NULL; + PyObject *__pyx_t_40 = NULL; + PyObject *__pyx_t_41 = NULL; + PyObject *__pyx_t_42 = NULL; + PyObject *__pyx_t_43 = NULL; + PyObject *__pyx_t_44 = NULL; + PyObject *__pyx_t_45 = NULL; + PyObject *__pyx_t_46 = NULL; + PyObject *__pyx_t_47 = NULL; + PyObject *__pyx_t_48 = NULL; + PyObject *__pyx_t_49 = NULL; + PyObject *__pyx_t_50 = NULL; + PyObject *__pyx_t_51 = NULL; + PyObject *__pyx_t_52 = NULL; + PyObject *__pyx_t_53 = NULL; + PyObject *__pyx_t_54 = NULL; + PyObject *__pyx_t_55 = NULL; + PyObject *__pyx_t_56 = NULL; + PyObject *__pyx_t_57 = NULL; + PyObject *__pyx_t_58 = NULL; + PyObject *__pyx_t_59 = NULL; + PyObject *__pyx_t_60 = NULL; + PyObject *__pyx_t_61 = NULL; + PyObject *__pyx_t_62 = NULL; + PyObject *__pyx_t_63 = NULL; + PyObject *__pyx_t_64 = NULL; + PyObject *__pyx_t_65 = NULL; + PyObject *__pyx_t_66 = NULL; + PyObject *__pyx_t_67 = NULL; + PyObject *__pyx_t_68 = NULL; + PyObject *__pyx_t_69 = NULL; + PyObject *__pyx_t_70 = NULL; + PyObject *__pyx_t_71 = NULL; + PyObject *__pyx_t_72 = NULL; + PyObject *__pyx_t_73 = NULL; + PyObject *__pyx_t_74 = NULL; + PyObject *__pyx_t_75 = NULL; + PyObject *__pyx_t_76 = NULL; + PyObject *__pyx_t_77 = NULL; + PyObject *__pyx_t_78 = NULL; + PyObject *__pyx_t_79 = NULL; + long __pyx_t_80; + enum http_method __pyx_t_81; + char const *__pyx_t_82; + int __pyx_t_83; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module '_http_parser' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit__http_parser(void)", 0); + if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("_http_parser", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_b); + __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_cython_runtime); + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_aiohttp___http_parser) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "aiohttp._http_parser")) { + if (unlikely(PyDict_SetItemString(modules, "aiohttp._http_parser", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) goto __pyx_L1_error; + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) goto __pyx_L1_error; + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely(__Pyx_modinit_type_init_code() != 0)) goto __pyx_L1_error; + if (unlikely(__Pyx_modinit_type_import_code() != 0)) goto __pyx_L1_error; + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "aiohttp/_http_parser.pyx":11 + * Py_buffer, PyBytes_AsString, PyBytes_AsStringAndSize) + * + * from multidict import (CIMultiDict as _CIMultiDict, # <<<<<<<<<<<<<< + * CIMultiDictProxy as _CIMultiDictProxy) + * from yarl import URL as _URL + */ + __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_CIMultiDict); + __Pyx_GIVEREF(__pyx_n_s_CIMultiDict); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_CIMultiDict); + __Pyx_INCREF(__pyx_n_s_CIMultiDictProxy); + __Pyx_GIVEREF(__pyx_n_s_CIMultiDictProxy); + PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_CIMultiDictProxy); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_multidict, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_CIMultiDict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CIMultiDict_2, __pyx_t_1) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_CIMultiDictProxy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CIMultiDictProxy_2, __pyx_t_1) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":13 + * from multidict import (CIMultiDict as _CIMultiDict, + * CIMultiDictProxy as _CIMultiDictProxy) + * from yarl import URL as _URL # <<<<<<<<<<<<<< + * + * from aiohttp import hdrs + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_URL); + __Pyx_GIVEREF(__pyx_n_s_URL); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_URL); + __pyx_t_1 = __Pyx_Import(__pyx_n_s_yarl, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_URL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_URL_2, __pyx_t_2) < 0) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":15 + * from yarl import URL as _URL + * + * from aiohttp import hdrs # <<<<<<<<<<<<<< + * from .http_exceptions import ( + * BadHttpMessage, BadStatusLine, InvalidHeader, LineTooLong, InvalidURLError, + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_hdrs); + __Pyx_GIVEREF(__pyx_n_s_hdrs); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_hdrs); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiohttp, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_hdrs, __pyx_t_1) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":17 + * from aiohttp import hdrs + * from .http_exceptions import ( + * BadHttpMessage, BadStatusLine, InvalidHeader, LineTooLong, InvalidURLError, # <<<<<<<<<<<<<< + * PayloadEncodingError, ContentLengthError, TransferEncodingError) + * from .http_writer import (HttpVersion as _HttpVersion, + */ + __pyx_t_2 = PyList_New(8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_BadHttpMessage); + __Pyx_GIVEREF(__pyx_n_s_BadHttpMessage); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_BadHttpMessage); + __Pyx_INCREF(__pyx_n_s_BadStatusLine); + __Pyx_GIVEREF(__pyx_n_s_BadStatusLine); + PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_BadStatusLine); + __Pyx_INCREF(__pyx_n_s_InvalidHeader); + __Pyx_GIVEREF(__pyx_n_s_InvalidHeader); + PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_InvalidHeader); + __Pyx_INCREF(__pyx_n_s_LineTooLong); + __Pyx_GIVEREF(__pyx_n_s_LineTooLong); + PyList_SET_ITEM(__pyx_t_2, 3, __pyx_n_s_LineTooLong); + __Pyx_INCREF(__pyx_n_s_InvalidURLError); + __Pyx_GIVEREF(__pyx_n_s_InvalidURLError); + PyList_SET_ITEM(__pyx_t_2, 4, __pyx_n_s_InvalidURLError); + __Pyx_INCREF(__pyx_n_s_PayloadEncodingError); + __Pyx_GIVEREF(__pyx_n_s_PayloadEncodingError); + PyList_SET_ITEM(__pyx_t_2, 5, __pyx_n_s_PayloadEncodingError); + __Pyx_INCREF(__pyx_n_s_ContentLengthError); + __Pyx_GIVEREF(__pyx_n_s_ContentLengthError); + PyList_SET_ITEM(__pyx_t_2, 6, __pyx_n_s_ContentLengthError); + __Pyx_INCREF(__pyx_n_s_TransferEncodingError); + __Pyx_GIVEREF(__pyx_n_s_TransferEncodingError); + PyList_SET_ITEM(__pyx_t_2, 7, __pyx_n_s_TransferEncodingError); + + /* "aiohttp/_http_parser.pyx":16 + * + * from aiohttp import hdrs + * from .http_exceptions import ( # <<<<<<<<<<<<<< + * BadHttpMessage, BadStatusLine, InvalidHeader, LineTooLong, InvalidURLError, + * PayloadEncodingError, ContentLengthError, TransferEncodingError) + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_http_exceptions, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_BadHttpMessage); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_BadHttpMessage, __pyx_t_2) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_BadStatusLine); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_BadStatusLine, __pyx_t_2) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_InvalidHeader); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InvalidHeader, __pyx_t_2) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_LineTooLong); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_LineTooLong, __pyx_t_2) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_InvalidURLError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_InvalidURLError, __pyx_t_2) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_PayloadEncodingError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PayloadEncodingError, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_ContentLengthError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ContentLengthError, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_TransferEncodingError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TransferEncodingError, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":19 + * BadHttpMessage, BadStatusLine, InvalidHeader, LineTooLong, InvalidURLError, + * PayloadEncodingError, ContentLengthError, TransferEncodingError) + * from .http_writer import (HttpVersion as _HttpVersion, # <<<<<<<<<<<<<< + * HttpVersion10 as _HttpVersion10, + * HttpVersion11 as _HttpVersion11) + */ + __pyx_t_1 = PyList_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_HttpVersion); + __Pyx_GIVEREF(__pyx_n_s_HttpVersion); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_HttpVersion); + __Pyx_INCREF(__pyx_n_s_HttpVersion10); + __Pyx_GIVEREF(__pyx_n_s_HttpVersion10); + PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_HttpVersion10); + __Pyx_INCREF(__pyx_n_s_HttpVersion11); + __Pyx_GIVEREF(__pyx_n_s_HttpVersion11); + PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_HttpVersion11); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_http_writer, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_HttpVersion); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_HttpVersion_2, __pyx_t_1) < 0) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_HttpVersion10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_HttpVersion10_2, __pyx_t_1) < 0) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_HttpVersion11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_HttpVersion11_2, __pyx_t_1) < 0) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_http_parser.pyx":22 + * HttpVersion10 as _HttpVersion10, + * HttpVersion11 as _HttpVersion11) + * from .http_parser import DeflateBuffer as _DeflateBuffer # <<<<<<<<<<<<<< + * from .streams import (EMPTY_PAYLOAD as _EMPTY_PAYLOAD, + * StreamReader as _StreamReader) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_DeflateBuffer); + __Pyx_GIVEREF(__pyx_n_s_DeflateBuffer); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_DeflateBuffer); + __pyx_t_1 = __Pyx_Import(__pyx_n_s_http_parser, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_DeflateBuffer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DeflateBuffer_2, __pyx_t_2) < 0) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":23 + * HttpVersion11 as _HttpVersion11) + * from .http_parser import DeflateBuffer as _DeflateBuffer + * from .streams import (EMPTY_PAYLOAD as _EMPTY_PAYLOAD, # <<<<<<<<<<<<<< + * StreamReader as _StreamReader) + * + */ + __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_EMPTY_PAYLOAD); + __Pyx_GIVEREF(__pyx_n_s_EMPTY_PAYLOAD); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_EMPTY_PAYLOAD); + __Pyx_INCREF(__pyx_n_s_StreamReader); + __Pyx_GIVEREF(__pyx_n_s_StreamReader); + PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_StreamReader); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_streams, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_EMPTY_PAYLOAD); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_EMPTY_PAYLOAD_2, __pyx_t_1) < 0) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_StreamReader); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_StreamReader_2, __pyx_t_1) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_headers.pxi":4 + * # Run ./tools/gen.py to update it after the origin changing. + * + * from . import hdrs # <<<<<<<<<<<<<< + * cdef tuple headers = ( + * hdrs.ACCEPT, + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_hdrs); + __Pyx_GIVEREF(__pyx_n_s_hdrs); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_hdrs); + __pyx_t_1 = __Pyx_Import(__pyx_n_s__4, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_hdrs, __pyx_t_2) < 0) __PYX_ERR(5, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":6 + * from . import hdrs + * cdef tuple headers = ( + * hdrs.ACCEPT, # <<<<<<<<<<<<<< + * hdrs.ACCEPT_CHARSET, + * hdrs.ACCEPT_ENCODING, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCEPT); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":7 + * cdef tuple headers = ( + * hdrs.ACCEPT, + * hdrs.ACCEPT_CHARSET, # <<<<<<<<<<<<<< + * hdrs.ACCEPT_ENCODING, + * hdrs.ACCEPT_LANGUAGE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCEPT_CHARSET); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":8 + * hdrs.ACCEPT, + * hdrs.ACCEPT_CHARSET, + * hdrs.ACCEPT_ENCODING, # <<<<<<<<<<<<<< + * hdrs.ACCEPT_LANGUAGE, + * hdrs.ACCEPT_RANGES, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCEPT_ENCODING); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":9 + * hdrs.ACCEPT_CHARSET, + * hdrs.ACCEPT_ENCODING, + * hdrs.ACCEPT_LANGUAGE, # <<<<<<<<<<<<<< + * hdrs.ACCEPT_RANGES, + * hdrs.ACCESS_CONTROL_ALLOW_CREDENTIALS, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCEPT_LANGUAGE); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":10 + * hdrs.ACCEPT_ENCODING, + * hdrs.ACCEPT_LANGUAGE, + * hdrs.ACCEPT_RANGES, # <<<<<<<<<<<<<< + * hdrs.ACCESS_CONTROL_ALLOW_CREDENTIALS, + * hdrs.ACCESS_CONTROL_ALLOW_HEADERS, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCEPT_RANGES); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":11 + * hdrs.ACCEPT_LANGUAGE, + * hdrs.ACCEPT_RANGES, + * hdrs.ACCESS_CONTROL_ALLOW_CREDENTIALS, # <<<<<<<<<<<<<< + * hdrs.ACCESS_CONTROL_ALLOW_HEADERS, + * hdrs.ACCESS_CONTROL_ALLOW_METHODS, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_ALLOW_CREDENTIALS); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":12 + * hdrs.ACCEPT_RANGES, + * hdrs.ACCESS_CONTROL_ALLOW_CREDENTIALS, + * hdrs.ACCESS_CONTROL_ALLOW_HEADERS, # <<<<<<<<<<<<<< + * hdrs.ACCESS_CONTROL_ALLOW_METHODS, + * hdrs.ACCESS_CONTROL_ALLOW_ORIGIN, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_ALLOW_HEADERS); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":13 + * hdrs.ACCESS_CONTROL_ALLOW_CREDENTIALS, + * hdrs.ACCESS_CONTROL_ALLOW_HEADERS, + * hdrs.ACCESS_CONTROL_ALLOW_METHODS, # <<<<<<<<<<<<<< + * hdrs.ACCESS_CONTROL_ALLOW_ORIGIN, + * hdrs.ACCESS_CONTROL_EXPOSE_HEADERS, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_ALLOW_METHODS); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":14 + * hdrs.ACCESS_CONTROL_ALLOW_HEADERS, + * hdrs.ACCESS_CONTROL_ALLOW_METHODS, + * hdrs.ACCESS_CONTROL_ALLOW_ORIGIN, # <<<<<<<<<<<<<< + * hdrs.ACCESS_CONTROL_EXPOSE_HEADERS, + * hdrs.ACCESS_CONTROL_MAX_AGE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_ALLOW_ORIGIN); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":15 + * hdrs.ACCESS_CONTROL_ALLOW_METHODS, + * hdrs.ACCESS_CONTROL_ALLOW_ORIGIN, + * hdrs.ACCESS_CONTROL_EXPOSE_HEADERS, # <<<<<<<<<<<<<< + * hdrs.ACCESS_CONTROL_MAX_AGE, + * hdrs.ACCESS_CONTROL_REQUEST_HEADERS, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_EXPOSE_HEADERS); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":16 + * hdrs.ACCESS_CONTROL_ALLOW_ORIGIN, + * hdrs.ACCESS_CONTROL_EXPOSE_HEADERS, + * hdrs.ACCESS_CONTROL_MAX_AGE, # <<<<<<<<<<<<<< + * hdrs.ACCESS_CONTROL_REQUEST_HEADERS, + * hdrs.ACCESS_CONTROL_REQUEST_METHOD, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_MAX_AGE); if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":17 + * hdrs.ACCESS_CONTROL_EXPOSE_HEADERS, + * hdrs.ACCESS_CONTROL_MAX_AGE, + * hdrs.ACCESS_CONTROL_REQUEST_HEADERS, # <<<<<<<<<<<<<< + * hdrs.ACCESS_CONTROL_REQUEST_METHOD, + * hdrs.AGE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_REQUEST_HEADERS); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":18 + * hdrs.ACCESS_CONTROL_MAX_AGE, + * hdrs.ACCESS_CONTROL_REQUEST_HEADERS, + * hdrs.ACCESS_CONTROL_REQUEST_METHOD, # <<<<<<<<<<<<<< + * hdrs.AGE, + * hdrs.ALLOW, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_REQUEST_METHOD); if (unlikely(!__pyx_t_14)) __PYX_ERR(5, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":19 + * hdrs.ACCESS_CONTROL_REQUEST_HEADERS, + * hdrs.ACCESS_CONTROL_REQUEST_METHOD, + * hdrs.AGE, # <<<<<<<<<<<<<< + * hdrs.ALLOW, + * hdrs.AUTHORIZATION, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_AGE); if (unlikely(!__pyx_t_15)) __PYX_ERR(5, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":20 + * hdrs.ACCESS_CONTROL_REQUEST_METHOD, + * hdrs.AGE, + * hdrs.ALLOW, # <<<<<<<<<<<<<< + * hdrs.AUTHORIZATION, + * hdrs.CACHE_CONTROL, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ALLOW); if (unlikely(!__pyx_t_16)) __PYX_ERR(5, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":21 + * hdrs.AGE, + * hdrs.ALLOW, + * hdrs.AUTHORIZATION, # <<<<<<<<<<<<<< + * hdrs.CACHE_CONTROL, + * hdrs.CONNECTION, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_AUTHORIZATION); if (unlikely(!__pyx_t_17)) __PYX_ERR(5, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":22 + * hdrs.ALLOW, + * hdrs.AUTHORIZATION, + * hdrs.CACHE_CONTROL, # <<<<<<<<<<<<<< + * hdrs.CONNECTION, + * hdrs.CONTENT_DISPOSITION, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CACHE_CONTROL); if (unlikely(!__pyx_t_18)) __PYX_ERR(5, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":23 + * hdrs.AUTHORIZATION, + * hdrs.CACHE_CONTROL, + * hdrs.CONNECTION, # <<<<<<<<<<<<<< + * hdrs.CONTENT_DISPOSITION, + * hdrs.CONTENT_ENCODING, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 23, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONNECTION); if (unlikely(!__pyx_t_19)) __PYX_ERR(5, 23, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_19); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":24 + * hdrs.CACHE_CONTROL, + * hdrs.CONNECTION, + * hdrs.CONTENT_DISPOSITION, # <<<<<<<<<<<<<< + * hdrs.CONTENT_ENCODING, + * hdrs.CONTENT_LANGUAGE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_DISPOSITION); if (unlikely(!__pyx_t_20)) __PYX_ERR(5, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":25 + * hdrs.CONNECTION, + * hdrs.CONTENT_DISPOSITION, + * hdrs.CONTENT_ENCODING, # <<<<<<<<<<<<<< + * hdrs.CONTENT_LANGUAGE, + * hdrs.CONTENT_LENGTH, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 25, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_ENCODING); if (unlikely(!__pyx_t_21)) __PYX_ERR(5, 25, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_21); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":26 + * hdrs.CONTENT_DISPOSITION, + * hdrs.CONTENT_ENCODING, + * hdrs.CONTENT_LANGUAGE, # <<<<<<<<<<<<<< + * hdrs.CONTENT_LENGTH, + * hdrs.CONTENT_LOCATION, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_LANGUAGE); if (unlikely(!__pyx_t_22)) __PYX_ERR(5, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_22); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":27 + * hdrs.CONTENT_ENCODING, + * hdrs.CONTENT_LANGUAGE, + * hdrs.CONTENT_LENGTH, # <<<<<<<<<<<<<< + * hdrs.CONTENT_LOCATION, + * hdrs.CONTENT_MD5, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 27, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_23 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_LENGTH); if (unlikely(!__pyx_t_23)) __PYX_ERR(5, 27, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_23); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":28 + * hdrs.CONTENT_LANGUAGE, + * hdrs.CONTENT_LENGTH, + * hdrs.CONTENT_LOCATION, # <<<<<<<<<<<<<< + * hdrs.CONTENT_MD5, + * hdrs.CONTENT_RANGE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_24 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_LOCATION); if (unlikely(!__pyx_t_24)) __PYX_ERR(5, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_24); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":29 + * hdrs.CONTENT_LENGTH, + * hdrs.CONTENT_LOCATION, + * hdrs.CONTENT_MD5, # <<<<<<<<<<<<<< + * hdrs.CONTENT_RANGE, + * hdrs.CONTENT_TRANSFER_ENCODING, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_MD5); if (unlikely(!__pyx_t_25)) __PYX_ERR(5, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_25); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":30 + * hdrs.CONTENT_LOCATION, + * hdrs.CONTENT_MD5, + * hdrs.CONTENT_RANGE, # <<<<<<<<<<<<<< + * hdrs.CONTENT_TRANSFER_ENCODING, + * hdrs.CONTENT_TYPE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 30, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_26 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_RANGE); if (unlikely(!__pyx_t_26)) __PYX_ERR(5, 30, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_26); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":31 + * hdrs.CONTENT_MD5, + * hdrs.CONTENT_RANGE, + * hdrs.CONTENT_TRANSFER_ENCODING, # <<<<<<<<<<<<<< + * hdrs.CONTENT_TYPE, + * hdrs.COOKIE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_27 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_TRANSFER_ENCODING); if (unlikely(!__pyx_t_27)) __PYX_ERR(5, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_27); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":32 + * hdrs.CONTENT_RANGE, + * hdrs.CONTENT_TRANSFER_ENCODING, + * hdrs.CONTENT_TYPE, # <<<<<<<<<<<<<< + * hdrs.COOKIE, + * hdrs.DATE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_28 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_TYPE); if (unlikely(!__pyx_t_28)) __PYX_ERR(5, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_28); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":33 + * hdrs.CONTENT_TRANSFER_ENCODING, + * hdrs.CONTENT_TYPE, + * hdrs.COOKIE, # <<<<<<<<<<<<<< + * hdrs.DATE, + * hdrs.DESTINATION, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_29 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COOKIE); if (unlikely(!__pyx_t_29)) __PYX_ERR(5, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_29); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":34 + * hdrs.CONTENT_TYPE, + * hdrs.COOKIE, + * hdrs.DATE, # <<<<<<<<<<<<<< + * hdrs.DESTINATION, + * hdrs.DIGEST, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_30 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_DATE); if (unlikely(!__pyx_t_30)) __PYX_ERR(5, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_30); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":35 + * hdrs.COOKIE, + * hdrs.DATE, + * hdrs.DESTINATION, # <<<<<<<<<<<<<< + * hdrs.DIGEST, + * hdrs.ETAG, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_DESTINATION); if (unlikely(!__pyx_t_31)) __PYX_ERR(5, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_31); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":36 + * hdrs.DATE, + * hdrs.DESTINATION, + * hdrs.DIGEST, # <<<<<<<<<<<<<< + * hdrs.ETAG, + * hdrs.EXPECT, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 36, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_32 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_DIGEST); if (unlikely(!__pyx_t_32)) __PYX_ERR(5, 36, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_32); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":37 + * hdrs.DESTINATION, + * hdrs.DIGEST, + * hdrs.ETAG, # <<<<<<<<<<<<<< + * hdrs.EXPECT, + * hdrs.EXPIRES, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_33 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ETAG); if (unlikely(!__pyx_t_33)) __PYX_ERR(5, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_33); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":38 + * hdrs.DIGEST, + * hdrs.ETAG, + * hdrs.EXPECT, # <<<<<<<<<<<<<< + * hdrs.EXPIRES, + * hdrs.FORWARDED, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_34 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_EXPECT); if (unlikely(!__pyx_t_34)) __PYX_ERR(5, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_34); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":39 + * hdrs.ETAG, + * hdrs.EXPECT, + * hdrs.EXPIRES, # <<<<<<<<<<<<<< + * hdrs.FORWARDED, + * hdrs.FROM, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_35 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_EXPIRES); if (unlikely(!__pyx_t_35)) __PYX_ERR(5, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_35); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":40 + * hdrs.EXPECT, + * hdrs.EXPIRES, + * hdrs.FORWARDED, # <<<<<<<<<<<<<< + * hdrs.FROM, + * hdrs.HOST, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_36 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_FORWARDED); if (unlikely(!__pyx_t_36)) __PYX_ERR(5, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_36); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":41 + * hdrs.EXPIRES, + * hdrs.FORWARDED, + * hdrs.FROM, # <<<<<<<<<<<<<< + * hdrs.HOST, + * hdrs.IF_MATCH, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 41, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_FROM); if (unlikely(!__pyx_t_37)) __PYX_ERR(5, 41, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_37); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":42 + * hdrs.FORWARDED, + * hdrs.FROM, + * hdrs.HOST, # <<<<<<<<<<<<<< + * hdrs.IF_MATCH, + * hdrs.IF_MODIFIED_SINCE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_38 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_HOST); if (unlikely(!__pyx_t_38)) __PYX_ERR(5, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_38); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":43 + * hdrs.FROM, + * hdrs.HOST, + * hdrs.IF_MATCH, # <<<<<<<<<<<<<< + * hdrs.IF_MODIFIED_SINCE, + * hdrs.IF_NONE_MATCH, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_39 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_IF_MATCH); if (unlikely(!__pyx_t_39)) __PYX_ERR(5, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_39); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":44 + * hdrs.HOST, + * hdrs.IF_MATCH, + * hdrs.IF_MODIFIED_SINCE, # <<<<<<<<<<<<<< + * hdrs.IF_NONE_MATCH, + * hdrs.IF_RANGE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 44, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_IF_MODIFIED_SINCE); if (unlikely(!__pyx_t_40)) __PYX_ERR(5, 44, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_40); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":45 + * hdrs.IF_MATCH, + * hdrs.IF_MODIFIED_SINCE, + * hdrs.IF_NONE_MATCH, # <<<<<<<<<<<<<< + * hdrs.IF_RANGE, + * hdrs.IF_UNMODIFIED_SINCE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 45, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_IF_NONE_MATCH); if (unlikely(!__pyx_t_41)) __PYX_ERR(5, 45, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_41); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":46 + * hdrs.IF_MODIFIED_SINCE, + * hdrs.IF_NONE_MATCH, + * hdrs.IF_RANGE, # <<<<<<<<<<<<<< + * hdrs.IF_UNMODIFIED_SINCE, + * hdrs.KEEP_ALIVE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_42 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_IF_RANGE); if (unlikely(!__pyx_t_42)) __PYX_ERR(5, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_42); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":47 + * hdrs.IF_NONE_MATCH, + * hdrs.IF_RANGE, + * hdrs.IF_UNMODIFIED_SINCE, # <<<<<<<<<<<<<< + * hdrs.KEEP_ALIVE, + * hdrs.LAST_EVENT_ID, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_43 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_IF_UNMODIFIED_SINCE); if (unlikely(!__pyx_t_43)) __PYX_ERR(5, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_43); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":48 + * hdrs.IF_RANGE, + * hdrs.IF_UNMODIFIED_SINCE, + * hdrs.KEEP_ALIVE, # <<<<<<<<<<<<<< + * hdrs.LAST_EVENT_ID, + * hdrs.LAST_MODIFIED, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_44 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_KEEP_ALIVE); if (unlikely(!__pyx_t_44)) __PYX_ERR(5, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_44); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":49 + * hdrs.IF_UNMODIFIED_SINCE, + * hdrs.KEEP_ALIVE, + * hdrs.LAST_EVENT_ID, # <<<<<<<<<<<<<< + * hdrs.LAST_MODIFIED, + * hdrs.LINK, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 49, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_45 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_LAST_EVENT_ID); if (unlikely(!__pyx_t_45)) __PYX_ERR(5, 49, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_45); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":50 + * hdrs.KEEP_ALIVE, + * hdrs.LAST_EVENT_ID, + * hdrs.LAST_MODIFIED, # <<<<<<<<<<<<<< + * hdrs.LINK, + * hdrs.LOCATION, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_46 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_LAST_MODIFIED); if (unlikely(!__pyx_t_46)) __PYX_ERR(5, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_46); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":51 + * hdrs.LAST_EVENT_ID, + * hdrs.LAST_MODIFIED, + * hdrs.LINK, # <<<<<<<<<<<<<< + * hdrs.LOCATION, + * hdrs.MAX_FORWARDS, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_47 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_LINK); if (unlikely(!__pyx_t_47)) __PYX_ERR(5, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_47); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":52 + * hdrs.LAST_MODIFIED, + * hdrs.LINK, + * hdrs.LOCATION, # <<<<<<<<<<<<<< + * hdrs.MAX_FORWARDS, + * hdrs.ORIGIN, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 52, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_48 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_LOCATION); if (unlikely(!__pyx_t_48)) __PYX_ERR(5, 52, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_48); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":53 + * hdrs.LINK, + * hdrs.LOCATION, + * hdrs.MAX_FORWARDS, # <<<<<<<<<<<<<< + * hdrs.ORIGIN, + * hdrs.PRAGMA, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_49 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_MAX_FORWARDS); if (unlikely(!__pyx_t_49)) __PYX_ERR(5, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_49); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":54 + * hdrs.LOCATION, + * hdrs.MAX_FORWARDS, + * hdrs.ORIGIN, # <<<<<<<<<<<<<< + * hdrs.PRAGMA, + * hdrs.PROXY_AUTHENTICATE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_50 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ORIGIN); if (unlikely(!__pyx_t_50)) __PYX_ERR(5, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_50); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":55 + * hdrs.MAX_FORWARDS, + * hdrs.ORIGIN, + * hdrs.PRAGMA, # <<<<<<<<<<<<<< + * hdrs.PROXY_AUTHENTICATE, + * hdrs.PROXY_AUTHORIZATION, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_51 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PRAGMA); if (unlikely(!__pyx_t_51)) __PYX_ERR(5, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_51); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":56 + * hdrs.ORIGIN, + * hdrs.PRAGMA, + * hdrs.PROXY_AUTHENTICATE, # <<<<<<<<<<<<<< + * hdrs.PROXY_AUTHORIZATION, + * hdrs.RANGE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_52 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PROXY_AUTHENTICATE); if (unlikely(!__pyx_t_52)) __PYX_ERR(5, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_52); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":57 + * hdrs.PRAGMA, + * hdrs.PROXY_AUTHENTICATE, + * hdrs.PROXY_AUTHORIZATION, # <<<<<<<<<<<<<< + * hdrs.RANGE, + * hdrs.REFERER, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_53 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PROXY_AUTHORIZATION); if (unlikely(!__pyx_t_53)) __PYX_ERR(5, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_53); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":58 + * hdrs.PROXY_AUTHENTICATE, + * hdrs.PROXY_AUTHORIZATION, + * hdrs.RANGE, # <<<<<<<<<<<<<< + * hdrs.REFERER, + * hdrs.RETRY_AFTER, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_54 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_RANGE); if (unlikely(!__pyx_t_54)) __PYX_ERR(5, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_54); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":59 + * hdrs.PROXY_AUTHORIZATION, + * hdrs.RANGE, + * hdrs.REFERER, # <<<<<<<<<<<<<< + * hdrs.RETRY_AFTER, + * hdrs.SEC_WEBSOCKET_ACCEPT, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_55 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_REFERER); if (unlikely(!__pyx_t_55)) __PYX_ERR(5, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_55); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":60 + * hdrs.RANGE, + * hdrs.REFERER, + * hdrs.RETRY_AFTER, # <<<<<<<<<<<<<< + * hdrs.SEC_WEBSOCKET_ACCEPT, + * hdrs.SEC_WEBSOCKET_EXTENSIONS, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_56 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_RETRY_AFTER); if (unlikely(!__pyx_t_56)) __PYX_ERR(5, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_56); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":61 + * hdrs.REFERER, + * hdrs.RETRY_AFTER, + * hdrs.SEC_WEBSOCKET_ACCEPT, # <<<<<<<<<<<<<< + * hdrs.SEC_WEBSOCKET_EXTENSIONS, + * hdrs.SEC_WEBSOCKET_KEY, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_57 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SEC_WEBSOCKET_ACCEPT); if (unlikely(!__pyx_t_57)) __PYX_ERR(5, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_57); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":62 + * hdrs.RETRY_AFTER, + * hdrs.SEC_WEBSOCKET_ACCEPT, + * hdrs.SEC_WEBSOCKET_EXTENSIONS, # <<<<<<<<<<<<<< + * hdrs.SEC_WEBSOCKET_KEY, + * hdrs.SEC_WEBSOCKET_KEY1, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_58 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SEC_WEBSOCKET_EXTENSIONS); if (unlikely(!__pyx_t_58)) __PYX_ERR(5, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_58); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":63 + * hdrs.SEC_WEBSOCKET_ACCEPT, + * hdrs.SEC_WEBSOCKET_EXTENSIONS, + * hdrs.SEC_WEBSOCKET_KEY, # <<<<<<<<<<<<<< + * hdrs.SEC_WEBSOCKET_KEY1, + * hdrs.SEC_WEBSOCKET_PROTOCOL, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_59 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SEC_WEBSOCKET_KEY); if (unlikely(!__pyx_t_59)) __PYX_ERR(5, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_59); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":64 + * hdrs.SEC_WEBSOCKET_EXTENSIONS, + * hdrs.SEC_WEBSOCKET_KEY, + * hdrs.SEC_WEBSOCKET_KEY1, # <<<<<<<<<<<<<< + * hdrs.SEC_WEBSOCKET_PROTOCOL, + * hdrs.SEC_WEBSOCKET_VERSION, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_60 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SEC_WEBSOCKET_KEY1); if (unlikely(!__pyx_t_60)) __PYX_ERR(5, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_60); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":65 + * hdrs.SEC_WEBSOCKET_KEY, + * hdrs.SEC_WEBSOCKET_KEY1, + * hdrs.SEC_WEBSOCKET_PROTOCOL, # <<<<<<<<<<<<<< + * hdrs.SEC_WEBSOCKET_VERSION, + * hdrs.SERVER, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_61 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SEC_WEBSOCKET_PROTOCOL); if (unlikely(!__pyx_t_61)) __PYX_ERR(5, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_61); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":66 + * hdrs.SEC_WEBSOCKET_KEY1, + * hdrs.SEC_WEBSOCKET_PROTOCOL, + * hdrs.SEC_WEBSOCKET_VERSION, # <<<<<<<<<<<<<< + * hdrs.SERVER, + * hdrs.SET_COOKIE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 66, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_62 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SEC_WEBSOCKET_VERSION); if (unlikely(!__pyx_t_62)) __PYX_ERR(5, 66, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_62); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":67 + * hdrs.SEC_WEBSOCKET_PROTOCOL, + * hdrs.SEC_WEBSOCKET_VERSION, + * hdrs.SERVER, # <<<<<<<<<<<<<< + * hdrs.SET_COOKIE, + * hdrs.TE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_63 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SERVER); if (unlikely(!__pyx_t_63)) __PYX_ERR(5, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_63); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":68 + * hdrs.SEC_WEBSOCKET_VERSION, + * hdrs.SERVER, + * hdrs.SET_COOKIE, # <<<<<<<<<<<<<< + * hdrs.TE, + * hdrs.TRAILER, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_64 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SET_COOKIE); if (unlikely(!__pyx_t_64)) __PYX_ERR(5, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_64); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":69 + * hdrs.SERVER, + * hdrs.SET_COOKIE, + * hdrs.TE, # <<<<<<<<<<<<<< + * hdrs.TRAILER, + * hdrs.TRANSFER_ENCODING, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_65 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_TE); if (unlikely(!__pyx_t_65)) __PYX_ERR(5, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_65); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":70 + * hdrs.SET_COOKIE, + * hdrs.TE, + * hdrs.TRAILER, # <<<<<<<<<<<<<< + * hdrs.TRANSFER_ENCODING, + * hdrs.UPGRADE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_66 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_TRAILER); if (unlikely(!__pyx_t_66)) __PYX_ERR(5, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_66); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":71 + * hdrs.TE, + * hdrs.TRAILER, + * hdrs.TRANSFER_ENCODING, # <<<<<<<<<<<<<< + * hdrs.UPGRADE, + * hdrs.URI, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_67 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_TRANSFER_ENCODING); if (unlikely(!__pyx_t_67)) __PYX_ERR(5, 71, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_67); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":72 + * hdrs.TRAILER, + * hdrs.TRANSFER_ENCODING, + * hdrs.UPGRADE, # <<<<<<<<<<<<<< + * hdrs.URI, + * hdrs.USER_AGENT, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_68 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_UPGRADE); if (unlikely(!__pyx_t_68)) __PYX_ERR(5, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_68); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":73 + * hdrs.TRANSFER_ENCODING, + * hdrs.UPGRADE, + * hdrs.URI, # <<<<<<<<<<<<<< + * hdrs.USER_AGENT, + * hdrs.VARY, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_69 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_URI); if (unlikely(!__pyx_t_69)) __PYX_ERR(5, 73, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_69); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":74 + * hdrs.UPGRADE, + * hdrs.URI, + * hdrs.USER_AGENT, # <<<<<<<<<<<<<< + * hdrs.VARY, + * hdrs.VIA, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_70 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_USER_AGENT); if (unlikely(!__pyx_t_70)) __PYX_ERR(5, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_70); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":75 + * hdrs.URI, + * hdrs.USER_AGENT, + * hdrs.VARY, # <<<<<<<<<<<<<< + * hdrs.VIA, + * hdrs.WANT_DIGEST, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_71 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_VARY); if (unlikely(!__pyx_t_71)) __PYX_ERR(5, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_71); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":76 + * hdrs.USER_AGENT, + * hdrs.VARY, + * hdrs.VIA, # <<<<<<<<<<<<<< + * hdrs.WANT_DIGEST, + * hdrs.WARNING, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_72 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_VIA); if (unlikely(!__pyx_t_72)) __PYX_ERR(5, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_72); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":77 + * hdrs.VARY, + * hdrs.VIA, + * hdrs.WANT_DIGEST, # <<<<<<<<<<<<<< + * hdrs.WARNING, + * hdrs.WEBSOCKET, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_73 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_WANT_DIGEST); if (unlikely(!__pyx_t_73)) __PYX_ERR(5, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_73); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":78 + * hdrs.VIA, + * hdrs.WANT_DIGEST, + * hdrs.WARNING, # <<<<<<<<<<<<<< + * hdrs.WEBSOCKET, + * hdrs.WWW_AUTHENTICATE, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_74 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_WARNING); if (unlikely(!__pyx_t_74)) __PYX_ERR(5, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_74); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":79 + * hdrs.WANT_DIGEST, + * hdrs.WARNING, + * hdrs.WEBSOCKET, # <<<<<<<<<<<<<< + * hdrs.WWW_AUTHENTICATE, + * hdrs.X_FORWARDED_FOR, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_75 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_WEBSOCKET); if (unlikely(!__pyx_t_75)) __PYX_ERR(5, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_75); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":80 + * hdrs.WARNING, + * hdrs.WEBSOCKET, + * hdrs.WWW_AUTHENTICATE, # <<<<<<<<<<<<<< + * hdrs.X_FORWARDED_FOR, + * hdrs.X_FORWARDED_HOST, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_76 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_WWW_AUTHENTICATE); if (unlikely(!__pyx_t_76)) __PYX_ERR(5, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_76); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":81 + * hdrs.WEBSOCKET, + * hdrs.WWW_AUTHENTICATE, + * hdrs.X_FORWARDED_FOR, # <<<<<<<<<<<<<< + * hdrs.X_FORWARDED_HOST, + * hdrs.X_FORWARDED_PROTO, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 81, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_77 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_X_FORWARDED_FOR); if (unlikely(!__pyx_t_77)) __PYX_ERR(5, 81, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_77); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":82 + * hdrs.WWW_AUTHENTICATE, + * hdrs.X_FORWARDED_FOR, + * hdrs.X_FORWARDED_HOST, # <<<<<<<<<<<<<< + * hdrs.X_FORWARDED_PROTO, + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_78 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_X_FORWARDED_HOST); if (unlikely(!__pyx_t_78)) __PYX_ERR(5, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_78); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":83 + * hdrs.X_FORWARDED_FOR, + * hdrs.X_FORWARDED_HOST, + * hdrs.X_FORWARDED_PROTO, # <<<<<<<<<<<<<< + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 83, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_79 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_X_FORWARDED_PROTO); if (unlikely(!__pyx_t_79)) __PYX_ERR(5, 83, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_79); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_headers.pxi":6 + * from . import hdrs + * cdef tuple headers = ( + * hdrs.ACCEPT, # <<<<<<<<<<<<<< + * hdrs.ACCEPT_CHARSET, + * hdrs.ACCEPT_ENCODING, + */ + __pyx_t_1 = PyTuple_New(78); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_t_9); + __Pyx_GIVEREF(__pyx_t_10); + PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_t_10); + __Pyx_GIVEREF(__pyx_t_11); + PyTuple_SET_ITEM(__pyx_t_1, 9, __pyx_t_11); + __Pyx_GIVEREF(__pyx_t_12); + PyTuple_SET_ITEM(__pyx_t_1, 10, __pyx_t_12); + __Pyx_GIVEREF(__pyx_t_13); + PyTuple_SET_ITEM(__pyx_t_1, 11, __pyx_t_13); + __Pyx_GIVEREF(__pyx_t_14); + PyTuple_SET_ITEM(__pyx_t_1, 12, __pyx_t_14); + __Pyx_GIVEREF(__pyx_t_15); + PyTuple_SET_ITEM(__pyx_t_1, 13, __pyx_t_15); + __Pyx_GIVEREF(__pyx_t_16); + PyTuple_SET_ITEM(__pyx_t_1, 14, __pyx_t_16); + __Pyx_GIVEREF(__pyx_t_17); + PyTuple_SET_ITEM(__pyx_t_1, 15, __pyx_t_17); + __Pyx_GIVEREF(__pyx_t_18); + PyTuple_SET_ITEM(__pyx_t_1, 16, __pyx_t_18); + __Pyx_GIVEREF(__pyx_t_19); + PyTuple_SET_ITEM(__pyx_t_1, 17, __pyx_t_19); + __Pyx_GIVEREF(__pyx_t_20); + PyTuple_SET_ITEM(__pyx_t_1, 18, __pyx_t_20); + __Pyx_GIVEREF(__pyx_t_21); + PyTuple_SET_ITEM(__pyx_t_1, 19, __pyx_t_21); + __Pyx_GIVEREF(__pyx_t_22); + PyTuple_SET_ITEM(__pyx_t_1, 20, __pyx_t_22); + __Pyx_GIVEREF(__pyx_t_23); + PyTuple_SET_ITEM(__pyx_t_1, 21, __pyx_t_23); + __Pyx_GIVEREF(__pyx_t_24); + PyTuple_SET_ITEM(__pyx_t_1, 22, __pyx_t_24); + __Pyx_GIVEREF(__pyx_t_25); + PyTuple_SET_ITEM(__pyx_t_1, 23, __pyx_t_25); + __Pyx_GIVEREF(__pyx_t_26); + PyTuple_SET_ITEM(__pyx_t_1, 24, __pyx_t_26); + __Pyx_GIVEREF(__pyx_t_27); + PyTuple_SET_ITEM(__pyx_t_1, 25, __pyx_t_27); + __Pyx_GIVEREF(__pyx_t_28); + PyTuple_SET_ITEM(__pyx_t_1, 26, __pyx_t_28); + __Pyx_GIVEREF(__pyx_t_29); + PyTuple_SET_ITEM(__pyx_t_1, 27, __pyx_t_29); + __Pyx_GIVEREF(__pyx_t_30); + PyTuple_SET_ITEM(__pyx_t_1, 28, __pyx_t_30); + __Pyx_GIVEREF(__pyx_t_31); + PyTuple_SET_ITEM(__pyx_t_1, 29, __pyx_t_31); + __Pyx_GIVEREF(__pyx_t_32); + PyTuple_SET_ITEM(__pyx_t_1, 30, __pyx_t_32); + __Pyx_GIVEREF(__pyx_t_33); + PyTuple_SET_ITEM(__pyx_t_1, 31, __pyx_t_33); + __Pyx_GIVEREF(__pyx_t_34); + PyTuple_SET_ITEM(__pyx_t_1, 32, __pyx_t_34); + __Pyx_GIVEREF(__pyx_t_35); + PyTuple_SET_ITEM(__pyx_t_1, 33, __pyx_t_35); + __Pyx_GIVEREF(__pyx_t_36); + PyTuple_SET_ITEM(__pyx_t_1, 34, __pyx_t_36); + __Pyx_GIVEREF(__pyx_t_37); + PyTuple_SET_ITEM(__pyx_t_1, 35, __pyx_t_37); + __Pyx_GIVEREF(__pyx_t_38); + PyTuple_SET_ITEM(__pyx_t_1, 36, __pyx_t_38); + __Pyx_GIVEREF(__pyx_t_39); + PyTuple_SET_ITEM(__pyx_t_1, 37, __pyx_t_39); + __Pyx_GIVEREF(__pyx_t_40); + PyTuple_SET_ITEM(__pyx_t_1, 38, __pyx_t_40); + __Pyx_GIVEREF(__pyx_t_41); + PyTuple_SET_ITEM(__pyx_t_1, 39, __pyx_t_41); + __Pyx_GIVEREF(__pyx_t_42); + PyTuple_SET_ITEM(__pyx_t_1, 40, __pyx_t_42); + __Pyx_GIVEREF(__pyx_t_43); + PyTuple_SET_ITEM(__pyx_t_1, 41, __pyx_t_43); + __Pyx_GIVEREF(__pyx_t_44); + PyTuple_SET_ITEM(__pyx_t_1, 42, __pyx_t_44); + __Pyx_GIVEREF(__pyx_t_45); + PyTuple_SET_ITEM(__pyx_t_1, 43, __pyx_t_45); + __Pyx_GIVEREF(__pyx_t_46); + PyTuple_SET_ITEM(__pyx_t_1, 44, __pyx_t_46); + __Pyx_GIVEREF(__pyx_t_47); + PyTuple_SET_ITEM(__pyx_t_1, 45, __pyx_t_47); + __Pyx_GIVEREF(__pyx_t_48); + PyTuple_SET_ITEM(__pyx_t_1, 46, __pyx_t_48); + __Pyx_GIVEREF(__pyx_t_49); + PyTuple_SET_ITEM(__pyx_t_1, 47, __pyx_t_49); + __Pyx_GIVEREF(__pyx_t_50); + PyTuple_SET_ITEM(__pyx_t_1, 48, __pyx_t_50); + __Pyx_GIVEREF(__pyx_t_51); + PyTuple_SET_ITEM(__pyx_t_1, 49, __pyx_t_51); + __Pyx_GIVEREF(__pyx_t_52); + PyTuple_SET_ITEM(__pyx_t_1, 50, __pyx_t_52); + __Pyx_GIVEREF(__pyx_t_53); + PyTuple_SET_ITEM(__pyx_t_1, 51, __pyx_t_53); + __Pyx_GIVEREF(__pyx_t_54); + PyTuple_SET_ITEM(__pyx_t_1, 52, __pyx_t_54); + __Pyx_GIVEREF(__pyx_t_55); + PyTuple_SET_ITEM(__pyx_t_1, 53, __pyx_t_55); + __Pyx_GIVEREF(__pyx_t_56); + PyTuple_SET_ITEM(__pyx_t_1, 54, __pyx_t_56); + __Pyx_GIVEREF(__pyx_t_57); + PyTuple_SET_ITEM(__pyx_t_1, 55, __pyx_t_57); + __Pyx_GIVEREF(__pyx_t_58); + PyTuple_SET_ITEM(__pyx_t_1, 56, __pyx_t_58); + __Pyx_GIVEREF(__pyx_t_59); + PyTuple_SET_ITEM(__pyx_t_1, 57, __pyx_t_59); + __Pyx_GIVEREF(__pyx_t_60); + PyTuple_SET_ITEM(__pyx_t_1, 58, __pyx_t_60); + __Pyx_GIVEREF(__pyx_t_61); + PyTuple_SET_ITEM(__pyx_t_1, 59, __pyx_t_61); + __Pyx_GIVEREF(__pyx_t_62); + PyTuple_SET_ITEM(__pyx_t_1, 60, __pyx_t_62); + __Pyx_GIVEREF(__pyx_t_63); + PyTuple_SET_ITEM(__pyx_t_1, 61, __pyx_t_63); + __Pyx_GIVEREF(__pyx_t_64); + PyTuple_SET_ITEM(__pyx_t_1, 62, __pyx_t_64); + __Pyx_GIVEREF(__pyx_t_65); + PyTuple_SET_ITEM(__pyx_t_1, 63, __pyx_t_65); + __Pyx_GIVEREF(__pyx_t_66); + PyTuple_SET_ITEM(__pyx_t_1, 64, __pyx_t_66); + __Pyx_GIVEREF(__pyx_t_67); + PyTuple_SET_ITEM(__pyx_t_1, 65, __pyx_t_67); + __Pyx_GIVEREF(__pyx_t_68); + PyTuple_SET_ITEM(__pyx_t_1, 66, __pyx_t_68); + __Pyx_GIVEREF(__pyx_t_69); + PyTuple_SET_ITEM(__pyx_t_1, 67, __pyx_t_69); + __Pyx_GIVEREF(__pyx_t_70); + PyTuple_SET_ITEM(__pyx_t_1, 68, __pyx_t_70); + __Pyx_GIVEREF(__pyx_t_71); + PyTuple_SET_ITEM(__pyx_t_1, 69, __pyx_t_71); + __Pyx_GIVEREF(__pyx_t_72); + PyTuple_SET_ITEM(__pyx_t_1, 70, __pyx_t_72); + __Pyx_GIVEREF(__pyx_t_73); + PyTuple_SET_ITEM(__pyx_t_1, 71, __pyx_t_73); + __Pyx_GIVEREF(__pyx_t_74); + PyTuple_SET_ITEM(__pyx_t_1, 72, __pyx_t_74); + __Pyx_GIVEREF(__pyx_t_75); + PyTuple_SET_ITEM(__pyx_t_1, 73, __pyx_t_75); + __Pyx_GIVEREF(__pyx_t_76); + PyTuple_SET_ITEM(__pyx_t_1, 74, __pyx_t_76); + __Pyx_GIVEREF(__pyx_t_77); + PyTuple_SET_ITEM(__pyx_t_1, 75, __pyx_t_77); + __Pyx_GIVEREF(__pyx_t_78); + PyTuple_SET_ITEM(__pyx_t_1, 76, __pyx_t_78); + __Pyx_GIVEREF(__pyx_t_79); + PyTuple_SET_ITEM(__pyx_t_1, 77, __pyx_t_79); + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_8 = 0; + __pyx_t_9 = 0; + __pyx_t_10 = 0; + __pyx_t_11 = 0; + __pyx_t_12 = 0; + __pyx_t_13 = 0; + __pyx_t_14 = 0; + __pyx_t_15 = 0; + __pyx_t_16 = 0; + __pyx_t_17 = 0; + __pyx_t_18 = 0; + __pyx_t_19 = 0; + __pyx_t_20 = 0; + __pyx_t_21 = 0; + __pyx_t_22 = 0; + __pyx_t_23 = 0; + __pyx_t_24 = 0; + __pyx_t_25 = 0; + __pyx_t_26 = 0; + __pyx_t_27 = 0; + __pyx_t_28 = 0; + __pyx_t_29 = 0; + __pyx_t_30 = 0; + __pyx_t_31 = 0; + __pyx_t_32 = 0; + __pyx_t_33 = 0; + __pyx_t_34 = 0; + __pyx_t_35 = 0; + __pyx_t_36 = 0; + __pyx_t_37 = 0; + __pyx_t_38 = 0; + __pyx_t_39 = 0; + __pyx_t_40 = 0; + __pyx_t_41 = 0; + __pyx_t_42 = 0; + __pyx_t_43 = 0; + __pyx_t_44 = 0; + __pyx_t_45 = 0; + __pyx_t_46 = 0; + __pyx_t_47 = 0; + __pyx_t_48 = 0; + __pyx_t_49 = 0; + __pyx_t_50 = 0; + __pyx_t_51 = 0; + __pyx_t_52 = 0; + __pyx_t_53 = 0; + __pyx_t_54 = 0; + __pyx_t_55 = 0; + __pyx_t_56 = 0; + __pyx_t_57 = 0; + __pyx_t_58 = 0; + __pyx_t_59 = 0; + __pyx_t_60 = 0; + __pyx_t_61 = 0; + __pyx_t_62 = 0; + __pyx_t_63 = 0; + __pyx_t_64 = 0; + __pyx_t_65 = 0; + __pyx_t_66 = 0; + __pyx_t_67 = 0; + __pyx_t_68 = 0; + __pyx_t_69 = 0; + __pyx_t_70 = 0; + __pyx_t_71 = 0; + __pyx_t_72 = 0; + __pyx_t_73 = 0; + __pyx_t_74 = 0; + __pyx_t_75 = 0; + __pyx_t_76 = 0; + __pyx_t_77 = 0; + __pyx_t_78 = 0; + __pyx_t_79 = 0; + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_headers); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_headers, ((PyObject*)__pyx_t_1)); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":40 + * char* PyByteArray_AsString(object) + * + * __all__ = ('HttpRequestParser', 'HttpResponseParser', # <<<<<<<<<<<<<< + * 'RawRequestMessage', 'RawResponseMessage') + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_all, __pyx_tuple__12) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + + /* "aiohttp/_http_parser.pyx":43 + * 'RawRequestMessage', 'RawResponseMessage') + * + * cdef object URL = _URL # <<<<<<<<<<<<<< + * cdef object URL_build = URL.build + * cdef object CIMultiDict = _CIMultiDict + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_URL_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_URL); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_URL, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":44 + * + * cdef object URL = _URL + * cdef object URL_build = URL.build # <<<<<<<<<<<<<< + * cdef object CIMultiDict = _CIMultiDict + * cdef object CIMultiDictProxy = _CIMultiDictProxy + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7aiohttp_12_http_parser_URL, __pyx_n_s_build); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_URL_build); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_URL_build, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":45 + * cdef object URL = _URL + * cdef object URL_build = URL.build + * cdef object CIMultiDict = _CIMultiDict # <<<<<<<<<<<<<< + * cdef object CIMultiDictProxy = _CIMultiDictProxy + * cdef object HttpVersion = _HttpVersion + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CIMultiDict_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_CIMultiDict); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_CIMultiDict, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":46 + * cdef object URL_build = URL.build + * cdef object CIMultiDict = _CIMultiDict + * cdef object CIMultiDictProxy = _CIMultiDictProxy # <<<<<<<<<<<<<< + * cdef object HttpVersion = _HttpVersion + * cdef object HttpVersion10 = _HttpVersion10 + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CIMultiDictProxy_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_CIMultiDictProxy); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_CIMultiDictProxy, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":47 + * cdef object CIMultiDict = _CIMultiDict + * cdef object CIMultiDictProxy = _CIMultiDictProxy + * cdef object HttpVersion = _HttpVersion # <<<<<<<<<<<<<< + * cdef object HttpVersion10 = _HttpVersion10 + * cdef object HttpVersion11 = _HttpVersion11 + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_HttpVersion_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_HttpVersion); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_HttpVersion, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":48 + * cdef object CIMultiDictProxy = _CIMultiDictProxy + * cdef object HttpVersion = _HttpVersion + * cdef object HttpVersion10 = _HttpVersion10 # <<<<<<<<<<<<<< + * cdef object HttpVersion11 = _HttpVersion11 + * cdef object SEC_WEBSOCKET_KEY1 = hdrs.SEC_WEBSOCKET_KEY1 + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_HttpVersion10_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_HttpVersion10); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_HttpVersion10, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":49 + * cdef object HttpVersion = _HttpVersion + * cdef object HttpVersion10 = _HttpVersion10 + * cdef object HttpVersion11 = _HttpVersion11 # <<<<<<<<<<<<<< + * cdef object SEC_WEBSOCKET_KEY1 = hdrs.SEC_WEBSOCKET_KEY1 + * cdef object CONTENT_ENCODING = hdrs.CONTENT_ENCODING + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_HttpVersion11_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_HttpVersion11); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_HttpVersion11, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":50 + * cdef object HttpVersion10 = _HttpVersion10 + * cdef object HttpVersion11 = _HttpVersion11 + * cdef object SEC_WEBSOCKET_KEY1 = hdrs.SEC_WEBSOCKET_KEY1 # <<<<<<<<<<<<<< + * cdef object CONTENT_ENCODING = hdrs.CONTENT_ENCODING + * cdef object EMPTY_PAYLOAD = _EMPTY_PAYLOAD + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_79 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SEC_WEBSOCKET_KEY1); if (unlikely(!__pyx_t_79)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_79); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_SEC_WEBSOCKET_KEY1); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_SEC_WEBSOCKET_KEY1, __pyx_t_79); + __Pyx_GIVEREF(__pyx_t_79); + __pyx_t_79 = 0; + + /* "aiohttp/_http_parser.pyx":51 + * cdef object HttpVersion11 = _HttpVersion11 + * cdef object SEC_WEBSOCKET_KEY1 = hdrs.SEC_WEBSOCKET_KEY1 + * cdef object CONTENT_ENCODING = hdrs.CONTENT_ENCODING # <<<<<<<<<<<<<< + * cdef object EMPTY_PAYLOAD = _EMPTY_PAYLOAD + * cdef object StreamReader = _StreamReader + */ + __Pyx_GetModuleGlobalName(__pyx_t_79, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_79)) __PYX_ERR(0, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_79); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_79, __pyx_n_s_CONTENT_ENCODING); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_79); __pyx_t_79 = 0; + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_CONTENT_ENCODING); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_CONTENT_ENCODING, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":52 + * cdef object SEC_WEBSOCKET_KEY1 = hdrs.SEC_WEBSOCKET_KEY1 + * cdef object CONTENT_ENCODING = hdrs.CONTENT_ENCODING + * cdef object EMPTY_PAYLOAD = _EMPTY_PAYLOAD # <<<<<<<<<<<<<< + * cdef object StreamReader = _StreamReader + * cdef object DeflateBuffer = _DeflateBuffer + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_EMPTY_PAYLOAD_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":53 + * cdef object CONTENT_ENCODING = hdrs.CONTENT_ENCODING + * cdef object EMPTY_PAYLOAD = _EMPTY_PAYLOAD + * cdef object StreamReader = _StreamReader # <<<<<<<<<<<<<< + * cdef object DeflateBuffer = _DeflateBuffer + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_StreamReader_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_StreamReader); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_StreamReader, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":54 + * cdef object EMPTY_PAYLOAD = _EMPTY_PAYLOAD + * cdef object StreamReader = _StreamReader + * cdef object DeflateBuffer = _DeflateBuffer # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DeflateBuffer_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_DeflateBuffer); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_DeflateBuffer, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":68 + * DEF METHODS_COUNT = 34; + * + * cdef list _http_method = [] # <<<<<<<<<<<<<< + * + * for i in range(METHODS_COUNT): + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser__http_method); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser__http_method, ((PyObject*)__pyx_t_1)); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":70 + * cdef list _http_method = [] + * + * for i in range(METHODS_COUNT): # <<<<<<<<<<<<<< + * _http_method.append( + * cparser.http_method_str( i).decode('ascii')) + */ + for (__pyx_t_80 = 0; __pyx_t_80 < 34; __pyx_t_80+=1) { + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_t_80); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_i, __pyx_t_1) < 0) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":71 + * + * for i in range(METHODS_COUNT): + * _http_method.append( # <<<<<<<<<<<<<< + * cparser.http_method_str( i).decode('ascii')) + * + */ + if (unlikely(__pyx_v_7aiohttp_12_http_parser__http_method == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); + __PYX_ERR(0, 71, __pyx_L1_error) + } + + /* "aiohttp/_http_parser.pyx":72 + * for i in range(METHODS_COUNT): + * _http_method.append( + * cparser.http_method_str( i).decode('ascii')) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_81 = ((enum http_method)__Pyx_PyInt_As_enum__http_method(__pyx_t_1)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_82 = http_method_str(((enum http_method)__pyx_t_81)); + __pyx_t_1 = __Pyx_decode_c_string(__pyx_t_82, 0, strlen(__pyx_t_82), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "aiohttp/_http_parser.pyx":71 + * + * for i in range(METHODS_COUNT): + * _http_method.append( # <<<<<<<<<<<<<< + * cparser.http_method_str( i).decode('ascii')) + * + */ + __pyx_t_83 = __Pyx_PyList_Append(__pyx_v_7aiohttp_12_http_parser__http_method, __pyx_t_1); if (unlikely(__pyx_t_83 == ((int)-1))) __PYX_ERR(0, 71, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + + /* "aiohttp/_http_parser.pyx":756 + * + * + * def parse_url(url): # <<<<<<<<<<<<<< + * cdef: + * Py_buffer py_buf + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7aiohttp_12_http_parser_1parse_url, NULL, __pyx_n_s_aiohttp__http_parser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 756, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_parse_url, __pyx_t_1) < 0) __PYX_ERR(0, 756, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_RawRequestMessage(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7aiohttp_12_http_parser_3__pyx_unpickle_RawRequestMessage, NULL, __pyx_n_s_aiohttp__http_parser); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_RawRequestMessage, __pyx_t_1) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":11 + * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] + * if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'): + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7aiohttp_12_http_parser_5__pyx_unpickle_RawResponseMessage, NULL, __pyx_n_s_aiohttp__http_parser); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_RawResponseMessag, __pyx_t_1) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_parser.pyx":1 + * #cython: language_level=3 # <<<<<<<<<<<<<< + * # + * # Based on https://github.com/MagicStack/httptools + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_XDECREF(__pyx_t_16); + __Pyx_XDECREF(__pyx_t_17); + __Pyx_XDECREF(__pyx_t_18); + __Pyx_XDECREF(__pyx_t_19); + __Pyx_XDECREF(__pyx_t_20); + __Pyx_XDECREF(__pyx_t_21); + __Pyx_XDECREF(__pyx_t_22); + __Pyx_XDECREF(__pyx_t_23); + __Pyx_XDECREF(__pyx_t_24); + __Pyx_XDECREF(__pyx_t_25); + __Pyx_XDECREF(__pyx_t_26); + __Pyx_XDECREF(__pyx_t_27); + __Pyx_XDECREF(__pyx_t_28); + __Pyx_XDECREF(__pyx_t_29); + __Pyx_XDECREF(__pyx_t_30); + __Pyx_XDECREF(__pyx_t_31); + __Pyx_XDECREF(__pyx_t_32); + __Pyx_XDECREF(__pyx_t_33); + __Pyx_XDECREF(__pyx_t_34); + __Pyx_XDECREF(__pyx_t_35); + __Pyx_XDECREF(__pyx_t_36); + __Pyx_XDECREF(__pyx_t_37); + __Pyx_XDECREF(__pyx_t_38); + __Pyx_XDECREF(__pyx_t_39); + __Pyx_XDECREF(__pyx_t_40); + __Pyx_XDECREF(__pyx_t_41); + __Pyx_XDECREF(__pyx_t_42); + __Pyx_XDECREF(__pyx_t_43); + __Pyx_XDECREF(__pyx_t_44); + __Pyx_XDECREF(__pyx_t_45); + __Pyx_XDECREF(__pyx_t_46); + __Pyx_XDECREF(__pyx_t_47); + __Pyx_XDECREF(__pyx_t_48); + __Pyx_XDECREF(__pyx_t_49); + __Pyx_XDECREF(__pyx_t_50); + __Pyx_XDECREF(__pyx_t_51); + __Pyx_XDECREF(__pyx_t_52); + __Pyx_XDECREF(__pyx_t_53); + __Pyx_XDECREF(__pyx_t_54); + __Pyx_XDECREF(__pyx_t_55); + __Pyx_XDECREF(__pyx_t_56); + __Pyx_XDECREF(__pyx_t_57); + __Pyx_XDECREF(__pyx_t_58); + __Pyx_XDECREF(__pyx_t_59); + __Pyx_XDECREF(__pyx_t_60); + __Pyx_XDECREF(__pyx_t_61); + __Pyx_XDECREF(__pyx_t_62); + __Pyx_XDECREF(__pyx_t_63); + __Pyx_XDECREF(__pyx_t_64); + __Pyx_XDECREF(__pyx_t_65); + __Pyx_XDECREF(__pyx_t_66); + __Pyx_XDECREF(__pyx_t_67); + __Pyx_XDECREF(__pyx_t_68); + __Pyx_XDECREF(__pyx_t_69); + __Pyx_XDECREF(__pyx_t_70); + __Pyx_XDECREF(__pyx_t_71); + __Pyx_XDECREF(__pyx_t_72); + __Pyx_XDECREF(__pyx_t_73); + __Pyx_XDECREF(__pyx_t_74); + __Pyx_XDECREF(__pyx_t_75); + __Pyx_XDECREF(__pyx_t_76); + __Pyx_XDECREF(__pyx_t_77); + __Pyx_XDECREF(__pyx_t_78); + __Pyx_XDECREF(__pyx_t_79); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init aiohttp._http_parser", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init aiohttp._http_parser"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (!j) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; + if (likely(m && m->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { + Py_ssize_t l = m->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return m->sq_item(o, i); + } + } +#else + if (is_list || PySequence_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* decode_c_bytes */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes( + const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop, + const char* encoding, const char* errors, + PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { + if (unlikely((start < 0) | (stop < 0))) { + if (start < 0) { + start += length; + if (start < 0) + start = 0; + } + if (stop < 0) + stop += length; + } + if (stop > length) + stop = length; + length = stop - start; + if (unlikely(length <= 0)) + return PyUnicode_FromUnicode(NULL, 0); + cstring += start; + if (decode_func) { + return decode_func(cstring, length, errors); + } else { + return PyUnicode_Decode(cstring, length, encoding, errors); + } +} + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +/* None */ +static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname) { + PyErr_Format(PyExc_NameError, "free variable '%s' referenced before assignment in enclosing scope", varname); +} + +/* RaiseTooManyValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* IterFinish */ +static CYTHON_INLINE int __Pyx_IterFinish(void) { +#if CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* exc_type = tstate->curexc_type; + if (unlikely(exc_type)) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) { + PyObject *exc_value, *exc_tb; + exc_value = tstate->curexc_value; + exc_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + Py_DECREF(exc_type); + Py_XDECREF(exc_value); + Py_XDECREF(exc_tb); + return 0; + } else { + return -1; + } + } + return 0; +#else + if (unlikely(PyErr_Occurred())) { + if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { + PyErr_Clear(); + return 0; + } else { + return -1; + } + } + return 0; +#endif +} + +/* UnpackItemEndCheck */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { + if (unlikely(retval)) { + Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(expected); + return -1; + } else { + return __Pyx_IterFinish(); + } + return 0; +} + +/* KeywordStringCheck */ +static int __Pyx_CheckKeywordStrings( + PyObject *kwdict, + const char* function_name, + int kw_allowed) +{ + PyObject* key = 0; + Py_ssize_t pos = 0; +#if CYTHON_COMPILING_IN_PYPY + if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0)) + goto invalid_keyword; + return 1; +#else + while (PyDict_Next(kwdict, &pos, &key, 0)) { + #if PY_MAJOR_VERSION < 3 + if (unlikely(!PyString_Check(key))) + #endif + if (unlikely(!PyUnicode_Check(key))) + goto invalid_keyword_type; + } + if ((!kw_allowed) && unlikely(key)) + goto invalid_keyword; + return 1; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + return 0; +#endif +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif + return 0; +} + +/* ExtTypeTest */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", + Py_TYPE(obj)->tp_name, type->tp_name); + return 0; +} + +/* DictGetItem */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; icurexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; + if (unlikely(PyTuple_Check(err))) + return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} +#endif + +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); +} + +/* GetAttr3 */ +static PyObject *__Pyx_GetAttr3Default(PyObject *d) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + __Pyx_PyErr_Clear(); + Py_INCREF(d); + return d; +} +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { + PyObject *r = __Pyx_GetAttr(o, n); + return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallNoArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, NULL, 0); + } +#endif +#ifdef __Pyx_CyFunction_USED + if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func))) +#else + if (likely(PyCFunction_Check(func))) +#endif + { + if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { + return __Pyx_PyObject_CallMethO(func, NULL); + } + } + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL); +} +#endif + +/* PyCFunctionFastCall */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { + PyCFunctionObject *func = (PyCFunctionObject*)func_obj; + PyCFunction meth = PyCFunction_GET_FUNCTION(func); + PyObject *self = PyCFunction_GET_SELF(func); + int flags = PyCFunction_GET_FLAGS(func); + assert(PyCFunction_Check(func)); + assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + /* _PyCFunction_FastCallDict() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller loses its exception */ + assert(!PyErr_Occurred()); + if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { + return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + } else { + return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + } +} +#endif + +/* PyObjectCallOneArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, &arg, 1); + } +#endif + if (likely(PyCFunction_Check(func))) { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); +#if CYTHON_FAST_PYCCALL + } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { + return __Pyx_PyCFunction_FastCall(func, &arg, 1); +#endif + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +/* PyObjectCall2Args */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args, *result = NULL; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyFunction_FastCall(function, args, 2); + } + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyCFunction_FastCall(function, args, 2); + } + #endif + args = PyTuple_New(2); + if (unlikely(!args)) goto done; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + Py_INCREF(function); + result = __Pyx_PyObject_Call(function, args, NULL); + Py_DECREF(args); + Py_DECREF(function); +done: + return result; +} + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + __Pyx_PyThreadState_declare + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { +#if CYTHON_COMPILING_IN_PYPY + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#else + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* SliceObject */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj, + Py_ssize_t cstart, Py_ssize_t cstop, + PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, + int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { +#if CYTHON_USE_TYPE_SLOTS + PyMappingMethods* mp; +#if PY_MAJOR_VERSION < 3 + PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; + if (likely(ms && ms->sq_slice)) { + if (!has_cstart) { + if (_py_start && (*_py_start != Py_None)) { + cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); + if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; + } else + cstart = 0; + } + if (!has_cstop) { + if (_py_stop && (*_py_stop != Py_None)) { + cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); + if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; + } else + cstop = PY_SSIZE_T_MAX; + } + if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { + Py_ssize_t l = ms->sq_length(obj); + if (likely(l >= 0)) { + if (cstop < 0) { + cstop += l; + if (cstop < 0) cstop = 0; + } + if (cstart < 0) { + cstart += l; + if (cstart < 0) cstart = 0; + } + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + goto bad; + PyErr_Clear(); + } + } + return ms->sq_slice(obj, cstart, cstop); + } +#endif + mp = Py_TYPE(obj)->tp_as_mapping; + if (likely(mp && mp->mp_subscript)) +#endif + { + PyObject* result; + PyObject *py_slice, *py_start, *py_stop; + if (_py_slice) { + py_slice = *_py_slice; + } else { + PyObject* owned_start = NULL; + PyObject* owned_stop = NULL; + if (_py_start) { + py_start = *_py_start; + } else { + if (has_cstart) { + owned_start = py_start = PyInt_FromSsize_t(cstart); + if (unlikely(!py_start)) goto bad; + } else + py_start = Py_None; + } + if (_py_stop) { + py_stop = *_py_stop; + } else { + if (has_cstop) { + owned_stop = py_stop = PyInt_FromSsize_t(cstop); + if (unlikely(!py_stop)) { + Py_XDECREF(owned_start); + goto bad; + } + } else + py_stop = Py_None; + } + py_slice = PySlice_New(py_start, py_stop, Py_None); + Py_XDECREF(owned_start); + Py_XDECREF(owned_stop); + if (unlikely(!py_slice)) goto bad; + } +#if CYTHON_USE_TYPE_SLOTS + result = mp->mp_subscript(obj, py_slice); +#else + result = PyObject_GetItem(obj, py_slice); +#endif + if (!_py_slice) { + Py_DECREF(py_slice); + } + return result; + } + PyErr_Format(PyExc_TypeError, + "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name); +bad: + return NULL; +} + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type, *local_value, *local_tb; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = *type; + exc_info->exc_value = *value; + exc_info->exc_traceback = *tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = *type; + tstate->exc_value = *value; + tstate->exc_traceback = *tb; + #endif + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + #endif + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +#endif + +/* decode_c_string */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_string( + const char* cstring, Py_ssize_t start, Py_ssize_t stop, + const char* encoding, const char* errors, + PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { + Py_ssize_t length; + if (unlikely((start < 0) | (stop < 0))) { + size_t slen = strlen(cstring); + if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, + "c-string too long to convert to Python"); + return NULL; + } + length = (Py_ssize_t) slen; + if (start < 0) { + start += length; + if (start < 0) + start = 0; + } + if (stop < 0) + stop += length; + } + length = stop - start; + if (unlikely(length <= 0)) + return PyUnicode_FromUnicode(NULL, 0); + cstring += start; + if (decode_func) { + return decode_func(cstring, length, errors); + } else { + return PyUnicode_Decode(cstring, length, encoding, errors); + } +} + +/* UnpackUnboundCMethod */ +static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) { + PyObject *method; + method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name); + if (unlikely(!method)) + return -1; + target->method = method; +#if CYTHON_COMPILING_IN_CPYTHON + #if PY_MAJOR_VERSION >= 3 + if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type))) + #endif + { + PyMethodDescrObject *descr = (PyMethodDescrObject*) method; + target->func = descr->d_method->ml_meth; + target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS); + } +#endif + return 0; +} + +/* CallUnboundCMethod1 */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg) { + if (likely(cfunc->func)) { + int flag = cfunc->flag; + if (flag == METH_O) { + return (*(cfunc->func))(self, arg); + } else if (PY_VERSION_HEX >= 0x030600B1 && flag == METH_FASTCALL) { + if (PY_VERSION_HEX >= 0x030700A0) { + return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1); + } else { + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); + } + } else if (PY_VERSION_HEX >= 0x030700A0 && flag == (METH_FASTCALL | METH_KEYWORDS)) { + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); + } + } + return __Pyx__CallUnboundCMethod1(cfunc, self, arg); +} +#endif +static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg){ + PyObject *args, *result = NULL; + if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; +#if CYTHON_COMPILING_IN_CPYTHON + if (cfunc->func && (cfunc->flag & METH_VARARGS)) { + args = PyTuple_New(1); + if (unlikely(!args)) goto bad; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + if (cfunc->flag & METH_KEYWORDS) + result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL); + else + result = (*cfunc->func)(self, args); + } else { + args = PyTuple_New(2); + if (unlikely(!args)) goto bad; + Py_INCREF(self); + PyTuple_SET_ITEM(args, 0, self); + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 1, arg); + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); + } +#else + args = PyTuple_Pack(2, self, arg); + if (unlikely(!args)) goto bad; + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); +#endif +bad: + Py_XDECREF(args); + return result; +} + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (!py_import) + goto bad; + #endif + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.')) { + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, 1); + if (!module) { + if (!PyErr_ExceptionMatches(PyExc_ImportError)) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, level); + #endif + } + } +bad: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* HasAttr */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { + PyObject *r; + if (unlikely(!__Pyx_PyBaseString_Check(n))) { + PyErr_SetString(PyExc_TypeError, + "hasattr(): attribute name must be string"); + return -1; + } + r = __Pyx_GetAttr(o, n); + if (unlikely(!r)) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, attr_name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(attr_name)); +#endif + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PyObject_GenericGetAttr */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { + if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { + return PyObject_GenericGetAttr(obj, attr_name); + } + return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); +} +#endif + +/* SetupReduce */ +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name); + if (likely(name_attr)) { + ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); + } else { + ret = -1; + } + if (unlikely(ret < 0)) { + PyErr_Clear(); + ret = 0; + } + Py_XDECREF(name_attr); + return ret; +} +static int __Pyx_setup_reduce(PyObject* type_obj) { + int ret = 0; + PyObject *object_reduce = NULL; + PyObject *object_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto GOOD; +#else + if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto GOOD; +#endif +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD; +#else + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD; +#endif + reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto BAD; + if (reduce_ex == object_reduce_ex) { +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD; +#endif + reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto BAD; + if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { + reduce_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_cython); if (unlikely(!reduce_cython)) goto BAD; + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto BAD; + setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate); + if (!setstate) PyErr_Clear(); + if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { + setstate_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate_cython); if (unlikely(!setstate_cython)) goto BAD; + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto BAD; + } + PyType_Modified((PyTypeObject*)type_obj); + } + } + goto GOOD; +BAD: + if (!PyErr_Occurred()) + PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); + ret = -1; +GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); +#endif + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} + +/* SetVTable */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable) { +#if PY_VERSION_HEX >= 0x02070000 + PyObject *ob = PyCapsule_New(vtable, 0, 0); +#else + PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); +#endif + if (!ob) + goto bad; + if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) + goto bad; + Py_DECREF(ob); + return 0; +bad: + Py_XDECREF(ob); + return -1; +} + +/* TypeImport */ +#ifndef __PYX_HAVE_RT_ImportType +#define __PYX_HAVE_RT_ImportType +static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, + size_t size, enum __Pyx_ImportType_CheckSize check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; +#ifdef Py_LIMITED_API + PyObject *py_basicsize; +#endif + result = PyObject_GetAttrString(module, class_name); + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%.200s.%.200s is not a type object", + module_name, class_name); + goto bad; + } +#ifndef Py_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; +#else + py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); + if (!py_basicsize) + goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; +#endif + if ((size_t)basicsize < size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + goto bad; + } + if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + goto bad; + } + else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(result); + return NULL; +} +#endif + +/* CLineInTraceback */ +#ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} + +/* AddTraceback */ +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); + } +} + +/* CIntFromPyVerify */ +#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value) { + const unsigned int neg_one = (unsigned int) ((unsigned int) 0 - (unsigned int) 1), const_zero = (unsigned int) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(unsigned int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(unsigned int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(unsigned int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(unsigned int), + little, !is_unsigned); + } +} + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_short(unsigned short value) { + const unsigned short neg_one = (unsigned short) ((unsigned short) 0 - (unsigned short) 1), const_zero = (unsigned short) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(unsigned short) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(unsigned short) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned short) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(unsigned short) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned short) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(unsigned short), + little, !is_unsigned); + } +} + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint16_t(uint16_t value) { + const uint16_t neg_one = (uint16_t) ((uint16_t) 0 - (uint16_t) 1), const_zero = (uint16_t) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(uint16_t) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(uint16_t) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(uint16_t) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(uint16_t) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(uint16_t) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(uint16_t), + little, !is_unsigned); + } +} + +/* CIntFromPy */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + case -2: + if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* CIntFromPy */ +static CYTHON_INLINE enum http_method __Pyx_PyInt_As_enum__http_method(PyObject *x) { + const enum http_method neg_one = (enum http_method) ((enum http_method) 0 - (enum http_method) 1), const_zero = (enum http_method) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(enum http_method) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(enum http_method, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (enum http_method) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (enum http_method) 0; + case 1: __PYX_VERIFY_RETURN_INT(enum http_method, digit, digits[0]) + case 2: + if (8 * sizeof(enum http_method) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum http_method, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum http_method) >= 2 * PyLong_SHIFT) { + return (enum http_method) (((((enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(enum http_method) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum http_method, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum http_method) >= 3 * PyLong_SHIFT) { + return (enum http_method) (((((((enum http_method)digits[2]) << PyLong_SHIFT) | (enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(enum http_method) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum http_method, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum http_method) >= 4 * PyLong_SHIFT) { + return (enum http_method) (((((((((enum http_method)digits[3]) << PyLong_SHIFT) | (enum http_method)digits[2]) << PyLong_SHIFT) | (enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (enum http_method) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(enum http_method) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(enum http_method, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(enum http_method) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(enum http_method, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (enum http_method) 0; + case -1: __PYX_VERIFY_RETURN_INT(enum http_method, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(enum http_method, digit, +digits[0]) + case -2: + if (8 * sizeof(enum http_method) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum http_method, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum http_method) - 1 > 2 * PyLong_SHIFT) { + return (enum http_method) (((enum http_method)-1)*(((((enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(enum http_method) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum http_method, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum http_method) - 1 > 2 * PyLong_SHIFT) { + return (enum http_method) ((((((enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(enum http_method) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum http_method, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum http_method) - 1 > 3 * PyLong_SHIFT) { + return (enum http_method) (((enum http_method)-1)*(((((((enum http_method)digits[2]) << PyLong_SHIFT) | (enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(enum http_method) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum http_method, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum http_method) - 1 > 3 * PyLong_SHIFT) { + return (enum http_method) ((((((((enum http_method)digits[2]) << PyLong_SHIFT) | (enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(enum http_method) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum http_method, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum http_method) - 1 > 4 * PyLong_SHIFT) { + return (enum http_method) (((enum http_method)-1)*(((((((((enum http_method)digits[3]) << PyLong_SHIFT) | (enum http_method)digits[2]) << PyLong_SHIFT) | (enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(enum http_method) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum http_method, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum http_method) - 1 > 4 * PyLong_SHIFT) { + return (enum http_method) ((((((((((enum http_method)digits[3]) << PyLong_SHIFT) | (enum http_method)digits[2]) << PyLong_SHIFT) | (enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0]))); + } + } + break; + } +#endif + if (sizeof(enum http_method) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(enum http_method, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(enum http_method) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(enum http_method, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + enum http_method val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (enum http_method) -1; + } + } else { + enum http_method val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (enum http_method) -1; + val = __Pyx_PyInt_As_enum__http_method(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to enum http_method"); + return (enum http_method) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to enum http_method"); + return (enum http_method) -1; +} + +/* CIntFromPy */ +static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) { + const size_t neg_one = (size_t) ((size_t) 0 - (size_t) 1), const_zero = (size_t) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(size_t) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(size_t, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (size_t) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (size_t) 0; + case 1: __PYX_VERIFY_RETURN_INT(size_t, digit, digits[0]) + case 2: + if (8 * sizeof(size_t) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(size_t) >= 2 * PyLong_SHIFT) { + return (size_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(size_t) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(size_t) >= 3 * PyLong_SHIFT) { + return (size_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(size_t) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(size_t) >= 4 * PyLong_SHIFT) { + return (size_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (size_t) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(size_t) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(size_t) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (size_t) 0; + case -1: __PYX_VERIFY_RETURN_INT(size_t, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(size_t, digit, +digits[0]) + case -2: + if (8 * sizeof(size_t) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) { + return (size_t) (((size_t)-1)*(((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(size_t) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) { + return (size_t) ((((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) { + return (size_t) (((size_t)-1)*(((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(size_t) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) { + return (size_t) ((((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(size_t) - 1 > 4 * PyLong_SHIFT) { + return (size_t) (((size_t)-1)*(((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(size_t) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(size_t) - 1 > 4 * PyLong_SHIFT) { + return (size_t) ((((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]))); + } + } + break; + } +#endif + if (sizeof(size_t) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(size_t, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(size_t) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(size_t, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + size_t val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (size_t) -1; + } + } else { + size_t val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (size_t) -1; + val = __Pyx_PyInt_As_size_t(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to size_t"); + return (size_t) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to size_t"); + return (size_t) -1; +} + +/* CIntFromPy */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; itp_name); + if (cached_type) { + if (!PyType_Check((PyObject*)cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", + type->tp_name); + goto bad; + } + if (cached_type->tp_basicsize != type->tp_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + type->tp_name); + goto bad; + } + } else { + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; + } +done: + Py_DECREF(fake_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (descr != NULL) { + *method = descr; + return 0; + } + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(name)); +#endif + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod1 */ +static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { + PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); + Py_DECREF(method); + return result; +} +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { + PyObject *method = NULL, *result; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_Call2Args(method, obj, arg); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) return NULL; + return __Pyx__PyObject_CallMethod1(method, arg); +} + +/* CoroutineBase */ +#include +#include +#define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom) +static int __Pyx_PyGen__FetchStopIterationValue(CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject **pvalue) { + PyObject *et, *ev, *tb; + PyObject *value = NULL; + __Pyx_ErrFetch(&et, &ev, &tb); + if (!et) { + Py_XDECREF(tb); + Py_XDECREF(ev); + Py_INCREF(Py_None); + *pvalue = Py_None; + return 0; + } + if (likely(et == PyExc_StopIteration)) { + if (!ev) { + Py_INCREF(Py_None); + value = Py_None; + } +#if PY_VERSION_HEX >= 0x030300A0 + else if (Py_TYPE(ev) == (PyTypeObject*)PyExc_StopIteration) { + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); + } +#endif + else if (unlikely(PyTuple_Check(ev))) { + if (PyTuple_GET_SIZE(ev) >= 1) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + value = PyTuple_GET_ITEM(ev, 0); + Py_INCREF(value); +#else + value = PySequence_ITEM(ev, 0); +#endif + } else { + Py_INCREF(Py_None); + value = Py_None; + } + Py_DECREF(ev); + } + else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) { + value = ev; + } + if (likely(value)) { + Py_XDECREF(tb); + Py_DECREF(et); + *pvalue = value; + return 0; + } + } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + PyErr_NormalizeException(&et, &ev, &tb); + if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) { + __Pyx_ErrRestore(et, ev, tb); + return -1; + } + Py_XDECREF(tb); + Py_DECREF(et); +#if PY_VERSION_HEX >= 0x030300A0 + value = ((PyStopIterationObject *)ev)->value; + Py_INCREF(value); + Py_DECREF(ev); +#else + { + PyObject* args = __Pyx_PyObject_GetAttrStr(ev, __pyx_n_s_args); + Py_DECREF(ev); + if (likely(args)) { + value = PySequence_GetItem(args, 0); + Py_DECREF(args); + } + if (unlikely(!value)) { + __Pyx_ErrRestore(NULL, NULL, NULL); + Py_INCREF(Py_None); + value = Py_None; + } + } +#endif + *pvalue = value; + return 0; +} +static CYTHON_INLINE +void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) { + PyObject *t, *v, *tb; + t = exc_state->exc_type; + v = exc_state->exc_value; + tb = exc_state->exc_traceback; + exc_state->exc_type = NULL; + exc_state->exc_value = NULL; + exc_state->exc_traceback = NULL; + Py_XDECREF(t); + Py_XDECREF(v); + Py_XDECREF(tb); +} +#define __Pyx_Coroutine_AlreadyRunningError(gen) (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyRunningError(CYTHON_UNUSED __pyx_CoroutineObject *gen) { + const char *msg; + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check((PyObject*)gen)) { + msg = "coroutine already executing"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) { + msg = "async generator already executing"; + #endif + } else { + msg = "generator already executing"; + } + PyErr_SetString(PyExc_ValueError, msg); +} +#define __Pyx_Coroutine_NotStartedError(gen) (__Pyx__Coroutine_NotStartedError(gen), (PyObject*)NULL) +static void __Pyx__Coroutine_NotStartedError(CYTHON_UNUSED PyObject *gen) { + const char *msg; + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(gen)) { + msg = "can't send non-None value to a just-started coroutine"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(gen)) { + msg = "can't send non-None value to a just-started async generator"; + #endif + } else { + msg = "can't send non-None value to a just-started generator"; + } + PyErr_SetString(PyExc_TypeError, msg); +} +#define __Pyx_Coroutine_AlreadyTerminatedError(gen, value, closing) (__Pyx__Coroutine_AlreadyTerminatedError(gen, value, closing), (PyObject*)NULL) +static void __Pyx__Coroutine_AlreadyTerminatedError(CYTHON_UNUSED PyObject *gen, PyObject *value, CYTHON_UNUSED int closing) { + #ifdef __Pyx_Coroutine_USED + if (!closing && __Pyx_Coroutine_Check(gen)) { + PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine"); + } else + #endif + if (value) { + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration); + else + #endif + PyErr_SetNone(PyExc_StopIteration); + } +} +static +PyObject *__Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, int closing) { + __Pyx_PyThreadState_declare + PyThreadState *tstate; + __Pyx_ExcInfoStruct *exc_state; + PyObject *retval; + assert(!self->is_running); + if (unlikely(self->resume_label == 0)) { + if (unlikely(value && value != Py_None)) { + return __Pyx_Coroutine_NotStartedError((PyObject*)self); + } + } + if (unlikely(self->resume_label == -1)) { + return __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing); + } +#if CYTHON_FAST_THREAD_STATE + __Pyx_PyThreadState_assign + tstate = __pyx_tstate; +#else + tstate = __Pyx_PyThreadState_Current; +#endif + exc_state = &self->gi_exc_state; + if (exc_state->exc_type) { + #if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_PYSTON + #else + if (exc_state->exc_traceback) { + PyTracebackObject *tb = (PyTracebackObject *) exc_state->exc_traceback; + PyFrameObject *f = tb->tb_frame; + Py_XINCREF(tstate->frame); + assert(f->f_back == NULL); + f->f_back = tstate->frame; + } + #endif + } +#if CYTHON_USE_EXC_INFO_STACK + exc_state->previous_item = tstate->exc_info; + tstate->exc_info = exc_state; +#else + if (exc_state->exc_type) { + __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } else { + __Pyx_Coroutine_ExceptionClear(exc_state); + __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); + } +#endif + self->is_running = 1; + retval = self->body((PyObject *) self, tstate, value); + self->is_running = 0; +#if CYTHON_USE_EXC_INFO_STACK + exc_state = &self->gi_exc_state; + tstate->exc_info = exc_state->previous_item; + exc_state->previous_item = NULL; + __Pyx_Coroutine_ResetFrameBackpointer(exc_state); +#endif + return retval; +} +static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) { + PyObject *exc_tb = exc_state->exc_traceback; + if (likely(exc_tb)) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_PYSTON +#else + PyTracebackObject *tb = (PyTracebackObject *) exc_tb; + PyFrameObject *f = tb->tb_frame; + Py_CLEAR(f->f_back); +#endif + } +} +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_MethodReturn(CYTHON_UNUSED PyObject* gen, PyObject *retval) { + if (unlikely(!retval)) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (!__Pyx_PyErr_Occurred()) { + PyObject *exc = PyExc_StopIteration; + #ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(gen)) + exc = __Pyx_PyExc_StopAsyncIteration; + #endif + __Pyx_PyErr_SetNone(exc); + } + } + return retval; +} +static CYTHON_INLINE +PyObject *__Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen) { + PyObject *ret; + PyObject *val = NULL; + __Pyx_Coroutine_Undelegate(gen); + __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val); + ret = __Pyx_Coroutine_SendEx(gen, val, 0); + Py_XDECREF(val); + return ret; +} +static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) { + PyObject *retval; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, value); + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + ret = __Pyx_async_gen_asend_send(yf, value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = _PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03050000 && defined(PyCoro_CheckExact) && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyCoro_CheckExact(yf)) { + ret = _PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); + } else + #endif + { + if (value == Py_None) + ret = Py_TYPE(yf)->tp_iternext(yf); + else + ret = __Pyx_PyObject_CallMethod1(yf, __pyx_n_s_send, value); + } + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + retval = __Pyx_Coroutine_FinishDelegation(gen); + } else { + retval = __Pyx_Coroutine_SendEx(gen, value, 0); + } + return __Pyx_Coroutine_MethodReturn(self, retval); +} +static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) { + PyObject *retval = NULL; + int err = 0; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + retval = __Pyx_Coroutine_Close(yf); + if (!retval) + return -1; + } else + if (__Pyx_CoroutineAwait_CheckExact(yf)) { + retval = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf, NULL); + if (!retval) + return -1; + } else + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_PyAsyncGenASend_CheckExact(yf)) { + retval = __Pyx_async_gen_asend_close(yf, NULL); + } else + if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) { + retval = __Pyx_async_gen_athrow_close(yf, NULL); + } else + #endif + { + PyObject *meth; + gen->is_running = 1; + meth = __Pyx_PyObject_GetAttrStr(yf, __pyx_n_s_close); + if (unlikely(!meth)) { + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_WriteUnraisable(yf); + } + PyErr_Clear(); + } else { + retval = PyObject_CallFunction(meth, NULL); + Py_DECREF(meth); + if (!retval) + err = -1; + } + gen->is_running = 0; + } + Py_XDECREF(retval); + return err; +} +static PyObject *__Pyx_Generator_Next(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + gen->is_running = 1; + #ifdef __Pyx_Generator_USED + if (__Pyx_Generator_CheckExact(yf)) { + ret = __Pyx_Generator_Next(yf); + } else + #endif + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) + if (PyGen_CheckExact(yf)) { + ret = _PyGen_Send((PyGenObject*)yf, NULL); + } else + #endif + #ifdef __Pyx_Coroutine_USED + if (__Pyx_Coroutine_Check(yf)) { + ret = __Pyx_Coroutine_Send(yf, Py_None); + } else + #endif + ret = Py_TYPE(yf)->tp_iternext(yf); + gen->is_running = 0; + if (likely(ret)) { + return ret; + } + return __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_SendEx(gen, Py_None, 0); +} +static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, CYTHON_UNUSED PyObject *arg) { + return __Pyx_Coroutine_Close(self); +} +static PyObject *__Pyx_Coroutine_Close(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *retval, *raised_exception; + PyObject *yf = gen->yieldfrom; + int err = 0; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + Py_INCREF(yf); + err = __Pyx_Coroutine_CloseIter(gen, yf); + __Pyx_Coroutine_Undelegate(gen); + Py_DECREF(yf); + } + if (err == 0) + PyErr_SetNone(PyExc_GeneratorExit); + retval = __Pyx_Coroutine_SendEx(gen, NULL, 1); + if (unlikely(retval)) { + const char *msg; + Py_DECREF(retval); + if ((0)) { + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_Coroutine_Check(self)) { + msg = "coroutine ignored GeneratorExit"; + #endif + #ifdef __Pyx_AsyncGen_USED + } else if (__Pyx_AsyncGen_CheckExact(self)) { +#if PY_VERSION_HEX < 0x03060000 + msg = "async generator ignored GeneratorExit - might require Python 3.6+ finalisation (PEP 525)"; +#else + msg = "async generator ignored GeneratorExit"; +#endif + #endif + } else { + msg = "generator ignored GeneratorExit"; + } + PyErr_SetString(PyExc_RuntimeError, msg); + return NULL; + } + raised_exception = PyErr_Occurred(); + if (likely(!raised_exception || __Pyx_PyErr_GivenExceptionMatches2(raised_exception, PyExc_GeneratorExit, PyExc_StopIteration))) { + if (raised_exception) PyErr_Clear(); + Py_INCREF(Py_None); + return Py_None; + } + return NULL; +} +static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb, + PyObject *args, int close_on_genexit) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject *yf = gen->yieldfrom; + if (unlikely(gen->is_running)) + return __Pyx_Coroutine_AlreadyRunningError(gen); + if (yf) { + PyObject *ret; + Py_INCREF(yf); + if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) { + int err = __Pyx_Coroutine_CloseIter(gen, yf); + Py_DECREF(yf); + __Pyx_Coroutine_Undelegate(gen); + if (err < 0) + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); + goto throw_here; + } + gen->is_running = 1; + if (0 + #ifdef __Pyx_Generator_USED + || __Pyx_Generator_CheckExact(yf) + #endif + #ifdef __Pyx_Coroutine_USED + || __Pyx_Coroutine_Check(yf) + #endif + ) { + ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit); + #ifdef __Pyx_Coroutine_USED + } else if (__Pyx_CoroutineAwait_CheckExact(yf)) { + ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit); + #endif + } else { + PyObject *meth = __Pyx_PyObject_GetAttrStr(yf, __pyx_n_s_throw); + if (unlikely(!meth)) { + Py_DECREF(yf); + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) { + gen->is_running = 0; + return NULL; + } + PyErr_Clear(); + __Pyx_Coroutine_Undelegate(gen); + gen->is_running = 0; + goto throw_here; + } + if (likely(args)) { + ret = PyObject_CallObject(meth, args); + } else { + ret = PyObject_CallFunctionObjArgs(meth, typ, val, tb, NULL); + } + Py_DECREF(meth); + } + gen->is_running = 0; + Py_DECREF(yf); + if (!ret) { + ret = __Pyx_Coroutine_FinishDelegation(gen); + } + return __Pyx_Coroutine_MethodReturn(self, ret); + } +throw_here: + __Pyx_Raise(typ, val, tb, NULL); + return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); +} +static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) { + PyObject *typ; + PyObject *val = NULL; + PyObject *tb = NULL; + if (!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb)) + return NULL; + return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1); +} +static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) { + Py_VISIT(exc_state->exc_type); + Py_VISIT(exc_state->exc_value); + Py_VISIT(exc_state->exc_traceback); + return 0; +} +static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) { + Py_VISIT(gen->closure); + Py_VISIT(gen->classobj); + Py_VISIT(gen->yieldfrom); + return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg); +} +static int __Pyx_Coroutine_clear(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + Py_CLEAR(gen->closure); + Py_CLEAR(gen->classobj); + Py_CLEAR(gen->yieldfrom); + __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer); + } +#endif + Py_CLEAR(gen->gi_code); + Py_CLEAR(gen->gi_name); + Py_CLEAR(gen->gi_qualname); + Py_CLEAR(gen->gi_modulename); + return 0; +} +static void __Pyx_Coroutine_dealloc(PyObject *self) { + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + PyObject_GC_UnTrack(gen); + if (gen->gi_weakreflist != NULL) + PyObject_ClearWeakRefs(self); + if (gen->resume_label >= 0) { + PyObject_GC_Track(self); +#if PY_VERSION_HEX >= 0x030400a1 && CYTHON_USE_TP_FINALIZE + if (PyObject_CallFinalizerFromDealloc(self)) +#else + Py_TYPE(gen)->tp_del(self); + if (self->ob_refcnt > 0) +#endif + { + return; + } + PyObject_GC_UnTrack(self); + } +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + /* We have to handle this case for asynchronous generators + right here, because this code has to be between UNTRACK + and GC_Del. */ + Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer); + } +#endif + __Pyx_Coroutine_clear(self); + PyObject_GC_Del(gen); +} +static void __Pyx_Coroutine_del(PyObject *self) { + PyObject *error_type, *error_value, *error_traceback; + __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; + __Pyx_PyThreadState_declare + if (gen->resume_label < 0) { + return; + } +#if !CYTHON_USE_TP_FINALIZE + assert(self->ob_refcnt == 0); + self->ob_refcnt = 1; +#endif + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&error_type, &error_value, &error_traceback); +#ifdef __Pyx_AsyncGen_USED + if (__Pyx_AsyncGen_CheckExact(self)) { + __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self; + PyObject *finalizer = agen->ag_finalizer; + if (finalizer && !agen->ag_closed) { + PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self); + if (unlikely(!res)) { + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); + return; + } + } +#endif + if (unlikely(gen->resume_label == 0 && !error_value)) { +#ifdef __Pyx_Coroutine_USED +#ifdef __Pyx_Generator_USED + if (!__Pyx_Generator_CheckExact(self)) +#endif + { + PyObject_GC_UnTrack(self); +#if PY_MAJOR_VERSION >= 3 || defined(PyErr_WarnFormat) + if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0)) + PyErr_WriteUnraisable(self); +#else + {PyObject *msg; + char *cmsg; + #if CYTHON_COMPILING_IN_PYPY + msg = NULL; + cmsg = (char*) "coroutine was never awaited"; + #else + char *cname; + PyObject *qualname; + qualname = gen->gi_qualname; + cname = PyString_AS_STRING(qualname); + msg = PyString_FromFormat("coroutine '%.50s' was never awaited", cname); + if (unlikely(!msg)) { + PyErr_Clear(); + cmsg = (char*) "coroutine was never awaited"; + } else { + cmsg = PyString_AS_STRING(msg); + } + #endif + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, cmsg, 1) < 0)) + PyErr_WriteUnraisable(self); + Py_XDECREF(msg);} +#endif + PyObject_GC_Track(self); + } +#endif + } else { + PyObject *res = __Pyx_Coroutine_Close(self); + if (unlikely(!res)) { + if (PyErr_Occurred()) + PyErr_WriteUnraisable(self); + } else { + Py_DECREF(res); + } + } + __Pyx_ErrRestore(error_type, error_value, error_traceback); +#if !CYTHON_USE_TP_FINALIZE + assert(self->ob_refcnt > 0); + if (--self->ob_refcnt == 0) { + return; + } + { + Py_ssize_t refcnt = self->ob_refcnt; + _Py_NewReference(self); + self->ob_refcnt = refcnt; + } +#if CYTHON_COMPILING_IN_CPYTHON + assert(PyType_IS_GC(self->ob_type) && + _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED); + _Py_DEC_REFTOTAL; +#endif +#ifdef COUNT_ALLOCS + --Py_TYPE(self)->tp_frees; + --Py_TYPE(self)->tp_allocs; +#endif +#endif +} +static PyObject * +__Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context) +{ + PyObject *name = self->gi_name; + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, CYTHON_UNUSED void *context) +{ + PyObject *tmp; +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + tmp = self->gi_name; + Py_INCREF(value); + self->gi_name = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context) +{ + PyObject *name = self->gi_qualname; + if (unlikely(!name)) name = Py_None; + Py_INCREF(name); + return name; +} +static int +__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, CYTHON_UNUSED void *context) +{ + PyObject *tmp; +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + tmp = self->gi_qualname; + Py_INCREF(value); + self->gi_qualname = value; + Py_XDECREF(tmp); + return 0; +} +static __pyx_CoroutineObject *__Pyx__Coroutine_New( + PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type); + if (unlikely(!gen)) + return NULL; + return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name); +} +static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( + __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, + PyObject *name, PyObject *qualname, PyObject *module_name) { + gen->body = body; + gen->closure = closure; + Py_XINCREF(closure); + gen->is_running = 0; + gen->resume_label = 0; + gen->classobj = NULL; + gen->yieldfrom = NULL; + gen->gi_exc_state.exc_type = NULL; + gen->gi_exc_state.exc_value = NULL; + gen->gi_exc_state.exc_traceback = NULL; +#if CYTHON_USE_EXC_INFO_STACK + gen->gi_exc_state.previous_item = NULL; +#endif + gen->gi_weakreflist = NULL; + Py_XINCREF(qualname); + gen->gi_qualname = qualname; + Py_XINCREF(name); + gen->gi_name = name; + Py_XINCREF(module_name); + gen->gi_modulename = module_name; + Py_XINCREF(code); + gen->gi_code = code; + PyObject_GC_Track(gen); + return gen; +} + +/* PatchModuleWithCoroutine */ +static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + int result; + PyObject *globals, *result_obj; + globals = PyDict_New(); if (unlikely(!globals)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_coroutine_type", + #ifdef __Pyx_Coroutine_USED + (PyObject*)__pyx_CoroutineType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + result = PyDict_SetItemString(globals, "_cython_generator_type", + #ifdef __Pyx_Generator_USED + (PyObject*)__pyx_GeneratorType); + #else + Py_None); + #endif + if (unlikely(result < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "_module", module) < 0)) goto ignore; + if (unlikely(PyDict_SetItemString(globals, "__builtins__", __pyx_b) < 0)) goto ignore; + result_obj = PyRun_String(py_code, Py_file_input, globals, globals); + if (unlikely(!result_obj)) goto ignore; + Py_DECREF(result_obj); + Py_DECREF(globals); + return module; +ignore: + Py_XDECREF(globals); + PyErr_WriteUnraisable(module); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, "Cython module failed to patch module with custom type", 1) < 0)) { + Py_DECREF(module); + module = NULL; + } +#else + py_code++; +#endif + return module; +} + +/* PatchGeneratorABC */ +#ifndef CYTHON_REGISTER_ABCS +#define CYTHON_REGISTER_ABCS 1 +#endif +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) +static PyObject* __Pyx_patch_abc_module(PyObject *module); +static PyObject* __Pyx_patch_abc_module(PyObject *module) { + module = __Pyx_Coroutine_patch_module( + module, "" +"if _cython_generator_type is not None:\n" +" try: Generator = _module.Generator\n" +" except AttributeError: pass\n" +" else: Generator.register(_cython_generator_type)\n" +"if _cython_coroutine_type is not None:\n" +" try: Coroutine = _module.Coroutine\n" +" except AttributeError: pass\n" +" else: Coroutine.register(_cython_coroutine_type)\n" + ); + return module; +} +#endif +static int __Pyx_patch_abc(void) { +#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + static int abc_patched = 0; + if (CYTHON_REGISTER_ABCS && !abc_patched) { + PyObject *module; + module = PyImport_ImportModule((PY_MAJOR_VERSION >= 3) ? "collections.abc" : "collections"); + if (!module) { + PyErr_WriteUnraisable(NULL); + if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, + ((PY_MAJOR_VERSION >= 3) ? + "Cython module failed to register with collections.abc module" : + "Cython module failed to register with collections module"), 1) < 0)) { + return -1; + } + } else { + module = __Pyx_patch_abc_module(module); + abc_patched = 1; + if (unlikely(!module)) + return -1; + Py_DECREF(module); + } + module = PyImport_ImportModule("backports_abc"); + if (module) { + module = __Pyx_patch_abc_module(module); + Py_XDECREF(module); + } + if (!module) { + PyErr_Clear(); + } + } +#else + if ((0)) __Pyx_Coroutine_patch_module(NULL, NULL); +#endif + return 0; +} + +/* Generator */ +static PyMethodDef __pyx_Generator_methods[] = { + {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O, + (char*) PyDoc_STR("send(arg) -> send 'arg' into generator,\nreturn next yielded value or raise StopIteration.")}, + {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS, + (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in generator,\nreturn next yielded value or raise StopIteration.")}, + {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS, + (char*) PyDoc_STR("close() -> raise GeneratorExit inside generator.")}, + {0, 0, 0, 0} +}; +static PyMemberDef __pyx_Generator_memberlist[] = { + {(char *) "gi_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL}, + {(char*) "gi_yieldfrom", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY, + (char*) PyDoc_STR("object being iterated by 'yield from', or None")}, + {(char*) "gi_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL}, + {0, 0, 0, 0, 0} +}; +static PyGetSetDef __pyx_Generator_getsets[] = { + {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name, + (char*) PyDoc_STR("name of the generator"), 0}, + {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname, + (char*) PyDoc_STR("qualified name of the generator"), 0}, + {0, 0, 0, 0, 0} +}; +static PyTypeObject __pyx_GeneratorType_type = { + PyVarObject_HEAD_INIT(0, 0) + "generator", + sizeof(__pyx_CoroutineObject), + 0, + (destructor) __Pyx_Coroutine_dealloc, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, + 0, + (traverseproc) __Pyx_Coroutine_traverse, + 0, + 0, + offsetof(__pyx_CoroutineObject, gi_weakreflist), + 0, + (iternextfunc) __Pyx_Generator_Next, + __pyx_Generator_methods, + __pyx_Generator_memberlist, + __pyx_Generator_getsets, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if CYTHON_USE_TP_FINALIZE + 0, +#else + __Pyx_Coroutine_del, +#endif + 0, +#if CYTHON_USE_TP_FINALIZE + __Pyx_Coroutine_del, +#elif PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 + 0, +#endif +}; +static int __pyx_Generator_init(void) { + __pyx_GeneratorType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + __pyx_GeneratorType_type.tp_iter = PyObject_SelfIter; + __pyx_GeneratorType = __Pyx_FetchCommonType(&__pyx_GeneratorType_type); + if (unlikely(!__pyx_GeneratorType)) { + return -1; + } + return 0; +} + +/* CheckBinaryVersion */ +static int __Pyx_check_binary_version(void) { + char ctversion[4], rtversion[4]; + PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); + PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); + if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compiletime version %s of module '%.100s' " + "does not match runtime version %s", + ctversion, __Pyx_MODULE_NAME, rtversion); + return PyErr_WarnEx(NULL, message, 1); + } + return 0; +} + +/* InitStrings */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type %.200s). " + "The ability to return an instance of a strict subclass of int " + "is deprecated, and may be removed in a future version of Python.", + Py_TYPE(result)->tp_name)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_http_parser.cpython-36m-x86_64-linux-gnu.so b/venv-linux/lib/python3.6/site-packages/aiohttp/_http_parser.cpython-36m-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..f12ec45cf9bc4139a04292fec82c275de8e3c12f GIT binary patch literal 1586366 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�tLK)_~nDjBzYJJ67~DINPIC>QyXO? zs5$O@`M~t&fggn7kjr-=P{j$Jd?ex(SMHrXFc55+(k24^!?{5mgtjTS3>1vhANe#P z&>xLy?&^fHy?^rL#nAfe1+dQF65i)`_5+1M1ENBy!ZuxPGA2y_EZI zB7U@)=H${n!R4jq-_51usaA3#t_RZTlXlNMuq)u)4Vzl!d;<3c==iM4SqiA$>D0CJ z27qe(o%HK2#4j%IEkkK&@1qsC!`AN*h#t0+XdFniNi_~6Mx&Z_TBN@PhH6bkzqfI} z?U3J|`)vqlM>FpChq++Ro#^H;%FsNul*C3G_9>24?veck`V>cOn5r$_eVXXeapnx- zFE%!%D}cOGy#z)ER{%3pFq-1Tz+hYfY?9>9O?2J6AC1$J0~Y~}TY#scEL{OqmBdm# zCgc|2*z{!+Z=&-t?=(~+kEtoWl>#z&3P8;*uMssb!vLTWfZTw#w|6*}(ho@53~`Y0 zRTRVcO5d&HSWE@An1j@a_!fdbih^5~=`ijSE}L|(Hg&#npU`X1XLPmcZmkMAq%A1# z83qgnGX@_#V`A_cpsj=f{Q!f95!dO23jL3L6KvcBevq~u26JkbnuO5C3o`>R#pR1f z@tUV0boZZ2=(`7?9=UT3pMwjhTJr^e8fEh1ygAH|ga>Qk$1CU-{8)e%e~}-hDEq7V zapzu%AK9-GKS(w(2?Lr7=y{?B{eT*N#KDg?Cl{fm-Zf+GIc*)T2P>4W88aDL9=qI=URoUkM+Tdf^>A5|uldsn>{Ap&B{7hqg^k zg7b|4hOSl{9l^1=8s7vNkjAf<)PdnWh$L;tKHl~D1pTAUi@435$jIV0*8%Dx+I$;e z&6_Bbz-1~C?ZIVU1e7nz%%C#31L+9S*C}v5U_Xn?(RU>K8GMHI)p7Q((ASSq_E+oc zrtc(uedJ{#mkSsQ`}reo1MEKw+Co3jmMw@wUvEY+Q0N3uNZ8M1tn{_p&n#dRSzo6k zhs4^npQkYf0rVp;-RM_>g##Wa=W4WdU<<7-+e0Tk-ok+ zJ5*og`E2*&%#TC&)WVPP=oT_th!%g*es)LMU(JtRyCixcvp92FZqy&W(T`ZU<`652*1r;^4>SCZUs>z@WTa}M7yE<=yWFYV?U&h`0>J% zwe#bnM}&T;weaIIbPImuqQzh2M_ZKr)%-Y9m-wO2Cu)#v2N?j3o62KhAg}gdf>$ggds5w@8BZ# zz)D=)cgXgCNLL;wj_Xg}|aPos9IZ^SCO~|&B$BE?R9RFA>=W({fg~ffG3E2L+ zC0R`VoJ^baST~-O;~$xV_YHj2Fn@4>PbPxU89esq>1G9&r5hP^(36WC?4XV0T#@Cc zW(H!LhO%kPrF*8!*Mt#qu4>C|@h8DJ;1Cr~p$hc(rTk-w%f4o!>?5Kq4lc==GRmID zd3f*;{bI*utjJ}QT2oeOS4Im9;_i82*FCU&$0n`y{DR;Q)a6RiPnt~$UmNmf49})1 z`8n2pt(i)03Hw(@sqp(a)5G%f!{X^yyyKQOCQZm|q@nn}N3PM6L>TY4oZNAqsDPnc z6?D6TPFo1p`ozR{ED~jWKc)%+=ht&tNk7B_YVoUJ>C$IUp($?~yh4iN@7(~RH0<<2 zu`WeS%Z4$~Uo_gw!v1x({{Ra&pPiat`(KkH9Nq2OBM(D+;RW*!DxG49UEXOdLBmq| z1}-?qEczshvcJ5+DCQZjsQ6}^?&D$E8GM8`&8if96KfuOohmcAZ{VV{_;a5F+9!{q zQ`K428v8Ll>EcE1yTXUsI!e(@mGcTf z&$l3oI4=Rn%iumR37rs8<8vq}kns{0SE~CwM6}a2_G71t);!!=8)SI7wOBxJiPrXF z8DF!&Mxf?-@>j#DtM*RAN}w(H8W+UX0J3V|G9{(&SzX>$g1E^h<>DWbc)*`?(CYmT z5I0$-e@hf&`tzq%RD|enwK8QUT7f3kM*lv6iS4k%i6glK+5qqh4EUiHk;oBaQXPx@ z65s|UwdhRyhLXIR=`}tfujc&+{TxBTPEQj*sk}bL5l+?F6C~IE4>W@g=A@PY5`R&;XD+wgCFJ0%TZvYg6j` z6jY|D&@$}-+C=;wzm%(O`I?LY&Le7GA61?;I2Bjof^XMHX>oG2Q5-q%SElZw9kv{` zMM+Db55tT57AaVT;$nA>|0+7?xGE{%A#;A}9g#ioYlY3gi+1gG<-B$xN$sXBejd0MZDcIRG6^Ov2xO9*e2whNR5>uJO1S zuJ%pLQEy2Y<(kq1n9ymJj|K^oDW0yubk;wX69^l`Hl2VNj`CgJp9wD#?j-;Sb8IH& zB*nVQ#ydfh14LX*Rrpj8IWR2QxC>a6YM0ZVA)`Z+N&5zLWb?jMyrw?s)jy8mPXW<& zUOE^S{PzaBd!e#L#!ej>Qsb@)*OJ=&_wJlurQl09a!V2 zi3NWbIZ6axbj;!MJ|2!&oe;dfvk3MYK}4`e0Z@OK?sAgia=;%@tpy=hfv)KVVmL6! zf!9OSOTg>L!J>??8rrpFFo=HRsK3(pq>5atrlFWWmzZQM$l-lw!Z{DRf$fW!=2)z| z9$W_S!!z2_o<@(@)h=%zv^r+9ZhKRY|%0Ei?QL@}BZ>*cin24(Kp}2%@Ioa6#OD!6yiw zX4rSZJ4|TCv`6;6Pt(rSY$dyslm5A9Dt6U#u&bU(luV%J1v#~P!b~zPdoV5WlRyMW zbomsR7p>h4CSSx7-ZO;(8vP_0pwqDV&=OuA)_eE1bqqceNaOGA0aW81$Wq-q0qZkC zG~rLa4alLt%hPWUkRyFNzUo4Z7??=dN_^L@1{x5+EdMf_?}R3BMQN9>*r*7lHHQg# ziPJ_sSS$KeGuh?67&T!K=RQGW7yuN-7}5dt5o2gWcz4E78SftI^$B_a=MjeePYw3- zZ{u?!AxEh}{atYw^ZZmSa{Rk#Jh9oOyKwM=GnsgS5Lp}i6)WVpd{?t;+&xazC;LI? zwONbEGGYw~ItJoDeT>X)qbdYBu1hO0A2n}Avx2+bQ^;^#wie&^S3gc=;@`qZ;P2yT z?rq{-z_}Lb_EOHi#tbuh>~iu!$Y zFoxT_4`E>D{U97VeF!R8^PPH4b9#Yi*_XJVv_gMPWPz`s7iDBG`>JJj{gwIvZUX7* zH6|Io7$Uv-U7>#{wcmp-JW;)B)T_{6GwUHeL7$75_5jvGL_(NN5Ck?<&!gmtMl!?) zA9InYlcmrQdqr#q8=Bf6K~*W)ww{_xoJvRoy6nnC{`UhRYX7i z!t3lRH#8SWiGFgeI`5NGsP6XRbrv00C(o+G$8@UOJvj_FuUw}wjVIrzGZ~(O`;CcV zbI@e2=reGtM7Bft z3))E!82nT-8kvA zFr=FdtD6eDF_&)>bpsk=W@h)75EFJB2VS!2MzTKN=vp@P?L_}!MP1%@HU`iInxxPR zNQ17lg_~$>9=hiOPk@p!a4|E86XqR+6(967HaKB6XTS(py+MTo8HF?JIIZdzgz|#>I{zr3KrGF9G#nJK=nv zihY4mDA9;xSo`?Fvp5FtgrD*gv zYV>X*RlxZ%7n_Qd=G^!7fVzlcxm4^rQS3!7HpD8H3Fs10tUVRGm{9cZ(XYjbLhpN} zR=f?DloxjVkc+r8jay&Be^=Cw6{i^f`$Y2JCnm+hgICC_rk{M5Z`g^X$Lzs3a7}-; zE@FZBhIG7YdhqgoMX!8fcQGU@kAQ#Ip&tp~fIKZ2Q{mLJ0KuXfUOl3GGjddjTR)gl z6t{C--nYmVWAFJTLYBO<2LX_uB;n6wEtMQ=T6B?PJ%x;Z*Nk~_mSbH6&~&VCLauPECz4|w^t43T ziK6UsfZ3vKR_t=zAElNssA6vSVZyg-My@CTsHIVh%lbhE*P9wHys`V6$2Swm9S6!# zyld$$-EQ*4Gjn(ii0gE@?2AKMueB`_e>G|N=6Td%m~S2*$u}>T?q6-^{ebk{F7J)- zD#?%~Q#XlPF^C8+*T0HpvxE@6 z#u6-egdrIP=rYz7=Vbu(FCZC^$rrfTl}PE#Ds>54aI0b+3-j0GaT`;vEh&UHsl1ZrM2_7{6fex zJarq+rw^MZ5T7eRl%Lwm+#Bn;@eX?#Rb+$-_S2H2a zJUjJF!Ctq5bJI-gkkx|^r6%O!fEDUTUp}CBPdc4W;#4%(I-;{ap23+VeL)>z7qSHX zftdU~OwCg3oJ7PQ3ymAkR%M#y^#P`TfcgqNFnR=z7k7GF9cLpiiK)}OZg1N`wz?k|!25me%hWvnjwnwUp;W2i~Vs2-~iKuz9X zHR^#su%uKE%UNEULI<*p+7Ktoq-819Mia=?t7$!_x;x!S>ajbUuD8<`;l3%BiG{PV zm)YMFOI`ZT)Y;BS6TkahmA#7Z@V-CXfMxjZ1YX2DeliDS35@+e%s^1^wJ3!BzdPDG zMkA}rc{QLzD7BP+;7fEv9F089ZDqWVCF^1;sC9VXbSO?EdUlQ9TNeWFbure?#}UC7 z19)*H{!;V{oGzn)Hy$%Z$NjnE;O%W4W4Yt60iDv2`}`1~8n4l>djo#ae_PRi4*J(# zc`rzx1MAqXljiXDv@Qua$Ka^fnnabZ&LND}JWThXkCV~D2de@1yWC*>0ty(d`6Wz` z#h@0>gVE~^jMk-q+6c5d1Jti2+hn^2J-0rT4)Y2lm zP_fHb6AZA(l#5oL7E8D&YZ#`FNapevs~>b11Ha6?kDelpEw zxQlfsX%-gA4xVBbla7gd?Y?H)>*Wcz^zrHiqO~>0j(FU%>anA^+3itl*w8I-W-S0zULUFkG+J_RI8Ee0lg*~ z$py#{XQG`lZU@vkuAS#aJ1V!6Zne`2&~u`lSZXJcr}B(UZl`{Pc1DPHx^p{wv9c0_ z`V`QoqMZtW`eqmz_zZ_o49YtUc8-099i%Xi!G9&Up$i!zlqsd5J!>^}H=wPesUm7B zKuy6HSuMCX7fog@qD6i<_o|-d_U3VWS6J;`1n51{UOQ?pgS*Wb#_eEl=D2pIh<5V1 zoyJx>KfvKzCED2rQ2&ukC-~3pz?dD^PG`|h0=H9%DhB@n5$cNHIfL54cRke32Pl?> zql)9(**%xXwQd^GX|mPMwSZm{?ewE|u0uQKe!u|v`NNRR&pYq&rzMNQ5%?IN~KR} zx)<@R@XS=A)#b<%pVFiOGCrlD@@jln`gOO%FD9#7Q5qb$3=XbVXBCJ|mn`t{vU%sj z_>|_;qiw|7Yb{aD{*;F99BJ=)xZiWQ-_NiZ5uegj05U$MnGcXZrFj`;>`!S@hbhgi|`A6RiZTb^%UGD?eZ11^6RXh4SwB-YGM33L-ae5`|W^y!LK+# z2EPtt70CQLhB7w4M$938;cp&!@XpP{e5U~4cb)kS;o&I4_MHdWMj`KT=YSkZ1O$43(@;DC2^-}F-(+B*$>AJcrl0WU+8 zOu+*j>UhQF+fO=7UllhdfN$Lerg-oYgEkIkgjNJu^x{;|a|S-pz$fzx)CY7kUS`0O zM*JO;o_5+Gc!c!+Vo&;Zn7(=|olqF`6l>cG!6jUq!3bU6)zpeQAcekb#rq;R!wJsC zUc2$ExZqSwFqZb>7WU$MB<>jIG1KZAfj zowQ*P=JO@bnBVZmn$MT$#Z(>NaUa6i0`AI5&;tyy@lE_7$u~5ysqqDeY2b}+r+{uH zo}#F!TAv5;L2repo7N5F7*(#n!evvep~R8BGw+(9hmoR(e?Y~khZi9LIMVl`7J^9# zBE3gJPXv%jzIq(gG`&|WK8%H|RN{^>OeuXKq`F@iLE69Fekw-1c&Nw0&GcoyE95m4PcvL<6LMk8Lk+)|M$c}5 zy!6+(Kwh|tCs{?szAtt&=vg=j8}(He`uofx&>HXXU_6b97@)$LpaNc-0+Y6D9Wc>o zKO%uK0#Qm(TJw;=;xV>VL_*Kk=*HwR>ocDOb#Ng*KrbU@)2580N;vE+hVM#$N+UBr zm2POzA5%9T8m{V|hm!QHPCkbuDp_i;Lg)rRI!C)Pn`xJo64p{lOyAZY5^;GaauW6f z)RAa^Y(B4gVH&WBKzjsvFxvd#dOh1bc!tu;9>%-=*O2fVf5hWdx;hwgQ7IGMvHsDA z*P*%Acm1Yp@fHE}b1<#NYaTcD52WwgYaXPR5_}y%L46Q@m_OQBvOqMr3z0;leVzfPn4;YAmj^r@K-=92m9YZ=rU&d5);NF}FFFXZ482`Qn@bS7<2KU8NC_Z7Lmuj3g8_5p1E$)O9V zzH83E5ls_JKfKq24a8`oJvT=jo%<$MpqO{>Uv!{HPMzTF(POL9HRD*j>A8t@S;T!+ z8#7atc#M$w=8#zg5#HAZA!y=Bx%gGzgaVhO+rb?bLSM?SO!{EZj~|EqYc$L}77Ld) z5OKVe>v$@jyjEG6r+9#7hc>mR4gqBAN`VA!s5YtF2*(bR6YX?f&*VhAL{ouZhcrFZ zK%AsTl;EA}`9zEH5b^tgbTRyXK#)l;8kEVONP5JtPSRsWQsE};2^-j8z{Kas&fzCY z`-#19wsfVlSt-BDG~W;#NodyYG%XbyKrkYX$L&h3vyyS6Vy9kwOc(Aa5bo=-YDNDg z;uXxIgiIBS>6|A>mUxwav)of3f@)e)7jZvxF<~r`ZOxiERy(yA>@3w%#w(>Ls(__o zhSYh1h+AZb+_zHtNXRxQBsy;@M_`-8>*aI4WiR+$Y`$_v$BRR2hKdkGw@jq`e3&aYQO2$e6&xQg9}G_O&80Z4uM7d{6|fr?q7CpO(p;=Fvy# z!Vj&d%5G+9m@b|}#Ji8#L<3%nJ)QG4|2n~)`9C+F4nOHXIG(5|liL3sPc6oi9-?GC zjXO)Mvh4}%v>U5*B=qZUHlBVw9*9Vy4aWeHGoIe%W4dsKKr&^^Se$cSj0palS{+Zn zz-8qAUpk%+K2t<$L;IdLA}xn@MQ%JT78!HL)9L7%|5fAZERd%QGuBgOlUO<9|AL5j znu37hn;_Bzn@S)H@>bR7*WYv`BRhe zHI9$?>k>$&>^>IZtpAC4H8WZrU)S3T=YM>Bb#HyXTL0giuf886BHdPlY0$>k#e|M^ zL>f!5$@q$+{ry*sug)M(7w)VgGGzlNiO2;+yk8%2M~g$JOyI$CW(9=(J8$kmX^D4#(nf$k$9|bbgT!wkn%$YF5_C=WUV~ zPhDmBCZai=v81 z_lzem4$_=kU1wxkN@#{7(?Wv2xdm}HCSSfH z1FdvgV70Gf!4;T`%)rCkNIC zdAe{L6_F_$bDlaXpNRMU15OU?LHl$4J%##f;MFESq05DL9b=1hI|8*HJ0i2Sf#mf@ z64>~}LH-78abYVE-yB{|S+eEntrj+4S-lkn@m|C^2VviO6J|MU;l6}Jm~z7IcDLSh z(Jroo0X6GL7sk{PE}mIAPBzI9*eSxN8skYAU*;z{Zk!)a7E-~g(w*P@3?poEC`>$? z|9Rf2VaxEgco87(m_=$qRcbUF!Ara?Mg}d%(_M*u=QYH5@-y)tHiLNbTjRu77Y&wl zrw4Z6rzC+#!e3Ngy7*EOw6mE!*fOu%W;VZh-j7EIXestiQfOPgeNh7|(dnUFZ0Z4y zkct-(?@HYjHVS%=Iuuwx;>o@$EH#$%5H&?rsb4h;uoG0K)~ibCY4gB!&pKSAqS38e zIbodKxDW?p-*+L-NNADC z*P?j+0vGBVub2EK4Wsv?E>sY&zlRXboqM=QTDUjfR}v-Fko0J^GF`kW2}aV6#AS4F zB)$EpEJB^I8_b~aFLpv@*ON5n@8m^P?MXMp(u5w{M3<;O#e5?JPV7{Y~bSzQd!r&;Jv-m0KoA7z+Xo3yVwcR#rqNQcK$m>Yo}m4tJ(nMNMoO`{PwDu z-K1EF<-GCPAWRX8UYFCUjn{gIpD!FXO6uRYt?$^`C#vFK4)2ktZPbR?>x4d_;t3p# zreZUR`6oHCR%MXSk>Z+o51~h`iLQN@3bxe278&ecNztZyLu>+}l?IDfa3MZMz$?{~ zOzis;RE3ix-~$P*h^kO5$WN`!Whc|8-s>mou<8QwMg8@z5sw&#?SSlL#dRVys;fHp zcgp(yFfiQi%DUJfe<#I3E+aHHf?O!b5f1VwgM1@`e3H-!5#%j`+{M-EjfDED@X~Gd zQ+y3S-f6Cm{%}W*4Gq`D?lh07O-I)(qgHj#hr#>^9Vy5LRUl>mLCcR?wAV0=C0n4ZDaL*h9B>7hp+L$T>A#| zgHBH5nJ+qTn7F#M!CJn;H>J4c}L$F_LO(SQmx3$<&}n z7ysN%o+EZIEdzq8;FV?m8p;X@gRgq7ne zgf0M<8}F&u9Yow7$@)1gk)6c48;c(z=8)P{e?U_<(F~C@Vc|<6w&EDIdURCWP(l-; zR_{T~_IeRnfxE|7AYn%DR=RXK^QfHlP42THl=y@uE`M1GIjul%+LoQd@f!SBljzl=!! zMgh6%1pcz?gZ6+MX(y1Vsh}$LJ^rqU>EH>9mi8wgQOwWA;R$Oft-{8gX5{UiTT=PfV!K30qTz0%BXuP zKi(Y%_VZwFql+JelIpeUIW(D`1s4wi&j6xr1MP826~K;_Fy*R(dt2wFDSb zXDi=&?O6(DSAL`YoyguFtd|n*6vr_rw5udgb$Y-OhUC}cF(@{T2(7N<5Q#RuAEBGXT;F)-TrWlTd1#5}Q3QeZ zy_&vN7PS|_FeH6qeq~8RWjfjO9;#B?>t6nr*A`^CU8LoHxpOdN*hT_3Bz;nTSe7ekyCEf?yZ58*1+?Yf%7g9P zVZDya;KC!HXG@;a*v#_*KqebuN5JYBfpPV-M{THH3K-<`lYy3rR-qugUDc1vG>*<%f~+fryoA zX#7Zo)$S=LaZGTfW96>m$1*kG6U7arFAt*j8(1;10{8uwBid@kBbM6-^10LE@^nId zy$#RQ;L;i2d2;!b@?|=iA}Jxq#~1$E)%W#Z4M}~; zqE_=qFa~*9B^ZF#$4>y}T|Zcykib4Mf;R*3RyD3B(NJDZ_hUXQ9})c4*soqnvMUR? zL(x_1-tpw+;J_EvO3+Hii*Ck8-~g5z}wuqMm=ji zO1!>X&9!&j%08>|HmQyo|I){lOKAEB!B|diU4ZbuLD)B>92t z^XWy!92>qnGz@FQ*BUqe7i3b!@>Pu!r|Ct9)?RZ=ce~^bhOH{~qH?6WofpQhSF!0) z<-zqF4wh_Om0IRsXkb0C;brRr(XCCr>=$YsJ+a24*Ba zg2Ykn`)Xb`+tY_)v2-kPr*521So zbdC=i?+xXd&J~?FP0P^&B}E>;mKu=;!B%rP-tcp~_{EwV&}h1yg}@!v4j*LC$p=}I zRN3d5{0j7BkBiG$juKYBOA_-{dbqC9^1cQBbDm3#dNH+__eE-7q8HA5jb6ZSJ4Oz5 z#=(`QQ8Yg6>KWn*{n0hWv-15ARo&xF%lA&v7~)}wQ7_sR)PY(Zxi*| z-$1JS|JgokC&ZcJiDy`!U6g3EV9nhk6Pt#uuy!c0*r0aqg=)O&i`nG~8spQ*u{Zn)*`uY_7tkd=((!!ojY1{U*lt142J& zDHN)7toUW?ntfmpyeRyBpnAU3YeV%@_)4|zzeuLgP0V8p#bn&^2dE)7wW3F!{6sax z#t?e9GZ(h>2aY<3I7ns~uCktJ$Fl_J?R`~v-*F|ARp2@Rr(o3*M48y>EIFbJdR3*{ zEPF{CK0BHYm!P9!mykfM%Bd9sr9wYet=(L;_P1(%SKcE}+ZEV52z78gK8K*c30=`j zCv-vFL!%ZW$L^AGSerg;E~30@o8g!T8KTN)Yy_KZoXDI9BPmBc!*ri`{Xna}-riw2 z+S@xh%+;(+e^UoMLj5&1p*=YQqX{Gws3B0Uzz70JDRZaEMjU|zDO7T;_aS?iYu&Vl z1K-?->?68x$NCLFOA41w91>kA)S#NBKkk;}EvK89o?NAowaY%?$m&AqZ*EZi zUM2y(9tr-fVv|hSu7-_@1rD^b*oHZ5yBW5nWOUvFMwe%J@iU< z1P2}j>^5MAB^SzCY7Fg*DYp08P1KI!nhLoiqe|Lkw3)lQ~tJ;SH% zFz0A2OQ-D}z7B?OCRrVwZYK1A!*{Xp)oXUhl+6Y#xaHWa_dezX0quM40MTh|gy%3q zGaR0Mg(tY>c#h$b)wX$ku6KCOGd#T_JR1PR3Z5SkWa@vz1NXMTGtA-H&G0NG zOVIy>u5oxC5}pS%H%0!+gY)j@l^a$*-z-nau^pR^@2w(6#6RH-%It#!;_>3UVUBOD^Ospa&rO2yER|u)+e!%fkG$G`1b%<6dtPnlHPe== z)7(wD+8vM7`_Vsn3-`u&`b9uLNW(0<0R2oa@1bFuo86 z1k#INB)jgpI)1Jg{v=au-Ygi#mU#AbGSFjz=9P%wF*RrjJuZ>a%*5q^qAEgmDzAtv zb|9>`1yKA@<|e?81Ntl!@5-z&d15WY5;vKe)QU8L72wbvV|WiFrx-{!@R_Qhvw>I2 zAoPv~WncrpbfI`C*SwHisAB(x4P18ezy`izF2pZcPwPHk zf^Er;Ovx#~756@zU739p+*ONnMniOH&5C+_FWJR^s_pHi_mo_hU3_(IcU#oTEIzh| z8>L8*x_BU9Li>v0KTr6la2?S3uahZ&aVoLop0VgJ28g{j+q!OV<|Fa-3X1g0$r;eK zsU2LW{iMp~dl#b2IWIEX18fHI4g{z>MECnae5~Ln&_ftcZ1#|S-OPZzRTx^q-x6Ke z4g4s_BK0v?sMg-DT1QsO3ckv%B|a~uZZb%Trn?;JY+##$H^;iY5t?#5InpMi(7HX8 z;}#m>8cu&>oUU06KMv8|TpeFye`Z=dc_blw<#>^K%kj>m>efC?wUxXZ8d|qEj3@Pe zZ!5;_Io7YA4oQ8?vxA~j>t@0a0rQ^beBi$~O|!VbNxF>NHSy%5;6NZg_-xKJy(pZf z8~7Ma({g$kP19dDo2IX|VdV_m+qh|Z8c9sk8-#Mv=IKeT&C~Wy3zDeZ7_gb0d%`5O zKS$owb&-+GScjfqTSYp$+iK9>7X9IW9NNEcaGlr0{#`Bmce(7}HQsC^9xJRS_HS04 zG#m10HfVV(saZ7vWHk`jzxRfvLc2k*DG^W&eJf;izf-X4gxaFqGiuypc{!wxTQ zI7;g%6ple0>yorxX_T#%Qz3gF!1Rr3Z#w&JPTy!h0r_%Y4*e(7t4{YgCr9_l;Yo~l zqD`)ey~f`R3|8xdsI}K0X;?q!MD(58NcYDJWof6?v!pV8OAURFGtl<^VGhw$=kb}N z3HtM`yS8}>P-lKmHn|_F*I!e=%Bucn{1dz~SEc;d`6nprtseWI_fPQF?v$(E4Ez(^ z^rVe5w*d$OJ)^yZVH?g29eJF;!0VuzxvHelU z{4vo?{+04Ph(=N*J~GA2v?Kf^(_$`!;Hq#F3-JIe53{qf?;roi3tU<+m&kIv5v65Y zI1qrp_=jc7U(5zS!0~^)2wXKEez6boz}%1pITecv9&M}AM~$dTy*(uLEt-iQ;o!jF zI&JtZuvL-yftP@&O7-l?4y59}y?b;mN%mi?l;n_`^WHoHf~O{(qTu}%s9R~*XLb>t zkt#)cz?`;b4;TXW9kp~?UUGp2c~v}lqlN5D{TUY2nfe0>B}#YhrRvw8(q1@=r*CPh zk@vw)rqoVdpL1CF^sO6!dU3J)hF0WFa06E^R+IezF=D&LR*9i|LYzT2xgD4bsW4~c zX?^kQ-CP0Z1qHlGe})D8!+lc$o97fTLse66x&q#PT=iYk!3tp8P_*ge3VCX&3^hS~j6+Ov@$AiAjZX>?kIkv^boWg)&JPi9F4~G7h8WIo zf>=*KQDc&e{~C~Dg8=afIW;~nONxgO8Agh!O={e?8RE+wVv>u04?6Mj9ULh>p++H% zKhAdIVIku4DL7l>@@9zpJH#XxAHS(1#mE5h9Y}=`al(BQDSp>{rOvxMWDO%lq8Z}( zro*2=a&bDS@j3zGI)_;PA&M7ub%ie9-nHg^n2AE8+cs2v4&!V9;`TZ2ZX~9B!677s z-l2KYVx8leBF#=ti-lKmm5O8mwO~RUowLTB2Fv`ig_Wx2>=HKTp(Z_B-K;rnU304a z1hZXeH!C~&QHDeEVw7bhN?*B7$NGZ&@cQm-PRmoznK+Rf@!tIJ%ds%Q_V3xxJB%R$ z8Jm7b_VnX8kd*IC?8ahQNe|c#TQnlQA=aDFD!62Tokrc5n7<3PnuZko_z~6PpXiD? zb$E;tSPSZ*BC2F{K+6J#^80#k!{$8;SWMEI+0b67=gFNPn#- z28N$?l|-_?$REt-VBO``>Xuzfko&%M_ItwCBiyk;MGn6A@_({ASv@P$`x*XTRjGHP z?@#7_*QqlmoN&GhfG7#t`Sk`#J>lEi3M0Nf8xFH!_!mZSB9cfWn(^&p5DJMj!haYI zIb2t{#UH~aT>KR^8zZ5Kw6{3XEt~vZwFn5pE3#qqol#jR>4Et8_c636 zH$J;rJii%yKWX~u*kcb$Z7O_dchsg#@nL(J_Jnr^SUkFLBF+;+)eboZM}su!p zcOptUjsFH-V<3&#T9+j_3p`WfBYheJ@N=r>Eq&OnaK~_+AC{}QUq&4r63G-lQ_+^N z6kqM|FYm?h!~f^5B&NP;h)oBfW4IKdjbS*u`!<#c(-tDz-_mLoTR@J6SS{((jX#ed zbTmie#bv2jIkCo9L41pW4Iz4sf$dJ{WUxB0O$By06-?ZxF;RR+ZyOBW+#amQw9DwN z+{TFq#$#PiI{_3~o{F3yp`NU?S}TzEyIW&+v@+l0a)A!^HpFHVs&+%?9)kYvLVUAB zTvwEfwC+UevPTwS${~Dz7qxXNdG9cUV+frbwe=9;T;izmut6S8%Jl}>pU^{5b9WG= zZZ5!*-bqfeK>@41(eL1<$}=qcR)F1N*<*ydMg=u;px-~+6*R~oe7IEu;wg6==r(M9_L3jDaL*)@%K!^dztcZ16^r)w8D|e4V_v8p4@`dPF3;SvXPFtS>&; z)zGRh7WgZFbanu5d{9_3zWW$#6xb0Iuv~>izjvy~{kjEHgCsM95$nViX2SkwX5%Z4+(pw}>Z9$lWsOJgyM1+~O zl@Vrr!}%n69i?v}w3DOsR3YpPLUHK)T|%nFlie6I{_Een5BIwdwKK#`l`ABrV*l7t zjX$3JvH+v+5xO+0Xm8A8t(rf2i<2DaM2=n$`CKGJ$t+7VoVN?|0j)zPFJ7M#EcA z=);IOrwFeULhsnt@j6!zvG4DU=#X%DuQ$Ad$p2TvyECEM2ybWMy;&0)OjqsJ6A(R~ z)G;_e4&n7-ubdCV#Emz7=RRzi^I@rS!~!;r<$U1uGKSS}(H*nrAIu(AnR2hJP5Dxy z?>g3p>B8N9Mp8`~SHuz1n=lceBVBe4zgn|pIu-LVRTvk@sMizeonFH_T|ldt9|tg- ze?wHe40+x^w?Lm;Go%6M{O~;Pxz$9z-4z0^M zWM=1T)5FnfF=wV;Q(6%UXF=k%UlJuR#4kIWWksT7aXfRH0_oxI$TtR|=iF*@5Kr}( zy{0{@(aKR1yLwaAA3>@8sgJA6My@WbLE_1443*3*v9ow(1gt^v@(`gXcSjXbm9Pdo zg*E6A)W9~2Q(Ht8a5n$jFjTmr?sgThqP8;gOYEOH&DJGkT1_j%VqYVvNuxU}mm1x{ zvJc04qbJ~-7r9SVQaUISMQyD`UZz|svfi?DV*IJ|}W>Jw#6rgKcZ{@hC$e}q!ZtV#BL4J!?_Wgq*9}bH&gUDKo zER2f$VDoG%>t%IF$9lCSZ22D)d9HG)m18aY+FJQ2<^f08(K$sst1;6?tG(Yz5;6{?3c&|NEl;noGv`@ zdnbahISiy;nHP$P$2i|%V-qWueXGpRq36Vx99Tc0f2^VJXlT7#Lj`WkO7>j<{p49 zn6NyQv*?EX$EqltNj#l$_e@rkvmf4{VCP@v>qoO#@B#! zv}MAKfAJFWF}m5nss zk97k%#}N`Gn6=x$MVvq394rNUFNt}BEr=@_MVJkLhRoWXc-ZlEJUNvdO>cuF+fj+i ztOr!LGI#z&oA|-b8WJ@P1xrcpMm2L33@)=H$%N!DXV%T`r$qbI)hG|sa?Vf8XcpfX z4Jr5gxy|DLY!=@ajWQSh_Ga-IdU)=49V45TTTh*NZ*8;R*TY1SeJk+atxgRN1K1lF z!S_BtX=S`EeMo2f8;~)yBNd-~6GMq^*z{=Ia@UHweie0s;Xf*pN_6Q)J@S^pgAK7W z39Y-aR5j`fumo_`~!&vxc&?3yc=lE<;FpxDkRwbjfw zUXQn}6+ZSP*%Q_7mEJC0tlf=^;kxrcB3kTllml!FV8!G~wXnt{N*_zEE0Md~hCBg4^BQ975L#6jlG`spQ?%>yWZfdnI>`=O$M&$S zp8)cqWqpCrtx?tom30{OrjQN>IWvO1nb36+WKxiOImo43sydgE@~PphCA2BMPuCwM zusjF$q=B78$_EBEgwUB0!rcY=IgO|2%MG%Ol=lp>2cd%_$o7JK+CiRRkex}9i;afZ zFYz9Ee~%!S5c97zg0g|TW|~>~>d`pn$LlX<0n1y#SKk0rXINXR2`>TvuHkuv(4Yv< zwZv>9@CUeJzwRdR8%cI8zL3x+uEnPi^idTNVoSVd-*7#=n4wH5Pgu4SfN;ZPFroG? z+a3g4ifl&7=6pyO7W0=;@(+wQ>Ef6IVBc2$+vD%vpH~0x&`K|g>i-Tg z{}R;!j_3eq88iJN3S?s4E$d=HT-JXOx-80iqq0geDeEG5)Uy7LQG~3^w-6bw0pw#V zbvz+2%6hD_wsS3i#vo6LAcqlJ8bR(Q$S>5AbnL$C)FH)JQ!81k{#k&L>jr(I`~$=C zd&**m9}B};NN(5rzjne|Q-t+nVtz8n+9k|7(q-Mrvc3<<607?Oz# z+)z&%~mwo*E$QxW0v_i;9ScSghtbHWJMo>{?7rc9Utaf>hevnd^-T*ghv6P2@%D9 zLM`*JXPTy&2N`5u1o=7NYF!D71m<4DitT7%?~$_9x?nb;S0jXX3UY)H!glY*gEm|x zJ6$IB?WQ8Y%~94Qp|_)~e^J&>%9<|T^RJpiR(hWw=Hx&f$=;K%yGSFE-0AypiOF>A z@7LG>xQhA(UIyOn#2A<&zU92H`&yU%I!j--0GI90MgBWVn8_4$)X2ZXtFx%!n2?KGw8Qe5bOuPv@lU_Cp_ zubWc&iS(q=JcHZ2GF{!PGMy;m!ZF=56uen2^ z*gm_{oSQ04-8l1qRK>`OqbiQBIA$J9b>>xK$F1lR^<;8`po8b~YJAX>==vgfwu(9+ zNYqZ0>f9jLx@Rth3>9nMG3Hoc0P*DEunp%X!(@&L0n1v*%2M*Plt6Dbc&|L6EhP7S z>g{~5oU%Qvun+Tp&dF5_=aL&U3ne#Bgh`i)_OU8LolS0_<;8X*W^c$~>Js*Jm!6E$ zTKKwc3%*GMfQOUX4vt|Tv}ovGu~OTVJcq*h^V(q?wwBw)?c3CDi!$-*x>6=Q{xVn8 zZ7gNtB_e&k@*aZ&{4<(VyYW@W%^f*8<@U-u_H3N)7(i)mf1I?xsV9w|t~-q!{z&UX zoqX4pS^!PZmmgr)C&D5JELCifhE5f)>LMalP%B5I?Fen?h~!*Hbs)ii1BNjt7~gn% zBfhlld5+UG4z~PlqWsHasAggQubfS}fi!=bI5HFKVeqe!;>vr1P&@~o*)Vpk;B|Cg zqU-!obj!G1$ohF_&AFZ4(a)4sm_3V!LefNhzzYcKWtStyZAa+dj<9AXHVZKPe?yh_^p$l+* zLV|yv^=K$_%N*rldq_Sy-%mOnqsUOb3cMr1V}xFC6Z%a;GEeNw`*p5Dk8Y!hNri}* zsAwhYS^M7KNbQ>%VHrc{RoA`*W))bJ5fiHtLe?ZgIMomqdZJ&Zc%x=`*>^o%;yDwW zY?yb6Fn1yJQh+%XTeXg==sN!}gKQT;e!;het|e~>>=y^NtATw;ifiyZLcbY81a0hI zL7oZZQwV<>&~+WMgV{UaIt_XEw$c~`6%|~9>x70_Cc<|Xp>{buB&-Ju>lR?`^FiZ% z&F$;K`x<|4zOH16Xmj(wn6IDA{72{Om6!g{%-37xF<<}PHOEdkM)P%HduwC!`Fc_a z`~UO#`Y!J7{coGEpG)V?*Ke*HbnyS|eBI5CeEiAzI)4KV>wm22o_8UFfb~A10qjB{ zu^G@868rC-ueYR(bYWkWlqs7}b<)L~6Jfq?$L`+$E9UEE9Yv%oR)<77htU3xNN!F$ zf`r`p`VtIjIrH^&%Rem2zZap(Fn=&#Zz2@Ie0`R|Zymv}N2nqPUi0-eG+Z6jtJDYVnSV1#E<$C{SLK`+KXp#yF=Ia#~gCJ9!-lEBT zeLu)-zJ6+b(dpy}-GPL*HFUvzy_<0Tsrh=Wq1rM+)sE0A?G2@3U;PG>V7@-XRjBQj z&F1UWn%^{O?O<5mC4+00yFZp$wQJ?WKRXAH9f4m?5^6$Ud{mozLqhP%{0W7@q5p0R4)q7f*vkhI$7xbtR zUyF5h1wcFC+8Z`^M{C_`dotXQe)tdfqt9j8Kf5iG&)X!Y%txRTW!8SxvP_mLYb~>o zgBP~F*HMABZtr!A%ACGB+fF@vPMI}dv@Eme56av}*|dvUZ28x=i}@rL4cE?HbIQEe z(e~+9+WAMj;0NXhWe!wet?fKCD)T8iJnYY2Vtw94Xl&We-ha@}`@?ol|HF2E$Ewz~ zb5Ks1%iL!Fn|{kO|7ailkZ>P-umWpsXC^B1jo-5EeAV*Aidvy<`5(0Nps>u!KP+?m zsLW$>%Ji&1VyAj7+xbU3;f?AN@sMs_ti7G{*9mFc=ti!M&kJ0Cj{CA@nbm*L&RAIH zZ-3aI$3|tIlT+sTuFT_?w=8qSACx&CqFFniR$#6D`8)Ce4!!F~NxW%qQU(%_?e`Sp zRub<5ex1a-ijS$n(**MGZ@(|V4BTY<{c#Fp`~6u)2HWqq&^Wf=M$<7VEk2)0)M9Xcj*Q15uOxc-w<*&)?3W*g1T-HaE%wU~1k>8~ z%P#?=w!y#uhn3==M?BguUkwc?+V;y20Eqxsl{vs+0OstM&l1yUzkDKrru*d=>Qiaq z!U_LkzkF;^g<~*dd1v8V8AkOFq8RqeYlE8De))Ec0o!yM%_vr8IX?;UUr!a-7_$6FDM7{W^8svTTMGbt+)#!rS$?_)=xbl>LrH$s4=B zwq$K&>#T;~2!m+g%zWHYkHH(re@E)Wqg@Qo0uGqGP*tKN45ccJCaD2J%1KeLqP$~>8L z_w+y}HsA7`73Ddc(A%1!QnCFAri-ii3%zdw4l+*Kkj0ZQc|CcaF%Vs2om4;1Q1t@d z6~6(Yft2hD{oxz%;JsijG;U=F^C4sfJD7K!r_y4(8mbS;;!w>a^s1}X{RG_(CjJfR zy^p;2X}yvDRkvTh0-4+pyA`b3sA1(x)Az7CF;*CrMVKnWgX!6b0t<;o>iorZ?#-X zs34-&0<9P*@hSmR;!oW1vNq0gC2nB3p9X4@<-VQJy6S5EnWZ#W;v~}j7sclIzx+*f znHuF8Luhr>#zTmyM9y$qiOI0U8b{R|E%yOHO|TMs6Z%AL)Sp>Ob0u~p-5=pf9Bp|v zj`IA*Q4W|9@ z?nMM^xzp9@vtQddhJDt)WXgWn06}olz7hm}9!!_BtA*qkO1^aAX#Fidh`)`mP|j`O z;QTvLCl87V9Vue#&n%@;Viywq8i_NyYtVN=cOC3D$B!`#n%l=&+rCHPyg|g%pIJ(C z#9KtVzqyl%J6fLiNO5^)6S^{@$DPDPyfYo}>Q$=Z{Un}a1zbs}9$+dqK7dRB*>vF9 zF`M3;Kj)au&gX!S`wxcac(R;rcn%#Z7;CQQ809QOu{EHR z4aItdb`Z7nXO_}jTbH3K`nse_vHMz{uSjuu-XPQ+a0mG$F}3v~0aK#?O;F<2Zo9vY z<$ee#HqMbfA#ow*u#fcw#9l^7pyk}nH+d=xoqW$Cbx{9Iw+GE+TudAvW zHK4%iS~92h)UXLY6CVCVm;~E1GQC=;r-pVUmHUMC{Mi0`pE>Nh`I`yW-Nz0n;IA>A zF|TUW#DXCu%Xw*miifzBMW+ztUl|7(4PCv*eauWa0a=mY5N@gg9nO1>BoXf;;=Go^xUA91oe1@l^-;;x=q^D z?txdmg{GEUp?A*z!cKEqYrU7g_>Gxg?N0AWM^~iF!-`R-id1<~WoqNvBCAq)k^ckJ zQ}&31HNzhQvE5EMSi-GvfHbhjH9( zh4B2j*WFV^M~|j2IDIp=5{HB1&?QBWd~Ng(z_>>{&9lo57Wl#$f{$F+m?10Q3x`6JD;S*ot$x?MV2{;sIP??uQ zDk%PF)8M@T2|3_>@)-(w%2<_o($ijdh35 zX=O?L55AYgPkq)suZ+qz#7-wPUUn+ZKNIwZt`C^(wz~L?Hy3kXPQK}uZx|qlw^hEq z2yMTkB)s<5oymL?($p&qqv+VvL3E?i%Ci*DejFTpwC9A&sgIUk;klvjDTiYrQMZV> zIJA=d&eEepB_qHg`tntdZ4_1SRWp5@^9c=FajxB-PL6J;igY^bQ>iu?{vyJ*T(>P6 z&R8PekxVfO{BD-Zg&adqzBIY0cJ(HfduqPrHeL#zNzQAFKkjDz{}ff@T7Fe(#$vT4 z()P(bu)fKc zc=A5=e`##5F^W9M*v_20j-A6{bQL5p(COB>^7kalNnyd=?yqzBZ5t-fcHk^^XZUp^E1QvT_DR|s%ml9%&@i=oUpiSpVz(XyF{E`6i+UUIzrAEB5#Ee z?Hy{#3gKw+%+q^rujj61^v?_3i_wspYlm&%5#&sw!lBL`*TvOC><}FIA}HCAd;Y~voYfDYIysHl(`x6=>m8X5BWL{`6wSn*{#qmGFH6I& zswVXF4s>TKRzlDZ&aq!(VEdDDg!Sn5gbtxc0o#b6oO&SzmM7%O>uc|!0ud#Ui!D7* zuH`|da>>Hx(4A&1k^FjvzsRqn+em&rOhkghyS5M3oI9PK{ry*J$ZdRbJa;jn4I-X% z^73#_NpuCIQ(d!9Pcb*ps&z3fJn`dIH9jGCJ`WzNrZ zYr7HNV_KWI0qi<5UcbAe^g&i&UR2=cA9c_B+EIEDL4OAAkg83;$CC@RzB9FXU3>v* z`%r?(2HT5Bx+fWM(7wUH*{uVA;yPGE><-Y3uX2w={3Et1eN_V?#Q{^skG|Cs)E+(-XS`rGv%LdDkg zw+H#uM1SkX`^Xv*1v*t6>TmfUE3xd}lc3=L)!){lzis}7SbO0Iq5k#|p+JATj-YoL z-rz%C&eh+R`O0?%ASc_9IET>ioto-z!%2(eRN&73|D^u*1ha^@+t?=h+l=>3{_$6K zSWI8YKO)}WcB0)a^|v=W{cqCW_VLt7U!u)8{q1!^f&TUs!BBtOO07?K`WdGsP4u^S zl+e2V_VNcN;>^u@6a8&Q_@OoZ?V?d@)8D!rpQFE>W0BVMw|dEhf33gmvzUsH`Zx8r z_c}zJ{-4#~cG*_bizet?{q5n;o9J(c!i^`{*eNBne>8Rw-&>OK|0(_Lfmi>R>Tkb& zsuA>ev=rA>(+F)#SJ6r55)AdXw+w6wDSxpZJ(x0^ySNrj7FeLaz4`LLr@#I1MRt(61zxDXUAat@E{_V_me3Ziz_<$h&**P^ z8tzZu?4CE;y5~hg>$}F&kq;9K^|$9=LG};%G?Fq|{cXi3s^6`^Is#rqXiYN(_(Wj} z^tbcCg#LEb9r`K0ksogl@S6U1m*F}DXjh-T3AK+pgDQ0sqW>oSja&ctLn~!3OJ)BZ)-Thv0N08(d}Xk}Uqy0u z{~!l`M+|SkNBL`A-061(fqkyP*Rwz@6-t+iZT;8K>WuXl5xQ;XKu??F#{EO2Me-=n z(}uDHqJL&q+8P}G_yjk|Omyy8LZa{}f7d|FUB2)JG3JKP0iFg-sk4vlsdDr-z=p<)K zA;rDdU{@N0%Uz|4PFn^P7Fg;bRMsivjr~6neJk zkG_x7_e^ZZkHin}LFTiKA7&HUrWrrnLYm)b2AtSBB0#$Mw_Err8H>}aug&Nd`#=fO z4OfbU(Goh1M;6uHyYID7K{T^>JbAm|Qi~)o^1ZKK55CT^_Q#WZM4gi^tU0`imbfHq z<@=g1JoY6)P#PO{gd!nV^)W7Vp}_l~yh> z6Z3qQZX2Ff@3F)4T4`-~Gwm!J)(i@&&n=e;YUok1CH%nm0s*oF@KTfykrOEtib zm92ND)J#d|8P5cUBHr$m&54}Om z-^wh3AuF{o2Rc6TuXXs^8@?yV=kVP`=+LO=|| zb_6TawTrt}mSEVeg@Cq~#3=~Xi^*2=&6(dgMd47RufDn6AHHcfzwz;k;gzYCEw->v z@0t}Xp*(S((TEjEx_F}&N_{S8G|yufdn_t6>N7jll}w4P>e1tHe`n z5)4)112qc-D)EOD30+(3~w~w#vX5 zDR&s4QPtU?-k%1XHIA3iN8@c`EWX@At+>gyv<@>+g0`h|wBp+FYte|gkS`Zl<^U5( z$x)Kl_oYqwkyMP7BU?B7>zKr?b}|baB>Zdb^84{2I4_)|51&mc`f+o6=U`z$|9MMX z`5v-rs*RS}glczbYPYsSh7*>Cray z&!Ta9d^NgP-t(F}#KvbIsW~&~)L;X8#e7Y>9aZH_SuqB`bn!PNdGE8++-%y_q1?{D zXe2lkQ`e!)VD5cJJIvwS8&8IhqB2!Kt}o7zb*ELT#T-1ol{xs3+&Q>nHpEAodMqP3 zX~TYV#%3BfSJAP~&jL;KYwd&6l=IC$uDjcN5Ybr1^PHE$%f0;$(`iz!GM)b4OF89`7?B66611u@Gj+ z;$+ELgw8aC3thESu|tIKVK=KA>$bM~yMyn4tho8t{|gkEfAReiE25>|=ckl06YFA4 zd2TK$oYCeULhW}I3&*Y?h~%hBeQb|sE%17;pzCe5k`;OTsc(#pvuS$=Y2~u41Pkt@ zrFAL;XS#5>FlWjpW1UME?@h$4mRombVJ*E325PQN;~0bF!Uvyfs!jjt;{c%ww03Pe zp3ETR{!27!4tLaVxHfUdT`4s%oa*v@e6(AFv05nKeD*cfJ$0{&(|XJaS-m}>hv783 zXT@wdY^af|Y~3eC(86P;8RL%TN7#@*l2iX!Buz!prV8uMjsrHbBIbb2ji$Q@rJ9Y7 zi&WMpC|p$OlUG!wX%YO{gcdY|KTPnCI`~Hoz9xbnNNA>O!ma{K3(OJ3e>9+l)>X3< z&cx2L>{|nwHU?df&{a`!(BTV2nLp5wl&yZENy{g`%5Zfy0Gc1XZ|xMxu~t&-Cs%x?p8K*0bUM{?1U;0{U9Q3VsIE7l z&qfCl>_~L(frLL){MFl;SdA610k|AVet4#P-ZhRS(Bpk#{+=pBEZ_`E&CdaZia+>t zTDiq}<-k8nUmfO*KQX@G#3^eq)zzSwdPmL;W;498%teUvc_VLNn1~Ou$tKymea}!e zgL8T?6IrL^AkAIf_*U^WX!2&tBs-fP)jGW+KW2d_?bI$IIPR-3;dMI6A{(mMq$@#Z z?2~taMFZ8WI8~!+dv?@yrAp3g4NaZ;WB$<8gwHrwed}b9%4utI2Jqe}5O9a`cH%dA1}~{t^QO)Q?+LI$>2!2OdO%*8&P8VuuTI*log&T|efNDnJWy*=gg%#;Njn0nt9U$yO6(N6h< zSrzAZRh%)!HimhrDqWc$PhJN~3BXl$F6uQ?$#68koJNS8!NJGB(73=G+#m}|oXL)v zbN&fQ9i7L{s`q$dtJkq?Ur)LR`nlK0Su`CG_g~`6iPLDvLdKlCa-_FvBRziquKqFE zd^+`m{GzH%Kuy}>-MiR^AN>@s?@ta!#L$Hra=$^LH>q+%>=QyecZa&E*h@w>TZ&{4 zI`{cXr_(pDOs|K--cUPTPshH(b82!dSJ3=qt*F%U_$`|z8yXYjE_S?iil7)*7{5j+ z*tuG_yON;`YVKaKqZf zi+_uo?s`~#UYi-x3ushTNpgB_&?} zm?G%|H7I|2j*o8>=hlkGV)}Tdl=R8@wdZ*sKCKz4+eiC_QmC}E$)IUKbDLQl@)k1A zdmK0fP`Werp9@w=_@oj=nf+d!v{lL63EOB-j#qtoFferEJul>^xvSb{+8tCfcj5=$ z8Q`$18H?e+s`Tky8z<|&1y!FVM)8h)1yVk3TWa1aNZk0aceAR;0)J4SIgPiYp^af& zdGA45Nu-fbm-I`1dTw&`Pe=sFd?RqBC zdwV}WDI&D%Y3umr^UtA`skd}j=7;dE41~9(&=(+zCr{P5D2)w)fJiQyVRMLg0(G=0 znd#vqKuo?=rD||p$=In%jV>}l%LZsw`ku*TvsRYCeZd zSh40UZi;x_0Io=P>4~?>DSn$KJu`rw8Ek0RQ5~5yf~VXQ_G;R63bnho)l`((rgLqr zy00qbxrt()vo}Zm_qg}Stf2q?Zt{M3L3+P})Z8f_XQs?W-nUb4thuKsk=g^Vf~QIe z+0Qxy&!DN#>58@#SfK~#=QsW}cRw+_Ki;(TkbkH*qQ&IYP)e94^k$j?siE|Ccu9h7 zzP}HjVQ`=G?lQ^Q^ywW11L@=M5*5`nz$TgbwOa~O@&l&Ylo9A9;Q=w#jifbx!gxLs zp}?YR3qEQ*zlj+0pWtJ2{s`X-=4oJa`Kni~(WdZFzAIu72@UITc%0TR7$h(0M>A-< zo%op8MT<2e!zd}9oT5%D?e>^O&bCPLITqPoVCmQqs!+)k8=2{yf4GxO^#@W!V#-tb zfP-QOV)810b)`6LDhkl^$}gJ%o0qWaZs0-3u{>Jm7LZr+0x0Ys-guWYo_v(#s&qa# z70_@9S8~ZmPqMMQNFmbWx_bL)hFr%^}B;?hW=5+sS{%_XOCEjYV zLz5JiGu`sLoMhwemEIwrLax+v{t}YHg8hF2*6R2V?o<9YyNI%wC@%PNrYf55_IN3+ zA^%vS1d=@`E5JX6HI(&_Wl0C`s+rjtWA_b7#JlYhgpNd+4%_R}&Q`#v3y;BvQ~Zem zdH0~;{%Xd#vVM0_P;j`Ig>`9yo0LwjV>IL-!9BQq?ydt1>9P$0b&T7@g-8Wo?`fCN z3y%mEMe^hIwftg`{0M22&{hzNMz3bC{$3@}f_VLH2HI(cf$BaW&+tk~j3@i5e2~6k z5QSG5gk5Cm$%?K?Rl5naJYFA@V1sVuMjz_bwKDZj)h*ws5ozi{Fbl~q-J-F~AYAF?1z)l)auKC`3kD}Yj+coLj?6MVRw7@)n-EgHCzjPY? zX9~qY3U;^BPEeOJf(sv_Qz(p%pyxpptYQ)=`d`~gIa9$E#<990jBjMLDa*jx#*Ffo z;o<lSI8H9H2 zavVdmaTnAahvKIR!kB)r&DuI`Kr6QlTA78lou~>#`6BH^UGTi*MWlO~i)}X_#GjbB zMf{1nE#pr#wBf$jPl@eUQ@!|QdaM}>+ci%iblWWV3h6_UfIF=dcw33JwMK?jDs_L)TPZT0d=r*P#|H3q%Fj&8H+IO&E1PUz?jJWhv1~z>M|*;wDXteIex85KP+tMLGk2Sh&AsNa8R97_k>GXLJW&| zb39C?YvD+FxALf1^EQLr+nWpldvfiq8GFVr`x}x%Hjo|+cPr&`Dpr|Bv(K1jTba^} zzq+AkUyrA`_Eb%2;T6SFq2!E@7iHj`HS5IdPlIeMfs2NuPeg4+{t)S<00U1kJAr7r zl#)!@(dEpcRKmUGn~rs-Wr>pK;`KvqaEqVpX&h2!SjsvP!>q%5+@_ob3`7O&9#&+7 z@i#ze2=1AOda{2PQ&Kb^!yoP7k9C{#$7Y&BGKF<)(u+TS)cB+sG?U9Ibo+16A>a?@ zN1IGw-;XfBfiWM99hzgTR*p@lXK2B)@Jy?3|LAuX*r{&b3L@a1~))#+7_478rKd|Q= zr{rm~rR{m2-d8IU8{0 zlxK3t-XEK1X-N=^Nn&R_E-TYkcQecx_6@NZp?mwvy0Wm(>#}FYmZM>@z_k8haWg`T zB_`=ACh4c|{tZtQEDGoRYqgO1G@*4>wN!)=p*^$%5<>?%cys;g4p{mYK6N)^xN7=9|YM1RW`>hEeED9MyFpKN@%p~?!0 z0VKYR?6z8wVh^DkvV%jdtub~97zY;eUuD7w<%`P?5T-q?BXf8&*z0SN{g&MMM&m!A zE=On&aTlQzK~`v}6!EP;&I&d8BzV}LwLTvL&;aUKgX%A)ba)fl!^;WtEf?A2-8mZS zO@9W5%WJH2{cm#Gr}H;K{lfD(Bm55yKz*I(H8KFr{=bMVDeRBgxpo2q1bbxcibpiQ z_eC9d<9i!Ik2V?K>yaV@(pDy$3@`Z(w|x5M@_mJ>HKR$sMWiU-auXif>KdgG{o69$m(Bn<=9TVg`r%Ap?ET6u)d;;R-w|x5M>hTPrIZg8266AX# zn@{#FNo=zuF7SI%2{*4~9y5hDwE5=1v;&4}&U#4X8XXlkl+fKxit8N|m!LT0)fEC| zJ$EKQb{J<4@(qc$kOb2uPaSz1_H#giK=3oG~eOk=ia zof}WSW8QOPZFhu@B?DMw&je^l`UEywKIJ@|MJ8fe;)! z^cr6lC7v0T5GdEM%g5gX6PuIu4-=BcQI5vZ)2b>j5Bn-L9ZT+@(g%{^Gg~Luf*`eW zNa{!LhUGHK@LUo}!NMxLY++&b8LBkvpLp^-G6r+dOr@pXahAL%ztXV`Y#^?44Ddfe8&NKNf~2MJc6MP+m~fA!3hA z*(b1XAZel{_&(ERMaV9_O+Ilq;9KLszE-c#Zw?v$WkL&^aNvWaXrL@WHnA_Z#(RKA zNY%St{T{fQt1S6vJbCZ;#+{wF7snkS%iAm9MR|QzKW2M-Lfn>#y>P$ia5gvx8XZOw z%1|B}$^e3{kKmf}A*s($UYZkLgz)=OlSIi!@nnBj?2WymVh?l04vLB`cf}5~V%OXh z7W)~Y%UrRq5^TJfs_kqr9}w+tRhvub03!vbl2N0m;_W2a(>ytyMHhv3Apdp^>(atT zD#Tt8yePxU?{q*o&bBuG)beaKR;9qEY9og|m!-@F?4cO!^Wo3|%$}W6a_*Rt0nNdVD_ z>DU3p5K*P})7v|1Q6QzBuSF9Y$0D_O+IB$j4j>R-e{Of7V{IWlxR)kX9;BPH^zuZi zumhj*hbS~t%6|Kcib#I=&6+hhet$P|mY;3|-c0eGj;Xw(ZpMm?ts04kM!CYvXgoM4Y4zuQh1FQg0~E(<)Y58* zPyJ2PD<46^2$zuTIhg=JHKf%L1jwm+{!rZGnN>|&5NH6+@7w^>s%{wIh!BCcrb%Ncbt^b1as@dKUKS5q?Y&FDgB6LVo#FPFl#KKvHoWaeXGRFH@Zsn_OE~+D50~JFc&0yS_yX(dZB5nr~Zi&)Yjhqq_CJ1f@1pm z<6JTK-=&5e0j6!Nm~ukfH7#cAKT%9DGxoNQbM);Xsg{Wirhq0h4E`Uk4MoB0gf4WV z;3 zVgJhiJJZ;Z^dwX)%vBp$WQ^_J1lhno2W+1|Jpt8GnyKh23{uWZ=p#w6YFK5ZR9HXyN6eXkpvYM%eZF z@p?G4jdxS4D-BC{2Qm>k5Mhp#sR7ZWNjZq>t zefnon#foQGpxXqf^GsUh$>i-#*+CObousaJcZ1D%T`5`C0O=zQv1d`Ko!)W>p-Wtg zDEty)eO_;sWiDqNS3DyNP~+vf6Jz5AHecs1lc}QbyKcB`x(Ik+R9rEkaTG^cTN3oI zLAA_UhzDD2VAn)?EDAu8J=DtfOSzShNPX+Si&maJ-%v4}*`v?v6^8{LDKGf)I!!>C zk?yV_hC*VfyG3E3w*_#6`y8CkovhkDq)swLqsV)gErS)Lo6N60PTTw+U4!(v;CVwC z9^7#6b7o>M-mYeiV@2`{9ncUvn$W~zYt|rw+$=8VC;k60_bzZ&Pv8IlbU9t5&P1a^ zOc@lSFf^uNMx`^%P*QS_NbX@Gml)=pbi6x++;6#j5FfV>6%}%8a{c7;k-HGR-=;)- zilTnc*V^xMnJFLspYQkg|NnbDnzQ$Q@4fckYp=cb+H0-7cfrw$q{`lyCFkcdBIqA> z`gXm$ARu8t_9FE+1Jaeytqw?Yg8qtWVqdR<1yo8h_@yry%&+psPl(kI8teKsXoBk& zItMiK-k@=Oa%v>{{)b2qD{fdI4by~)ba$ZF`_UVa7`+{D;s;CS<^1>`s|mK<@Z@>& zqs&oTy`n9M+QWxJQiQ{N|D2ae{^JS(aRbly!pmed1s(igM?ZZxob?} zB|0V6D(93~r8lqW89*Zw&YL7s!RNrMovIXsnD}JiZ&+kNXnQn%E&{GR9Lilo>@J=z zY6HlJaNBp;78oT5v(x=dqOy0fW5e59me7eJG+hsId&UtETP*o2UCbBr==*NkrOG7%-@Q@SkmtJixO~7V`Zk3(81cZEZxbvq|2bL+(7THL~nuYb0 zb>y0D+>OZtDIoD{gQ+X({j*&O+(nY(ly40AynN@jg*RRFnr<+!k_A|^__ej_evl-W z*>W*}QSSUn8(}9yEo!Yx&(|(Od?HIzcDBXWz@^EB1EzMuZgZyLFsR{@2|V*Wj#GBh zwZ@W%jMW_z+s9IefIfJAG#dX>U@>@-zI7&jGmJW}jWyd>D*rI@bH{M!@%g+l-3IEC zHR13+UP~@b*cM}4_+7@hkp^%@O?Ui8VLd}tQch{(nO4J9RGM2W3U6CT<8vH-LVvUc z(bQ)Wth+&SPMb%}*+ZPZbaQ53ZX9-p3ADz73u1M+#= z!&#U24}!JVeO*|UoL4kmSjMdS5WiK)DMe2xo_e~IrQ>=Pjq5!Y6WGn^xr(Qk)03#& z*34+UIR-+}C)#@HYBm7E?HsqF`Ps!YXiXFo$UtfcO*zX=#aYfahYgEif0;v}UFncr zk5Cyn3@-))3{J40AqF^yv1Yrnh8u$V+#-#)bWh|0jRTnLU%35f+x5qGBfLePBG_>F)GBXi7rTk1kzI<_+8L(|Pod*p#J^q8 zZpuKrl+Y}oWv($ifdn@pvIl>ThFK{MejYN=oKrzMFd1IWI|SV4rOhToEj=?Xin{rj zg@XPVxqV(jqtu*X5hc_>o2oM>gA!rzMB-U9vy?BwPOf=pfy_=t+IBd`!ckO5( z;8h5d6Upj7@t%!SrJk}I%*SdhASw%}Q?>$>%-bapZbJH#YHtW^8@1n$7KtG}H-~59 z6KGbLqhP~T$&ag&ADE&9rCAl!#KaIYp3MQ3Dz_5DC2ek1dD5$yiRvzjR+<%fn0PrF zOBtwJ(jceD++C?&3Nf#PF(x(NxYJhXZG{?*5~Ikw@`+gs0{|!@S!NO|)hAuGXnt41c;IYGts(GzKHA`Gp9phNjTK;*b<@ zO&H=-WJo7TMTSY_elbyZ`jx{iBnI}}Qt};fRCP)NlQ~hNu;yh@j`$2C=zWW(?kCAK zBY2U}Gj8g_3mzmE43I+TKYX`jH$%bn##$vs(~SKg3rF7HB7=LV85g7~Hu&x;Wqvie!cn-;6k-|3 zdg!wf8<(o53^!HvvH2IUaAxY5#p02!@A_<5>t}E}@k*Qw!hy$#hY~h~0(lS#4gi$@ z(-af9qVa1rhcdi16*=%G4ayH!rHA?hLQ8YG^s^)c!$U>Y2LEA>RG8!jd&Uuvk!^Su zgr9$_Q_h64*ZW>t)9ysCXnY#G(S}Kt-cU!$#)d?r?waEr*vYk&1KX}5y>i%R}$^{yAWETLJ?lE-H8aKdUg z@3p!R*f+O9+;T$yt5)Oj9&mR7ppQ)71<)_Elk7=91kRR{HvSVc*P9;$95wW&@Ir42 z@{A)d{>AGzXbk@pyKFZ95tm;5P5z29k`cvYwxz}Wca>y;a_S5A&GH7DpQTOWve|}n z*}e~O{9{T7v9022CZmosL>TyBgqsZaTrWB~jOrdSIw>Z!3v>dJY)3Ho01i-<{M^P6 z1*%cAU&E;jN5V!6@PWc=Uewv!vG+p_%0NWxk_P?WEN6DD{B@hdy*_Bp&&6Vl- z_ZgwluEh%o2A73pHIw|JuYL(py#hS_gx-Vu!s9A_5 z-{KV3d%TL=PglRxRCxJ`cP~4Or?#t6Rz>4WkO-Mf`E_fXo5&cA-{n%e)U9n{h=|62 zb}5B*YjFjK4x{nSFg(|-jZ}N1dU9Zv2=A`+saxC1DcZ6 zM1jSEr-NIE;@R4PQ*zO3Ybbz445KwOyC<8zCaNQe+ZD;SeTqd7 zPPe@()ApO|Y~*ig+jQg~Zqjxgr97R?e>(F2X4>Fr7LD%<1Pcgpv>lIBwH?a=Ekl@R zWR_@T7;VVBPeuLUend6G59ybGmC3;)l{J4*^6?K{e5~SF(g%;?x2PgHc$|ZJ08m-q z3t1?hz6r4}dG`_u@XX#m4H5!hSfp5T9Cs}hA2D6LGsX_5{fw;@9G6e(`WcqmkJO*G zv{d;g^qgs_F)|7CN8Rj8PlDHMBY*%Y?$nt?k!*4tb2;~=66@LBuIdjt{?#u>8zld& zBlQ$euoui!{3ji6*(Clx%b@%2^g~<1;&bDlWb(W34`t%c@2qDiX7vm%9}7= z^6$0D{DNToH@FPJ8@u#I^{i`^Q%^9`at(yA8Zma@zem2HgwIYN)%d&Jg=gy&<}Z8i z?b7Qs_%8>$hvSh>KbdqLPd_4!_vA`_@~bTWtASlpf@Xg=W3*#xO!+JhnH_c0vK#H{rln` zd4sK{PYCrel8?MXuwfd2Z>NyoDr})$yT|!=EB72(Dy`gog!;O2QwRn}u^;!ZqzvNz z_rv)-lu1`tTYCA7~8}qZuJF82e+a)skXck;M7p?0zkh|~?F@O0b#%MrM`kX*;2BjFR zIBiqsz6}q>uk?RNY0kYGluNx+TF_O)5Wh*8N((NvF~KHiqm&kXu<2tSWa0LXZZkfj zC-S=Zw?Pfy^7iIUaXDI>GbE<}O$o;K^$o-NFd*rb}go?YX`;mhQ=H85fPIh0C zyn>0In6Y;ly&F1?E0Zv6OGMGE_!NF`#XlDm=^##o4S^nKj95JV@#UQ@A zBov@T6f(bmMCwDe(YS7a(@FXC0r`oT0d+v0hK2{^!)J@jE@#sE-(Box<0%wpQhN?; z&7lJMfwipcNacGe%%|&F8aVH`%;?EqhoC9!=$tQ<7td2Ciw99c`@r8Pun#N;GM`R! zpLPj9eWg$1DWwyyyQk?VW5jGU-yb*~sDF9Bx1pl{X1-5Q19Rv5VgvLS=KJc4j7HaN z=>BK({Y`TI@6Y$gsQ6Fk`%tR>zdGOZu5L8nd(o)Oe4nC7;;+p2hoKAR`y=a{;&n0w$o0~@yY%<>mljIeg z$Y19Bd8kCZ;(O6`whxV6%VI`=6n0`+4+8v`?O#9X;sZ8 z=exb9x<2!sDoV5TB7fbOjVJy4EQQ%c{xV|eMSe?aizfcY=wugp)b+$RvB)39hj5Xv zQ!8!K4^?7mmsn zH`z{JHjYL90$Y^IRLBrTI(e}+USzHGFgxy!!U zbrxOH0zkzHFOQj;S^uy0D`=HwLU5@q`)>UJr(qctWM=JZFv|JFJskoC1 zg2&?)zA@W_trK= z`xs@;$^$2nufps6pEMw$JkXVbk_U7lmA@;+8uN!@H`wuGvH9Ic&W%s6U7?F zA(85AV0}cg=|_d4fXD$Rrnc|Lk5_QGBFN(?8@=LUB7WhE#tufR+E*YZrux)i2Q8Kw zbU>eKpbN}@t=e5eqi(}UQJ1UjvtOGmOExA0JI08+RlOl?XPZDp*x*X}arrjN66YuAi zBE#X@JIq@ny1bLgS&4*fnv$s&IgXu!RDx0;xH;O2>UV22rb!&Oe8o*b?+opJLYIoHVh@6-#+;EnW(QpZ(vWd^qnrMC{R_*al~lLUU* z!Cdh^m z=n@16yT*yxK1=p_O65!w0Q@He+_kgHAL++zj`{~7*qzW9Sbmti+9G=%7wsosDZ zk?C1P0EIyZi(({`0)+x|2Y8Fl#k||48mub$DH<#uI~Bj(#W!ZD>B_+VrdeLt+B!5(#D7rX-~uytmaS?jd!w-xwo4n z@cg5}!^}3wpD#jnPMbit-w7``T;!VwE=$V?wc>=Y1gG#Z?PsIc2<$j;k(yt3iJTOs zWg1Vv^P2H!gG;|OolatKp7NI#%&|_~tWJ~`bXzTQD|U38=B7Il&2ZC}qG!MC9HX}V zDchLZK4L;-nCUBi0r@t$f@Kw=mv%C0n@7Q_WJ7QxlbnA0pPU`?(=XlrYNh|t<<|Lz zkHR~&&W6DV86zEAxY%U<;-B_ohT5^X=V>;2^mmmYmE|DCojN|!?Pn&M4!OlmmyJK6 zCbo{AHu!y?w0f*nr6IlNp4$iA{#jhPWiw!WyPOl*u-@etimTstT93RX#?@;Heb+P1KmXC443LSa!TrX}TalzLph&n9Nq)cc*7wqo;dqVtN*`o(`m z?ZzV6|14|2P1iPJeO_dS+UFHFFX6`q^h4vry}#^7f(A6HxCWHx4N%CKPYF%GJXW%x zrmfvZqAgfu>e8Y@o}WJb46E4~^^OK9(s@;y3g$o?I>PBFV2{T|0reYcNX+xGT&+Xk zYD^Nmr-N$MOwqZwWAgs{cp)ZvD&F=s0Ot_u=>}jV!C-}>-g$)S>~QtXI@{J!@80Ro z&NfOkV^ZXVAJgr24;&PKe*(o^+s}V2OTF@q-ngmD{Kql>ZjyR;x5j>o0R5RY_9a4d zd!$G4A!0$9+M6o7bOP)6veVrJxRQ$8Y7hpK`D<%bZ$hmc2DcJ~N2ti(lkJG;sv9&b zS=5HPNKNpL!v`x|abw zB6qK>>_n#PK?uTfGKUru<_?pJtT z!S$+K*-o;ym%TrVkxdn}-$y^iTk+#}aMjv*#fb)GR~0babR=}TgR=Hy60cQddaC*k z5GqR_7uVeGSOwbdXksUa;(ZLvQc5%!nAZu#0pn)x6M{6znq3xWp8G2SruA)0Cb4+U zKz{wJPqP_3o^#NVS>M}eUPxw*<{qaqn%k3!b6Q(w8?prr3BHzPp6SFuKXIOrcYLN5 z0|`xXo#{<5cf!F$w}1;m(QRj zu6aWVJ(QuBebvG@HAG(7u0VhgiuN`_=*^EGaqt=*<4gkt&rL=pMx7#fJ&%LcYSZ*? z_teYq>(6{dZQmVIuXhh|XV0PpzdH${E97YS5av%n zFzdZolY?&74}e9$QY0hVR4wlkrc4oahvMf)T43qwia=CMB1La2`J6c#txS6mGmElF?cqir#HRxLRh6(=lUIBh_^A-y3aI z_|6ww2a$A=pYWFg7Yez}9_e@NrCpoLz*+kvG!aoLZrq6gY zy9JTtJB;TvsjlI9DpuTww=4cwTKVuDCbIg-Em}{(0rwpcI&>EiO5{|6O;nyokmMDd z&0o0q_E(CF4<+LFe`5Ux6X=5bB_O0CHyGFoz8zv#$^P@U!6m8!Nt&mzlgQgWami?h>k#i!C=#zTh3vvYr#jYb=Q$*3Xtt< z$pvrujf9MJjLqp%EQC$P;{}0aX#X5nLCrt`&lBf2u_O4zx>nXl_1w!W$N| zhMu>~*3iB9s5P|V1QyGK)G#k{r2Et*{Ip1)W>7BI9+KmKrF%bZ(t0QKl>UR#Y<_E6 z+oo{*S-RSS3(Q%_-D#`r&4b%ZOy+`jZZxv{GKnHrWo~%tVxKp4>k#K-R3VCi93^6? z=j;9Aw{#32CB!b~B>p(GCmOed1f`KX6iIApSCM2)rJcDdE5n_m@n7J-{@hV8U9*uQ z3(Nu}D%8@B(Q6yph}7()XU1Imik}K|b003gcx`a_@H*xkZ@LDEI^HzPdWfDw*KOJc z@Hv5V?Yxdks=agiXeyVZpwXAoNCTGDGalh+jfgmMnif*5esRF@>ckE6`|+{z134v#W|FS4AhkO1&|z zH>`V)lWSGpnTy>8;xX_1#``daQaMwX6e7FSo~HQ(3PSlH{+zBr^IkBn?-jQl0uyLr ztP^5F<;iKnk=K6oQmCgS#&L^ht?Kaf$1fHshb8Ouhg|M*4mm{Qa+SxmMA~_l!$zm} z@H`Y1J_X!p{4{mFG_ut6jZJWj&>T$d;D|#G=TCHWk7wmLwZ{V+ zw%eHBoI599%st3Q6hA`rHQv-(+F_?werJ?Izj+&e%KJ->qav^UmtPypS7j8@S9#N; z*(>d6=7OIoszZEli*gD>M|!&zEx%#|hb#o@MnFM6&Yv4Vz`)-=q^3eqQ?vAw9not( zWL+qEJ37Uu-yGB69z@hd?yQSEwcUZ50UA#`AJdCaRY~tvBV?Xmstn$dJtb@C3SCaK z;Y8u@c$CqU)z9U2A|xw&9A(Mgr%CqJBXhIgAa$8#-=FN&C9|i4wX`Q0ifBH+K(%@P zwa41X*v;7uj36|nthO@ia(fenlOsXHVf-JAcJS@kJL_XSp?uBP8t{^Z(bUIA^oNmG z&F}Q0p0ObUU}Byh=SKHWhn^d zK>u9Z7rh#MZE0zL3(gas31bhsF*L?MC4&STtfE@Fn3L~!<@=1Jkk201C741|2tT|n z_w8t^2WvpxRe+JOqIy4?`xdssMw&FQy7zwfcc0<6q+@d|f2_gtLxz1j`LYmsE5L#OT(sM-St`e`3k1I6@tk^)lXNhMa zX|xZnL)|EE>%*qC3GTPtwG=d-&{L>j{ix^Q;~y|D^#+HHBe?ct??(8@sc)L<%ZWdw zcy$T4|No}>y|M0WOSt^y9sDm&F_lU~7s=12MT3XW!sNmD}I^?Qk;Ls-#GKINEcV=L}aL-U+EXCwYU*p zq%AF9`eeRr!xw3*AHb15>(}3KYx)cm?OSYAk9ZQW>0rwzb)-L8ybXvu3!-x@8c&iy z9b-QEWj~&bgh=Pw_(vWo8PX&i-W{iL(%+;aBTv-Ww4&wYB((hS9(ntLrBLt#Q*V68YHO~_2(`G6;{&ArWmUdv${p03Gi9!$Rz@hhPDSGZ%PkduF-jGu0Pcq8d_vP~ zcvzkyN2$_dB_AK=AYiD0O1P*$75ST$97c{)tjQ&W4oWwfvfWhnXweY&TjKcS?{cC4}?aM~?U>7%f2_3+CbIb@d(CT=uwK2#SxD6FT- z)mC59;3t9p(o08iK)2BIURUfPGv7cWKeb-#_Xu`Z!DVK_5FF&Q=XYDf4%} zSUT9td!9A1>4DUDgHv3kcN`}a9t?aodxZKBTIf*NRh8=b^#2Ge*wz6WW`LSeX1I~$ zvO|01ZRuLSh+r^Qy}p3i5nKZj=xz@ypl@#QW+~)qzFP%8b#rIkv1;H9QpQ>XuO)Q6 z%QivTW-6N(x&K4M!zs)(;i215D(d8j=~;uIw_ROD)r9JR;F$Pc0C1NX zWRpG0le*hyB(yP;djdD>j2#wkz=|aJdZ}Od9P@5eE)=LarpxGg^`uZ0gO3)kB zB|2+J=j1zeUtV6*wf5Ki@vUknY?U{@gO{35Ih{n8Gfd38(`?>e*<6}hRkDsd9hB_M z!qPEHMn*l~vf9ya{8VehbEdG$92>RcOBE`ZOz4Z3cu1AZkH%$Kce1cIZk%bEwy@2^ zWo_6Tv?eIiP-ivXO{#d*(hwTg%l!8!T{o2!TSKP^GYj8$2<5hO{k~!YC&5FbOs)#a zHt8>u&GvMD!qs3qh*oV`?=4; zJ$F-%$oc3ZP>G|`7QnAA`JMYrgj($>b8cO|hy}JPX>U@;yyu>=96b4B8e`o80k-+9 zbpNGWY%v*j6ttNtI}~9W-?}gF6D-dCV_GGO4>hkEUkE65J`Cl2u*84{vW`nOzN8|THUA5~v zMz8A6iVw3{AxqKdPPfFGE!waIY(7f$m_sLR!;hIm^C`foj#EgmA%Bs<2sN*|xQSCf zrY)rA9P@9=D4=B#_jaZx6#8RD+uS&$lWTf&#>%IawCmj8C`0!t$g5RrqXE z$0Nx2!+UJ_-3uqtYd!@rb^e~XqD*N|L9=I0qdE>II&IuEM$J;U3IJO4P=BTrWN`pA4j6QGLc^=FRK?5V>$Nk(#6Kf;Kr zGc15)8zPB4;lNzh0p_K~dMm9-lL!Trq2 zkFa9tJ2)BQcB-h4R01Wi2JJ!Uo4tj}NEZX$z9T=}f1pUJ>{GPA+ zp=Vt+-BgXbL^W5qYWC}r#;|O-RMV9NtLA-Mq{^NhKsDFrRP&-+e@m>IWe4@hTWQt2 zMW~~@OKldx032%n=xi}kPv^}22^P&ffpEEXD09N&IE!W;Vvw`ROHbk)a7HSwv)A`g3xM_pZ?5I8slE5R$bIx2_NZLv;(8{eM*;Vu*pulQji z{*5=Y4Q%fup&y5-?RS&Bm9;%VsOye2MStcf4d5q}7`z1HrI2Y^9&GEzV5XHF&Bv&f ztt9lS`mH~6lt$T}D$9A~4gT|$p%Ua9@XzG=T#HYtVCSv$Q{0Ci-$xLY+`ommGZtQu zJH#qk54HVhl`JLH#|`vb1a%fDJ(6sG=aA$Tyw6{{oIrK!70)K(-+L2XzDf0RPY@Hq z|1#z*7louT>4KyAWgoed+mfIl+LUobFFXZ(1Vs+d%lvy7ej3+FnEO0ZpBK5$!7bL?vS}_y zwaYO=IUWmhY^Ewwk*%#I3lGGR#ai+hp`&Su^9`9sEV$6Y8tGtlcd&L5tdl}mI|8fm zd7ZR9-$danmP?L|c~{l)1MAvK_|yJ~s09ksfj$aUl`P>lK?1h$%c%a1MJDuYBn5;= z?otJ<>4Jat;Oy#umL`<<++>w9ndx7WX_2L4$vc&Z2ptLEt@ZA#C7~*HX3-ES+rM`b z;1~W}z?rq=Ef#9GB2PCUHCSA9Tatg#RPZO+_-?Ch;sjUK^~#kTG(iIKtOIG2t3jG@ z38`QBKURd0ZQ3^xB}1L|5-e;&S&m5Q^wB(V^(DjL^8_z=Tmi_Db?TSnsv^0EJ!(C8+Gnv<%M z<0k|-O@e3C>0)($FLstvQgtF?e#N$KO%1k7$1|(bP*O7Tth;9pd0ekXBachBl%ua~ zxG~f}=jicuj=|r1V91Fj9cOic8r)vP#kdv(dQ+2m^lr6gbS;Ckv(2M1gudNLsEZt? ziQ~18@#7Voq)4i40J=J_cn}f454LBH_qL@;z`5Gs^y5QcgR>o>D|R+GtyNS6^N(yZ z8y=v{2rJW)&%Lb7cl-Cq+uW6TkDxt3y{F|_LbSK#SwN`2%kwxv|F#3%{PFN~ZhEEa z`CO?wU@T+AWF0WUe&uT>$$Y>#lE%4De>kC?vFes{-JNo4$qfRzPjv(pd%er~%Z8|z zS`k+(q`Y%i&~U5j7ykUSk@8^Wj2u_Hnf;W7!SAZ%KV~9ar@E#LeN^u+`O7^wuk#aJ z;BdTCmB#9QQg$_5%pugv;o?4JW7TK%nTXRBt~3v@B3GK1p>|-n^=EI7tmO8{nlbF* z#Z+vo`-OktB(lSFAProuB$6Onxl4hK-2(oCr+$9o)q)%ksflO=0E6>Rr(*?uFccPidIf zc&^Zm_zP?`n*mgCvbg%TkWxA_e8A+M>l;f|J{0RjI*Fg0yub1lKdu-v_ zm(^XC5ACzREwo)4Hy5*eW))bxo=Vo0aXPj4Ne&nopgO`qTYbQY=QD71wIc8 z@Tk@)<35h*67Za=fVOlD9|%HNw)neZ*-sR4iUeJFF`{UHp7IgeM&kr{qT`y&18h9E{LADboK~nSYaP>U1k}c3546GF_sR^u#G0D$lkLQf|~f z=B8nw6$Sc4Ck=50V%Y-yniSYAEYO+){i2i1dsu{(!9c7@0XYQ;$B^PFvFM~_V(KEi zOo5S23Va9osX$u_jEqkD$rTutEl}8`z-ubN*$na*#%$@_pfYv8Y!@eCSF{* zySVs4ZC2MlLT^wVd}yO&erLI7hSrlD`ZWA*Ik>kZyla+1KN*%NLj_(_iqOY%g&!E~CljFLD(*kJI=L%B)v;5J*%9L$_IU(osgPmyC4}@7mF& zW-m)1c-`7@oV)cv!y|_`V{amCQ^nO>%u}?X{C?&Y@B@|}akcp6WEYF8skHUHf;z0` znxjllk+3~UX0Ks)xn?ha4Az5k?4xD|w1X`}!Eu&JHaueZ2M?SNy2Q{wFhqls_8W9B z0fdIcuWJR<=Um=>iRqi{kMik8b*;3Zul4hBo0u8F=OUtTOLr@S96`r-@rU%+n$vA4 z0G!8B>6Yezq32-D18==u%CNxSnT+0+()dz^IZHn^Qb7b|>Crf?0R6|V4c1cT!kJUa2?Ky~6&Qh4%|P&J_qF55oJCdmrv zm+@c7=Z}rtq&26HC~{`L=|8FC{2T*j@c-Y$|f06<$F; zSNJ_blU(6>Dm;(EIz?n1{E=lY-N7QaH{93CKbk3j1EHC&{G}>?Ddnq6mZNL84U(BH zetJPIDVRY~w(1Y-#}pv9i^x)ur2~YFqcb4O3C(sOdl7UKI3e9w?hM&d4TYwxp|PBX z>VZ?BUSm*OW}tqzcaOXm9n|*-2JgXDpNBtK`8GM_?{(!5weqi!)gkI(LT|eAH>kX> zoPM4K#L6#3Bu*o0l-a=}9jtsjQ~q>9H@Nb{RDPJsBWYRr$vNeRy7F%yD69<3l;4HW zU9S9=D!(P=4bi7$?L${TZ-_3ZY7kwaA4Bw>%pFj2iGloauXL9d6MDpfoKMiMr`EN* z)}((A$aZOkS=}S0R{qIM`I`yNaOG=NzE(2}OOchInJ$l)eW+JhhZ&_laxPhU+LzFg zgtjgM2{xeLSm{5tpVRw%;zn+omDwy) z=7&8|?zu7_5ezHH^ zQwJ9tUU#sSFd2g^ZUeC3>a#{=p1F0AQ8;g%^__WU+$Ac7s*@C0kQ*q;y9@c1_-i(&c+2Qj4e%ZK#I_inW20MM z8Ef{^hOb!H2J$*Xi5NKH~Sq1B>+2_=clzfo|TUX8HKW zTFHsi(t^%&wbJ*~GRE;-GbZdxB<7vrT-!sZCi(tes@}-Q%bZd!y9oXhTH~T|`2dJm z;|5yE-14pbrN!0Mz#(DQdUOxZ%u#h$vSL&v?Z%wNKS4+uu8G#BMsm=u0MK*U9I%%w zUZpmZ?mkonYdRw(#v0qyY@BnrA_woi;v;&1kL1eAx)u0*jOgMQiAv>`#yCb3wbt7K z`P|ng_+Dfp*r+v5mL4KO+M`Dv zEhcmgp$B>D=Xw2MYMw_NAngoRSrtG`wdo&yg=`bA#QM%}ti*|nsu%;48zsN!$~M}k zqrrBUP}tAR{R+U5em;G9cCbKk(MiRcPpe1c)XfY_EM(65%l5L)*BmbXSEgqFh|KDm zy_nFwuEp~Sdd08vHyDtXuYk9$H<(=*B^?J(J4CpVH384rcUy+P_o}Ko&1<> zt!yebBTf3KXD<$|xx6%`#v}ifiUwBf28U+!>Lc$F%3}@V?Y?AW4iRj@_`ebGisvet zDw~2jocp9SZkcldQ$?>jkc$f|eHO{r^Y`^qrCCw|4ZN`K~Jr*)L?~L&Sa0L1%D z)ayyrBfVbs5dP2#N#?Hx+DgJiFPst2GPVB zUHmnik%cCHnc0*kMv>V)@?|@VSNylg`6o0Ho}<@h3wj97u$3>*zk!l=j^|7DqR@Dc zWND9+QQ*7by((`E-2S&_H9e!(;Qqn{`mK4*mi%Q68znkn?Fv_{0fh>nJKErDA1oU zcP>+2F``^o6=s#!{$#!c4*|lEB-M3Qa!GKRYwogr)!gIA;^yN3LhBq)-i=_x-^EF6 z136AREL)~^&=cQ~nAa|&ML=J!%kHa^+_uKPX{Gxe67_XRdzobH?MdB5!?tK=L)~T zLqPS1i}1{TcZCfZ`sS)sC=#fIj|0|8<`{T#w!>=H&>&VjyYBj+XqcmPm}Md!^0G z;Be+%!r`v;sUz5^k8~t7VGA3Zwd@4E;+7;JeWu6<;#z^YIm+pOilu{#LuSWHi)R3{ zrZyyqBdn_hwIC3JXr~{eh2Nk`>KkPB%>}fp?;b)Iy85mr*lU(H9IMfvwl5JV6Ny`?61wzxoXAW68ri1(@ z1s+!cX9>_|85`P_DpU7M+vv6T@$C;R0n+bZVCU-+dvVEjv9^n1qZd{1m|n@E zXhLfD4E@!uXV)6GhNCa~b-+9z&p5}(r~{#BEB z3-FU$zNkrjP$ph{Q~{XCwRb#flwxvrdc!7^Pa-+AcZ{kRYOZ*09c60h8$U}79Hae+{RGt_dm1Fg2_pqi8>R9>| zT0LO*CtqRd}68EZB}e8m}C^N6=Zsyu&l zuAK7sn`jqVx{LaFbf$bcq32!sUMgRs@^Azze|%2)yiUfm)Zmobqc-N{zhJODGwfDc_sW9j^RVDu1HNOT-q@ zY8#ZUf08SIot1B$DZgUt9(mWf@*fZkx;xCBZrPTQ;SHS#z?vqmhXN5PN$ z$(a22uFciir`4O4@MK!$%4>5k6^ zXR6m;>YcNl)Vormi+(J zK5;)b-i&CSwNHH7>cY(%+b2HhENP+mejeZX%l3&2@70R&U)U!;9|c#H{za_mKiMZ9 zrG|`sqKj3RW1raf|Gs_V>9*h_$377k0sgUlV&*+YNzd=hMm^PjBI;f?cSDQxQ}84j z{apJ*r6@2Jxt>h*kv5=2rnNz` ze-JNFW2R)^w0)w0(*Gm-#NJ)AEeh=uU#dmeC)&bTLRS7C>=VQ8W{#xo6W=S3GAztq@f$%5xi3)Q5i7xuTvQKoyS1YvMbYRRO-Nijb1M*GRieDeui%$@wQV@dx&apO})HvQISdG&kJ) ze{7!^y#?d;|I|K_D0G7z+9wWZDN=LxiLcWv1Vcz8`^4H7*-X!8Gc~qP6lj)Z?GvlF z7lEJIF>ORRoY1;7ftL`Ga#edpCd2ENx12<$hTVx!4`h&wIz)V?GsaO z0X@9`3S?m^(h<=($3F3@eJ=Qs_L1vSesb&+V+(+jiafcku(&hrbQ7aJq3%vtU)|n~ zMcO_w2$3jlpSTj;_NMI<=VbSB{}wq0_&)^dD>oZE}BRhKUAH3DgShFn#C3Xs;G#}9_*fU_;~&$C z`lIox5WfF%I}JZ~qfV!V(P{Iev*uFq+ z@m;sEZ@(#HVsK|^6f;iKHFV09cy@6qr^RrZ-UcG9@*>-k-^mUYrTOOXvTg^hS*)Js z;IL-Hzu4dVD>^7QiQbUH)WO_in$OX(%mt0PC&s?sigw7^r1{PSxP+`{b@IDd9j*m5 zauL0=TgBqizAB4{VUtsz|>JYmk;QIoN{|D#Es4?6w~O8 zvdnIXLcgR+E669t(~2=l?u_3i2kK)~Qs$vF6p&6Q{$M)kvdlQ0Oj79fRjDBF6#vE} zMRwhVE_|uUS7Pr|Xl-T5S#6jAv68d-c`2GW3I@wtE%BlJR@6=`%!?+^0B-GN3bisk z56X{~9)z>jp;#+H2GE}tbOGK5z)c}ONSYwt&2I=%=dT^aQP3M+LLtO$K|N>E{tY<0 zq~pzK23%#yIo7~<;g(>avi_wt%329pgJ~{=harMB}YsW`m-$I4s)4yJQgO3X)a8gbSWpATC(Y zx<}r0mah7U-c0QVLXeA=60{3Uxz2A;-*>rV2fVPRa`rOjwcyBSV@}s%{4Sa$k9<|Nf^c%-4t(J#aC6*ChFSh6gMP(bgMswI} zKa#e11?TY>*580tf%gxrdBDOF@Au<{BhBm>m?nvvY>>%#qZB0mOAy_ZmzHpOVnCcnd+S0H{o zHM#w7;#$;>IUZ@XL_<5Z_<*}9&W_4w+8fLIx1BEiU`|}#M%a5YL*qq*r+be{Ze@t9i3D z{OBxJxGL`$j#0lm5bA&o2NrSYPIun(05)**m8DM%J8HQNzDO9iwcU#NM%RvYEUu6L zkJF?qm=A+iPe21-m}j;KRH-a$a+AgXFa%9U=Q~b6S@%dH*$yX4jt zXI!9csEVkS7V z{8-Tit@ID4{Ve3eQmhw43Ntt=7oLaIy~I0HZsmB8vQ@fZ;RCH7FpFaaCZwQuT-#d# z%N8AF(44j&s4qjfx&iT^BE0`56?>aSpDQvpFXxuwDaSJbxSEkgpGq9&Z`Twt=5nr0 z7RG(?%nVqVO?)~Gvia`v8RwI5ZP>s)*X)TmJDF| zEM`{X>yMiNLVO$kydYK$e}rjPI?v!MC=iX`fVBi3z0@KdAcqWTfdVk(uZm>kuX6Pn zsy#xzH!{0Y3qEYKZ4B}S;qD4yN41r8_021}-Qv(>)%rHh$uD{40&Wl$Z{iDs*}G~mE89P{kOG`SF^0p>#|CgL(J{Y-7?KFAJPC>$4n034&lgl7l zMdN29u?YkHm{m2%`WvHRH_K6jGi_qEa%>FaVCB$l>!EmbG;!pq%6DDKEY&HH~WMqk#!{}V5*as6JheXFe7Upa@2@8rBZG=aiZmY|VQ;uS2AP8P7QZke^OtS5;l_=
    *=7e!QfjHbISAlH}cX`gIDih09uN- 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 z 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

    |<)$(hY|E26_5xOR=riXmY^RbH?n%N- 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®J$xi|J?$I{Gq8HH(LQf$8x5v8JT zsi<2jDlB@MHGi0W%IlHT`h!nag}ae{h1co;al0rgEgJoc>BO}n6@A1MoD}s+MLmp6 zii)uLfVFkAeb&CU7G-Ajy(rpKiWE-#n6+@deOA7S_US^Tcxn(u*6lm7_DwXV9bRm$ zBn(fHIEt=_^xIc2cCkL7!Nd3MF_y>vW2j7vn1>hegZa(;~#LWZ$Byn@WcPDNR_+9^!8A#zhMyi3} zOA^-)zBF+Qz?UU%KKOl!n+JY>;^u-^CT5ImSAP`ry8Y%t89Ww~T6|Ep8ydfHa{Y&zuDZRj05d?HbIcmrWS=F2+YHw{5}eiNesv@(*pZF z9J)XPKwZ6foDyj!t1gfLXay-9w{~5;aWXvUB>W1rTu}6mZOE(Ejl& z4flI=EPI+khDvGz&#_U{Ho@=mkz5A+c_s#C@I)Js!BcHuMnuGbj7TG9Ny~VM7?AN$ zF)*VcVn9Yi#lSdR#3q}uZ}oLs{usUC8$3rxaV_pt?O+m6_I$uWbFqqn5A_ikjhU!o zBppK`+JLxN#lXjUGL6>UU1rE=&E0cto_mQ;ful8dPvu*Jy0YUXlD}nsRQm~AhD5nI zCPe$qzKRax*as|}Wkn{8lV6AN>-&6$8zzd+_b4v*r!>bHuidxagFd+AO+(To1JjVS zKyoxB!^GG$WXyq<3=!XuF}@ozMsq_><~us0{v}Z9i*m6m%Eg{27dxU{>_@|eZYURf zp3mKUtE;e+yTivzb+H7$NZ(fPMp?4EC*>-4>@@A2c5F7n7OnqE0+zEfw7A7+_wf@eerNC3zmB_Wy_f1%<8B2=6#go<;8P|>egidk|Sx3w9Q zEa;UM^vEUxP%4&2^-809rBQ|ZnDjADSMgy_9YUdHnbL{0mSr==?9j3}5Zhap9$>z) zA&FWxrcukrL~7aSYI>C|Wy}V2NhWUkLmCNHS&ryQw)9k%naYxasZ%T!*tyh~+};;0 zXm9d(?qTOvFKD-`GX6OIn<+8wG=lslFqeGzh2O=anP449^geveUscgriV&kXRHd2BK0S3WbUx zC=`RrLN3&F!KZV5v|Txjzcbr4Ew;f+9U7!V+{0>B#`r-W>p{kveybQACv=qqCua;Y z+6=9VeJ_lya>O`;s~r9y$d#MSA;)JMA~2gI2^987OhrQBwmU5uR695&vM0zQbBBuI z$z$C`U0`yq=MfIon&9NzF0kfY(nhO-4@{{9#NR3wqp#sC{BW{zV6v)`U@8{FR5`|l zI8|=4abcEJ89a`6l_OB`n{q^D%_B4IY92>_Zy$bS8=DPf->~75)Aya#{Fp12GjmS7 zN*}&yAu{pmoyHOl6R*bUaN^ZCGfuq9aMJ&YS0@`Kj?dKlds!xtMRGe1tPLh9BVxeX z_;P-tEr3t;+qVvIrBhvCK85{)>C9Fu)wYx2T{7-jhVQaZIbH%j=u{V&r#9pE#gy7{ zu(VNqWi8DyH3Q2-J}(k76T zL6HI;>Pv11$W$#-%+$X&DK%^(n@m`lm1BKlQjs=+1fq(?L=-XR66ScJfJ`r9$7FHK z-bR&!5B2>{2T1(N90$BOTQ9($Of{LRzL<7OKsHa>CioT?>i|gxX%qO1B*o-0PC$z? zFo7@MI0Syn(_#epZKsBTe{^aD_`@tIz?*t#j{s{K@b50x0Wz7%4G56rP;Y>l)kKUu zArXWE{yNJO@O_?6Js_#04UjwJi*n%YJSjS)4%-nK0$^?VNa-{JoRh^nc+-?AKvGS5 z1titfH1M9OCXn=#nm}?*Yl1nU7ct=TE&b%U21q7~6p6?(pvu5xqKL&rR53DVfRGR8`C<ONx0Q zL9KagS2xKb7tHK0Vn7028vwJD7BOHgz^4jRRY#l>b)pW)?5$$px1<0BvWt+KK*C6C z5=YG9A_gRkR4m4kh!IB2;wlCvv_x#O$f|`*Ef#7cI#W-6&87-94UGHbJ{?%|$5fqH zbu;UI@gl>oIF|JlXo$J)9>19`-qZY9QERxYRh-Snw)C~ISgrP|7|+y5ZdsPg{4G}M za#bE-(InL+>*M^du8a{fGflD95$4g)xo5j^CX$X|3Xvuh>&nx8UFnhmJNnUn(cR0e znQSY8?rimsMzXJ-`iAvTn|`>}6eEFTLnX0hraM}6g>5B1>stzcu=z!wBa7Z6y_V0w zU8I>|)!C*XZ4-Q-xwkKF-EzGfD%ZPixwcJe6dNZAHy|4)SxbSZxalL9p6ncXy3PDc ze4kQm8ALtPE?p1`NEhm>_ZO`DKX*5blpXZN`#(GkN6HDdI3Z?i{=-MK1H>I`^_@Bg zj6ZZHh{o4u2ky)=|1snb*?;VU#D5jfu=cE(8`v1Le~^q}{Y%Xis}r@@CpXWD=pXUi zkPljLv${7VH*Tyf4M~*HY%6Ia&s5Wp^pqp_hKxhrkTH#;-8!#Evz3chD;JGcF52A4 z1(TJF7AqGGRxaARjb-0kJPW(gT$w<~LVPR~8=~*0*_x2~r6*JI{()4C7QE0}9=1>U zliKI4puioJ1Pzd5g+`8D9tJifg=B4y-4!M_aukxiJz$CkF(&%9GUr#0KQJv>F^Cmt zms{^rck$P>Ut^BJ0n$9W>8ViYrc*-2&Q$C!bq|)h-R`7&u+&}HeOh7nXsLU&w0pGF zU2NYzXu3aYpK>z-Om6ZU-{hu|Qg<l|S)* z-imQbKXK(lK$NwDF>_Fdl!Q|h`G)C4Vddr5TMCh40~l6}hD1Wdj4)3(&x-cI&RHR&$4MLheZ4M`p>+HUeEvLkkhfvwF= z$Q)y`GUZ&lVw}>+u6ziHvQ{vTFY1u0IQ($aiNeaRWA&*L zxKb_llnoGBCesj|PNy%$u7_2MIa6m3&OMW+V%?j8$Qx{a%}=yqS1Xg=3`BUgn#d!h7nV?_{%{`w0tWeY>K7KX-YVJ~lC z2$;7}z64GS-}JuskC%NfZ!f5KLskzR)R*}Yh!M556jkrfRDrK|*LG+Lm8uGSdlI|f z;8ZPs$Ye6@F}9B}M;>dR8av?Q6E_!pV&dk3PfFZ;@X3i=06ryg{ovOpZXx*EgW6bZ zep!aXXN(jB7lJ>VxPI{G6Sn~T#l+1AUzfOf;Oi4N7kp#l=77KX;>^IwJo-WFnIr-5 zBc@AcSl|stwRu5lr-OO5stbIXQLP}Q6-!+Zc$!ngz&|+E1zvVYTd`F~=?-JXK;X{3 zT#(Yy#)=^DDI>Wcr4Jb^g20td4Fm6Xstf$HQ^UX~jpi*-di;j)nHO7r zC1rpf*9H{z{*d&m4lj{W%F*Nl)}(R|8fKQ# zF2qbyxi}NWpppC_W)AVCq61_V(cf-i(%sPl7WNbF#n#NiS^_%sM67=z88yFc~k}ChIy&uxbZ0{mSYGq#G&* zX8IK|U_N$Wx+`Kp>{4yfu#0UutA*OW*-A>NG100n=72TRKj15M(m&v#ob(S=^jBsu zv!4x={IMb+E1`G-NH5!cN=zvcB)c%J6{PcwnEKY@kQuxcq{NtsAdtam1t}fv3+FU@ zDf}WDaXZl|6p%n|8=*veiXf07YXxIaTwXY}_-k$-HIdKTr`+7EZ#$XI>{FF zXa#Wyp(uht;;<)jB`U`8iUi2j1bK>Btt-Q zH{^6KdMGJ~DOxvLGSjsDFB?sUYVE$)&GWq6#s;e)@ygw{8)`_r@--W(UiX3qoEM_q+PnkKG*3RlkbI6`n*>x&b_&W;quqkif_8Ew8iCm-|Q6a zf6*=xo$B`34b1-*lo) zRvnqMflNZ}DnRF1OeS4du#UxK(shM7;wcs{Z9A0c$Ro0d>~9g4mV+X-7MsXn_9^=q zT=H|zq+)Bsxevb7@cWgC&op%L$V@}GY*T)ksc3WR&`oX5EOg5@<)@j7Hg~Or?yerX zsm)z0p<6yvqfO#<($K|_e{|@w(z5RsgMe(h+ZdHlm$pe*KM&ero7->^7xUGo?publj**eYYZv_pO@sjy?sV?5b0vluV! zkRMPg?AW~$#_+$Lhc1JzWJ}YLw*9Puw!8*#urv%e4)p9vSVQ-#>=0I!j5TU9OE9T z7^fo-e~cezfqRMva1rBUcIkW<8K(dHPafmE62aYY<>Wp-;;4wc$Qs}^1bNgKAIuBI zv-fTMt*jv+FC1jQ4ixW7X@hs@FzKL4^-Y;?U!Ou?IJn;UBn+xtF zZVvdVug(mN(IBr9T-fg1~_zb3sb`87qQ7ENL}PX3Bt@ zG6cNBsX^d{HWcm3M+slc5(zxlT+#|sI`MG&I|$tT<*6G(< zAg*WyDd7##2wa_caA=&;uib-#z&}qAq_o*l-Zb#%Mzu{-`b`o9-Zw#z(tfXWjlfM_ zmAi-1i;R`d0FRs?Na^EA5SWKU`3)r^lNgX6&jGIXaOeUF0PXMMaZ03_OsqfxpcSMv z*TbO;Bmi1LN-ywm=mP&ci<`ycl=k&J=>jj$5^C`{CE`bH1pd|QE(Wgj=;{KAr`AA9 zgp{}o`1veo7LQXR%A{Q&qu*+zL;#2&kkM}iDG>l72xRnIK}rOG2mC$ZVG@@;&l_y=AWnn=ZtXK@|M+taueMJSyWJo|B^2+#zVw_jE9PW84VEwG8!rd#^EA1*^GUX z<)c;uA7(C=%^I%7ohk+<0Ywb>hinAEeV(7AF%wlANyku#HXtrmG4Q57v5wZ2u^Tj(wMh@i1YW{5p(Z zpY1c;Fi||uZEg2%dA!B?uWQ^v9 zoXmH0CJ$8lqFn5XaJ}STp9q=Vte`|=+9v<06lZ^O> zeAem!zhG4JTSMzuCOpuPez=(9Tb3!ENNZU(Q_K!6ivzK}W$6Lt8yk|S zWn&t(Y)qtO@Bxup(@J}J;|1y$}&?~QZRLjr2;!2@F~By%(Ct% zpYnUy`FUSTdpP~*lo%@vo|`Covy<;id+c4WNfaIYqGv{r4&LO;ZI7Mill(@ccYr}g zQ{s{pm0;9RwMBL--w{q4gj4VH$`M?KXNXAI>EIc{Q7Ae{ED99^QK=AxLd6giia})| z7izlT)44v{t{ld%uwhm1cQ0#i)l!EB=@9p@D#jR(`&bV$*7RG&=s2OP95^{+kkMvn zRqVttw#pIX46btcgCJLKGKV}S+Yo`-BuSvKM`9`x3b(DWWKiwkl*pbSx0&};3{P(A zF6si4b3Ko6sMZ80=XQZL=aM#B75tl&NH_mA>}$>Ns1joJn7OPh5d@hh`F za8b5ifQM5}rmAIWrvzm4q-}zacd-tTWRNz2XD2BpkA1SB1rzx4x-alGCMG+7;IU2( z121rD1bAw;YJorQ888B@Wx$Y!b_d90CT0Lh4)q53T(3Doo{$Jq6L^m86167y!nAV) zk~%6z?vO9afxqm_Vu#dWJ0e2>tSuiYokoCHSz2iW;E#LOb%3Or^a@C-X-)9=Q%xZ0 zCpCfOn$`q!LN8*#dpu!>foYFCLL#yZs4_5_D9Zlc74dpoBUC+@WE1s3c3UbIGfFv9 ziUg6Wz}gzZN~=}D%>I%rz<>4l?g4AN3nEyxfsgmd?EndC&11WIwS8($Ftfji0l%4v zf!Rrm7_b)LQ-!IvN}LjPq7KOHtzzIEJ!U#Ub`eq&NEm5N;)q#X#DIj6ip4k*u{fct zSUICldYe`YnOZE=Ms%j0JTl8}Fz%E4bYRUNQ*~Z@Ihjb#L~0 zt#}jgjH1?XS*tjkjcw^GVzFB7wK1Nlk=(K@m-$<))a9x?!lFs4OV-EvUtJm3{F!Nr zwbrvWz2|FtH_k-T5lkV{gkoL!q5Ho}2Hb47QE&rSbNsY4Q!0rKV<7)YOY8kYOzmlo)ghO;<+KmEizc$8eyFWRm1YBXE9Xti?DXyu~Kja)EUxoEL+(O~7Gz1LfC?&w+AjpoXn zLKfmQUyV$-x-*g}7VcP*FH~Ecka??nuyO_6` zP-#OZLyYWtWEZtwW|wH7_9`keC!1{h6GD_ucjZGsl+}N02z5wFIK}jSwdq7*<+au0 z3z1?28$~AhJr6RIIa}h5X^w%{K(z^j38WI07ucwN(?{3O?63BHKsVm?Rpyo}O+m6~ zq^wm8B@Y`m_qGPlHAsKN)jzhK6Ki#CcD>))XCo=qDw^V;t!-yA>)EGFLYJ7uzD9 z{nCac4;FpdH>X9dzu6@Qwl+5*GuIyMwm%_6>2dzJcL<2G`fm-P4ylU6*EO9etjtXt z6e7jk6h$VPn>dcl4)-}$pDKYX)nX*G0V2y}8luxvoTsx&F=y)R!MSJBRIGb55ZT7& z*Zf2)c2$FDYpCCXY&ZMVZ(D$mOWa)W@rj!Qo^y2jq+jaJjr~XebF7}+i2|=Ns(tT;(hrj$ z5dHNRWXcwXYApJ&x^M8~07q_|E}9CUJAYngCCc; z1>h|b*ALz{aSOq-Uf0H=ep6>H3hNrFUxWeAPFz2DPU04T*H7Gh@P>(-2i`bwbHQ^H zHwQfSZ<&FUdGsmPGszaBedC=I{X1%aEG9jzdxYgf1+@Z{54suiU4 z**Ci&aFtQ5Af=xsLEyrF%{5Z`)j6&ac-C8UK}vTTE4>E(eu5yS(YLuq;E_hPHc}dS zy9)x3Fsc=#^vMfc5cplAT0u%*c&7^jx4pQfT0u&8zRLxHL_;e$SvXwdf!;sP;2&m# zFPqmJ$F8vgG0>0{9(zLDtWE|oA{s$P|27MVhNSQtkCGuEanZ=#{gzhyjy9y)%8Sl# zxd-f1xeu6=e`BA@ooo&{(>|4pK3Hvizr|Cc1H=_#$E{=Za`E!E?S>@O*E%&L|7wLd zrtaQ4cCkhN2kf({e!Ueodwo{@OIG++PTp;WtxwM+pZtclaEg64I=^Ox`DbR5Z@0pK zy(uGKc~)E4CpJ%y3Ff=3)@gEi$4H=WBA!EG!!s3MBSg-H= zm17son)Bcm|7TKj39NDE9BH5)F zDA}bLF4?6RG}$FWr{AX9>{6VVvrA0H1YCA0hFx|k248lG5d5r#Vs>dGn??4r&+HO0 z%A}oLV#X$Xvr93Evr93Qvr93cvr93ovr93!vrDsWcQ9a|*`*lhf3QIRn|;piJEl*g zoN|@`t3v|pd{UdKqMb`50Fz>NiRnHIWolJInM;*W=29h;xkM;4y=7)p;+0y&>#nv2 z;R?!GL{g;^kzA@oB$tRtCdJG=!Y+#~YCXqh%S-Jut3}u`O=g!Wv4z4)Y;ma)TU?6M zXVzAXEq3-B9@7SjF3jL9jgvbU;Q47Ua!qY7a?Mz6FT!-3tyzXkN zjFy@RX0IUH3S@{I>LTXU`%qks!lBba?!qj55C{W0?vINPRORddZ%Q@Z9l+qy}! zSB+8lzL9Dl_~Nv2xN3~T7mQRvFp1S@B&A+uoAidHaITSB8_ei5f)p4Y6$F3AR*puH z0y}sWjEjYGq$xw&RHne#svwx5Z3HPWwkild+x9JuAO#i(6$G1fgod%eI)+LB!Y;6VE~s z&4*av3RR2cTG;-`W*Z_<-3?}?5OuX!WYbLei5QURQ*B^^PsD(Pl!}3gC=mk^P$~w# z)`CmKzG~1ztgq`Zi?;m?v${x4Ah)U70GO3V#Qwwf>AUz{Y0-%P0$t$S|O!+iIK9NMC z49I$*%D|i3L4b$>?{KOMB>O}P$eN+bz$Bzt1|%O<44iUv1o&*b!$Q#DL5IDh5uo!3dC9 zLCgjEtk5^&FqVfXp2t1!V4!CV@;H+9a5X zLd1YGnKM`gRTVg;{%D!{qon@f%iCblnqZE7qR7M}eF+sTepdx}!j50TlzMMRyd);;Uj{P8y^OK;{w^V=^Ig zl>?KyQWeOms$yVnzC;XoM0S`6Cf`I1NV=&uF!yUB1|;2749pFhhyh7A6$5idAYwpn z=~N6%CW#o3L{c#@nIvLB7EBcb6a69ve5i>qWOs10`VIz?8?ql=S-W#t>31$aIVt4_ z_yOZY;dQ69m%m}3@*V^57fu}v+}|EwG|h5ceXKvzIGAkv?=0KEq?j}cB*WBi;J5pc z_QAkQ(pm7zvGVBqV2-~3oXgcx^3sg^t(co6oguNLpM;9iqR?pRo;{xVd0gvzxxXe!3o zGLZ5P3Bx#(+}ZW$6zbr8jFSTq;E+>GfU~p10We1@QWJQ4CI;p#p}8}pkl)~e*$T^= z3S43PUF|#gO5X#I06&q5fmtMFodsrd!YWVyU)kKDO@ROG^T`t6gGM#IpukRA>w?)z zOS?dJ(oJ0o?4`9XcoVxhmAb$kjZ!i2^O6|w-!d`q2VJZK%pNbT8l!OL$tfzpA2m+K z7I==$cG8PgV-$#6HIIO0@=^}WnFzjf#P<_4}O>Aoo2g2Ij^`v;pt+njIjA+G6ijV-(KJjzz)e z7$=bic9v-{AxV4lf|7;vdQo>MXK5ynX<0NGJU&B;!(=4Iz~#Ivo=Z-&$7#` zgDS@Ix1ld}BfzIRwG?=OQBAA0)h{k}+5~IemwZKB3S4beqwlv|w>7aLIlTPQ+tQQ~ zUzgBESnFPuouPoa(UTwmvf^n~F!z4a?yX}KSn^a5%#tUA3%tQrP8DPM)C-Vc-@QX*eH-?SM`BecEvg%E3AsKva%p5 z2WCN({<9E1-WR=5;2usb1@3KBGdL8MBst)#bGgY@%=czXA^2=x3YP&{>9hl2mbzJe zhXAux?^a*+Sk<&Hm=#P8bbz;Iiy3$;U!@KK9+Fn6yT(}b-fyHf0sgwz?EwFj>aHB) zZ0#x83I}Fcldb`|!xXRIHTDj>_pGgOJNRqL{o~*v1L zIJ@4%);R5OJS0=DTpkapERU9&lBuYm7!Y8jB#M5KV+Uug?q){>?L3M>gK2;Re& zhh;!k1Ze_zfJ=3NtQR6R)oQ_NARY!XF{>G1=4G*WwNKLA38^5MS-9yKg?#=6GY`v{ z0hxwXA2?0PhXB{NNmRwa=|-gZlI(+av#}9(6@ACeo4w6u7tGpydwrYm$`jgEg&P4` zHjc14>3I8GukV;Sv-_JrQut-tD}T#AvrABS_$7b$5bC#fY5l%qy!}0FH%y94`*C65 z9*LgFdu=Q2g-57KI=7wmnZweJ^cBka+wOb7woTt(XY>0-_PI&lSlOva*4ja4|;mgo|;gdH;h| zTVwnicCNgwg=3R$hWEBlxs3#}8cQGnZ>l`MI>rV@wXu*gXp)n_-)3UqEndq;tOMjh zh13Mr7UHdKOtn$)&c;a>fFH6v5p6)8UujJ+H>o1V%FKPKbRI}Zh!pUSY^km-x0hQ^ za#yO2vanwdz75Erm$vQw5Ly-bLGf4r-3!OIY>YVJxha0K$Y=KfUzHXScMLE_N=5gg> zZannK2+RJ#$r~p`?F5tKr)?$`Z?X|23WZ`nMnDM_ZB}J?^J#u4yNs!aoq&qP8K>sV zy^n5lmI|0A9s zizhRbR&-4G)?4;=`Hg;y_Fp#Zs~|X8(c#^4W?AvhjbkjGOpFc5)X0;VhU9SzooPr4 zJay2f!E~_^q`-KoAedom+kRIYWoO!_3W7=XMsPBBF*uvH-~HI|LHW1EoG0w4W5YFE zx_LHm69gH=@0&|&%D9G$AJcb&Y|*5d37YWGsEvJ16W3m0GIdQ{C5k3B9$yn%wI(O? z9-dLR;{-aW9Nl4%m7~4uES8mv`d3)05WxBuC&+RFQ#o`I8_E$MghB1ERiOX$kgAmF zmwbDeCUB2X(^)IGI?-66P=u{QMN@^EOg9$EZ!6D56DBDa>%H50Hg2CX{Q^-{`Kf9& zW8+NyNj)s8I0+F{&#e3V*u51ma>%*`3LXXVSzwzZC9 z)kdy7PhA#I9UHmm_C3vBjFY2DOv4VLN-O;3Rjd%H(uU%7Q;~`mytwpO^n^Guc3P;| zKcS}AJyPnfb*0o@*nLc4_h_kmw6uG))Lq=)UShg0vrkC|Akie@STAR>Rt$%2j*j?2oDP;a&vhtU5PFpcf>94MQ2#B&)Fb*E-kgCMa&rBx@D}Pew zmxV|%9Y&FL`%axZdz)g0y2l*H;e(usb42njJ2DX}_JVVWbpN_b@!Hc`eY^OhR<oKFV?an4Wj-;`d#whAPL3$h4>&QzP-C9P4`h_%Y>jMCj)x*FGs>|lvN=+2Iv>kSchy*Yx2z#~ppBOsGP=1Tqn{fxI=Ue_ z)y2~d8C~6w(bo;hO)k!E$ms2cjP7p8=Vj?PKReKd=*Bd;t`Zkd>j2-e~qaV+dR;k;X6Sx!vXnD zkgWH>>-|Ae7o)I5Dl+2Sj|x>jm+msK*eg=J;>0&ngaY#XS0*&h>-k2CNCA1MD^ftd zks{Uui5jU`K8);g+{|M?kt$D{i@E;Q=07|n`>xW0;%|kQwQ4Trt@ z*Y$58N4MAhF7iiB#VS{|ln0o+mm|v(aKbA(F>$`bzk)sp5p&@cWI@8Gg_Pn-7vr^Ai6<^=IuXOtJ?CAsktvE@j=%UL07u|SeG6&7b z(Df`T2njjhEDasS0gR?dm4+4@-u+DX{vLT9U}|opY;J_+?#9)9m9Lu>d-wk_pVO?& zvA7`FUDUe7+Mvza9vGQxO;)zH=dBp0M3l&k3Pf2e7$Y2YNKY1NvEKWw`Bd+qDDtsF zq}Uio5qZqEYD{*M1zwj|jt43EmYzo>yj!4h@eOw6*k`gS zQI5Cd@@+nQ4yG=Zd%&h8-Ud*P{U9&@D#z}DcXgF}znx!lvaZ}@e!9n#dI&dlecLxQ zY;pKv`;^=O9&J=JnNFsiH+>|B(avp|QZ@!h+NV&!^nAG+M@6LKpa>PmM5s6goNa$hLhcL7k?34ye-&bt|84R{^ zkgHr&|0o+p=39xBDDr%pi!QNGoytzLW7&L4o~$0ZQ#qcFswFd{=1Q`Tm?0~prhCn7n44HuZZ;G?Ukmzf_$Hni;C@c1^hbrhJENq6O# zmuXtLI58{7G)xRCM{dk?v1FFgx^XI2F3!cu#mQK?$@;pt&uBw*^?qNchG=mkd-GS~ z3;54QRTswSNr^DD<4B>RABBo;6e@aAsOUtYrdZ!_p-9mmwiZG~2MQJaCscIbmgY9x z$KpgU@gY17<30GOcZZ-iUzDQm{94qXUyE%#-`W`Rq3_`Kr`YSGGDYFzZ~Oe-`K7^i z)7J*0?v?h^%{s1V32+;uSYyftme9Z-yv-%RKN&@B%6)Fj5+LRw8g2ZJ*_b-J6kERP z4KKwOv{kn5zbX_RRMskPdXBeRxJni?AQtH&g-Q5dxv0Iin4M(m-)*0=m;rxglrBzGO+jTbyT|5_XZYG#p9#bUO$DWJA=9=K+THa101vQHK*Y`EN`yWX>IX|w#ilk({@V_qk(%HwNBrPYgQEYO5JF#P|*sZrgMJHHn7 z=htEz7g-zk*ym)?HC;U!tJ3Sm@Ws~ZV-?%_u-SIKeM$xcFAi02_Wj%~U|W%>3Bt&)5JT@43|}W4Kf9pgNooq#aao=hA072VM6P;4wzA4wr2% zq0OJBRUF945w)?U<7YHWfS8A9?Ee$ZkktQSY}wcw9>x|Lmb+Klq=Cu}Et6ByJya?h zDisyau5PqJ!lAM)0HRx$dkjxg^QrSc-07rmFueLv#!+@Rzij7SPOJw~~Dx@XvXpQQ4Jt=bs&|@;#j+{g$Fxhhj#cT zhWyM&{ChV-@%9B@SrCd79KPHq6yLGqCrX3@@?G@yS2idSx+2IZb8aORFZJ^yAwmI< zczb&)(W>L?X}tF$f(KsI3h;`HQ1J`HLd7o!3&q_q@BRzLIXlnIgj!<9?YtQy)R{(c z!z|QfzP{0)fcT#z+-a<}S02x;Z!=JGtpDA+S6i<{>MieRD}2O0g_^E8eY!)_d^1+& z58yNHn>rGgE5~9CXkAA9pUpt!z{%L9L_z+i2*7XiIjRFB7Q_-DVWADgxKNJ3APO3b zV-Todi~{9i7$_IxK)DzQ%Ed@fE{1|~F&31YZge*6JE3oVd3SuEIjqP3>sVY&yc$Df z;??O|QftuvqU;Z|z1Z-{_9-I*^&VNl$qP4W}MoDid`3~)^og&RyY5fr_0iM z0A#6 z0-t4^{Dn>6RYr+ne;T8}XlmCP&SNZEr7rLyqonTLV-#w$+buqm9SkH@o4OPTb!h{b zMg84lF+kKlBIKF26>b#97*WBgf`l2N@dB&g^DRuYGML~H3xRo@#GufsWmFtYR1gSF zvlLQP92}#f>068oZ6gK-Y01E=4EV2U#P9ZX>LvM5lA52jVQZQtpE6h7J%+3Bg|>qa z4onYx?jAeZ3Tzo0m3W38*LuR9%zTj6>g&x1+60qV zEt*+fRBoz>WSg#XaTS)k^{L|V^}aH7fcRZ%0$IPb0Y;)0je}_63WMo%?l zoZuUhNKSqcJELD3$>^AdjEUNiler6Ds7sl0afNcx6Us$LC>Q;pTy%qS(F@8&Cny(v zpj>o;a?u0IMF%K1eg6k4{U50Gf1uL;flB`eD*Yd*^nakz|A9*X2P*v^sPuoJ(*N=o zlOJu9(-uCLjcpozgbXp#1X2u=h9pXuq8c*JQ4JYmry&U*W~+u|;%ByL$QV8i8Dpg( zW3V)2jFyIs;nI-P`9fnVxmf$1C5eB+g)QEV*EaB z81EX3%5JjBEZM%SwB2vb2{SpoE^S{{+P*9{#{o@hZVAnO&&-q|i?xtuR;@T?&}tv; zT84q#1IayJR7|ZTQarptK}Qr>w{NWWc08tWUnh4w z%$5J*Pd17-FW+MAuURdm88wN7I9FAkY;Xc}jXSY;(87%+v!G}p+NL=WioUOCirest ziQK)W_79n={eSmuf6;%zOVU*Gogo?;R>#-!J*){9Ibx4kk6u*P$1KiSz& zj4KYHj&U1DfoPX+sh(%wQl*uR?F6YZQoAj0&whDWCA0RbF`i9boc`wJD*rL@PZ%k4 zB#>uVP334Zn)%Cm^2Z7J17Fwq-~1{9c(apQyPj^JQVaMpqng(ElZR(t*vg9>@KU21 zxs5D{cnjV?%yt}IqR8s!h6%Dlia0;S)%yts0V26wjSP~x4^&?i_8Tp|Gg%!Xuj#XC!I#Ma3Xs|!c) z7wh<&=kl5dz*!XHYf6q(h;vdkg?ciziSJt*X&IV#e6U)(#hKzN*vwzElj?VkQF!g!GMyA~ zb0b;y?htx6&pO=5QOLTya;(zja=W^-^=nuAl$X4K$2hf&zb8msNOsb*r&%Y2iVaqB z_`5dnG%F%_gN_SDxA{YS6-5}A4Z$iOg17rC4oiUaK-^V+rxzvs31*ph`D4fj+Fx1} zDn`pC=AWzFPs98vdcOqxF(Dtk-*s^bw}tJoK;Wq+}fKUXQk1mwLDaZ=^) zO7iC__(O~pSE8HWb(6V*TCX^lg{bHU&F`1~mL?EI^7Z$*rKV!vj`-9aiQeZmne2s} zYsRj%+qG}_o!k=OZRt+#nz27yfxUr5#Wlqg{yOW~1@_qp&9sGRE=sj6Dw^IIu^d+X`Q!`ZdxT%z(B>S~!Fj57kxp$D zFZ$kOZGF!^<@Hr+9qertwUEw!2NdblRw>3J0T1fxdYZV!Mk6oHVq+@?b z_LJowU}jUw1S4PVUTuFtnR#;~d*>;;6oZfk22%t49cCIh^7U=TXMdvkOGagFQ;W7g zYl}cuYqGZKoCFMQqF5*t(wR!+(TTOJ6Oxv3SeS z*LcJ9p&={k%ISrE;1H>KRZZPh{^M9UrIDP>I(`d47A)X|p9R2E6Mh1qVsN=tz+lwM z8U(z^B3CS1<$d^3nsru<-EW2U(paQl{mMF4F3vQIpJWB24>(&k0l?KtSVzGx)sXrv^BABj97lD7w z#MU>9_R1`Kf#Jh5E?TQ*;GZQnxXPVo_?;OSb1(1K6~2$`0B>_@6gZV{kF?$}fU=Ll zuW@&Z_U(-N#DNY@0Ao{0Zi}X9%Q1KSAwZP&?M3|^|nB2!t zG-+yOi_2bCYhUlT|DZtZ9P!MWCv6j^ubjMXBA;5>qDo+&nc8M4j%|}SN2h+14j-Sq z?U-S5(DkD*yVY{PQZ3rU52dAqUI zby-r%)0Iz~b*a7LuHqYoNb&8`DAEja{qN=Q`)`~3on>)$^MExtg$Q3n;Y%novb?jx zd96_8Ux6!jsr%Yjargs08V~%Q=}mS`xu~iZH&K@wWhziLGoxM@jFKg|RJ1IbR9UD` zHASztPg${mbXaZyO5Gzz+na`bc~GQc3Ovtr(uRm&(aWuNrPd<*>xKNCO;P>Qb2wrpmG|+Pa2(T zZHNdE-SRMDzCBE!4Sw*XqHyznYrD@+q>0mk{6LyGy*ydw*GBmZsFg2z5R{KKAZrqE z`C2X4escxE_<4j$$!RAruQ*h^I>CE2yLpR4`xr#Q8tcO3%zD(f*3&|6+HhgoW!9H# zy-&psXtiDXwtcSEw|oxxmc-2k-A8LbS)KW$}7 zxJW7k@lPvA2^WbV5dXA-lyH#<0`X5PNC_8-ATak-AimHR7Q1J5^O#u- z#2Yf1-Z(}9XSB5`y~%1fq7-mPD@qBEh($o$(F#(+BO(aI9jzcGJR*X?+&PPji4Euc z!DbJ6#0bPm(vj6;6mpL(agX7VMw9{$Q45!hQ^F&SC|h1^L?3MY+j*rx4!>{CMT#|H09)QdN2rIu{ceu~t;&u!rk>{GnE&*m+4 zl6}g)@iC8Usebzu>R$|Y69w!UHAlW{Cx0*NHGNOK-IxVi&~WEj2G2{>hYbEHQUCPM zZH24sQyRYB;O`Q(p-p(Z_{7(FzQMB+_5Jy+uJI>e#1h~)of?|`#P;fD_9+h8e%qGX z$v(x1=NWvNQ$sfy{6V5NesWuJo_(sn7qryZ>{BS<{Z1`;_V%q**FMDv;2}s$NK>(*@qpSaJCZH2?_Q*5}v;0K)Q0KZ_= zL>;hSNfm&1R4c&#I8^}NU#+m^Q(G(h?Nho1+|Q_qCY@^RK=oCO4O4#ZYwObPpNp6!SO_W!r-bz{l(xs z&*;uR22+xE`iqPnCZnI|={x)^gYQWcdHah*k++LINr%bXYZFD@KEac8c*Nili6WI( zCyG>_=XpC!Dj$@nR~OkmOe%lCQ@N6)9g_5yo}`^~p49sOQu`F&1FtY@t-e$G%3SXJ z%F_D3J-vs^^zM+>vpp9(gZjWnB(d8pdmr?~9)A1I zt+FfaQ}lnkzoq_UpF*`n`v18bw0Oim#RTBVMr|T9gv{t`AG*pWiFewCt5Y2&yB*yt z9j1`69orT}Gmt5z(EP=xwzA)`PpJd^nNe+GV+!mBJGB)HjV+!2=N9Czwy}`q_QtX0 zmh6P+uXo1m7QWR!wW7gyJJkbT?Nk@I z*WeEl1>AZ)R}b9I zsUGkRPIZB2In@LHn^Rrj|2WkH-nYKD2zH)v!R2TT4PW6DlajFaa zt5ZGTdYj?GF7U}t^?-|<>H=TjR1bKtQ(fS4r+UCMo$3NFaHppK_`T zyuqm+@EcBbfp<971K#UY7r3F{()ECkcd83aH-0_f2a*)<^G@}EUv;Vr{JB#-;QdZ@ zf$P{`@{(8uZtheUxW7|9Alq13MS+<*=YdZpQM0nc0~%f zv2R~{K=!{P1^hyi0a%Zb%9TF zs^@UN>)P1h7ETQU_i?HRe2!CH;OS2FfEPN|1#<5pAqPw+3WLBO_?<})$YFyx2bj(s zdcf`cD54Aex>G%1Z=1g6pXdU<-l-n&(@u4PTl>9G56Fp!=mI`FNdY+ok;nn2^N>N{ z*n%|`@1wPLx*{a_?#@!sZZn7f+9=x49$l;Tr zdb13!?Nk@Yt)Ey1hjmx_~cqY7n^8sUGkor@BCHHpK{Fy6+qW{y9|y zp0mLF2;?qRh8M^olynHljjOZ>+H!~cstbJF4!E!f ze3DaL;8UII0T(&d1wPZM9`LzNb%Dc9^?-*v)dg}0D2@hxD@g%wb80CtojVKy`~5z@ z2jnzS0szSQoU{l$)Nl5?z{8#D0Xf1GUBGmj*8_5ZAX30r+R=ct2z;YcgTN>6>>~u+ z%cy3G*~bdcb-6C^B~C2`auy?I0IzhZ!FvsE)K8mT;5?^#z<#H?|Ht6V5(T`>sUGm_ zPIZAC2#GI%>1=2axa|OT^?(bV>H^o<#ifAroce#rd-pK8$}(TO>)2I&?i@Pl5RgC; zAsi$e0tw*|4k6)KRgkt52xCTx5(J4#ASi*Lpdg}A5&?n7I1o8`2nreooQY#lK+wz{ z;*dc!Zb87q5R`0S3+$)6p8NfED*5-xSgf24o+UC(;owcc8_YOPh({q_+L zNa`%&2a`IT_~oR|`bosUND=uo#7DK>wf^U}&M~>V8~EM@`J{0EJYI1*w|ce?mE6za zqu7C^`Cy0}JOj@1_13waGuR@hQk+K(b{!`>ocs*9>*7_!3vI})b?$PzVmDzQ8SH{x zfaiZuGG_P0Kn+TbNIfwwjKRQ)kh#$>W_`nds-Yx}`YZjN*L zN8{(9+}ZeX;>lU(U?C@!LkIPjyVrYsF@6pfz8-L5oO=z*MFE_v4a&yzuR(cnoTzY) zGAPf9^9@cl1_tt+c;DsS+V{)Gx6#368{hl}W#gwcgOa1<`{GzSC^_8S76-*axs(0m zg=IV0PhMEYOZcF82@fv5lbz>|{!ezO*Ou)z ztls0E@zZxG;=4onX1uoSzq0QPtl`dfot=!}Ydagk*Ou*MuwGlHA*m+@hTFyi-I9mA z(th*5Juuux_6`2cvR}l_Rc^NWft<+A*1@`b+!E#9>Y&{5Hr^Tk)dA#%xISI$^${7{ z!7hNIuTf6UF4cJv@v@}OB68j~*j(eAe|_6x_v9^RQ2t*%9qgM!_tPOy$IJiQPsfmB z|I5pk#vQn8)1A1=JB{cUWAp}AhRn$NR{V6?&W4XuR8B(uwXl<2_vM}Kx-ai+*L``1 zT{j!=g%jc@lRLn?uKkOCM267!Ki)ZZk2gn_hEE9J?q3YJAwO+G>GClH^Jz7{zcxI~ zTP=IP_x)Bhbaee=DF3MC%rhdclDa$MAElb&^OR%K=PGCRMdaD^wtgAvFYzPM4;j2yPDFIp z;T;?l9|c?xKfUf#5&2BP)nW0za;n~Phml4~OJ_w#$ijO-OEEyPROFLvpv;<#<~clAF^m_q2^6xfktn4|_ds{Bn!e<^INr z;Qve~f<9&d_jG*+{CIo?;Yab)7v9$Z?&|t5HXd|cHJ(DcdLRzJd&k+iw|1lf9D2Q1 zB5z{8=%ca7zsFC1H4~prs!IG*QfFr4RwZ{cy{##sxOJIrI?_JG9nIbAFB@OA!>l8K zyO%BxuwRDc2IHV?ytO#E_>L#HzW6?I5Ao#qIdJ&;Yvec6{lyBgY0vul_!sxaM?55{ z3ilVk9%`^#?l2bOG}`6v25_&@hk?6?+#ej=5P+M3UPpXh?HypioC#^X4m5ysbYGar z?ZClKfWs#aSr|xn37gJZ7>_TGpV_7<_Jzp5N^XXcw}tb58*dp7_S<+na8Neh5OjIC zaZ8XZ43~a@es_I!x!iC$$r^79y4=@}*{fbzji0`^65pFtmAEjeGd~fLdxpLx+$-eP zpLcM80o?p^xw`>e?zlYA0Pgk;F3x?v^Y*THM;gE#ticv1#|^3}=|)wBcz9B05@&`Q*uKVFT;ANi#!ap-q{3tE z-Ek9&`%_-%GmeJj1aoj{Zbghfp#EgIJjehpIbBY&4@AXz@zeLaPer^weh!>fk-1Sd zxGeDPwCq`rN90zOH}_g7E@}t%95Oei2Af+FSG%8%pFaFwi}-{1Iat?t>&oSk#+3zk ztX%GH0Qan19$>&H;+kZzlIv)0WqIF3Ze@Ah;RbMD%jJZ8uJr2nGbuj8*5 zaOVAYabi5=AOAdqE7Vt_@34D zIH~uxh@AU-Tf{3>Mf^rmeZ=lkS}&qb^ZSVZq$(m8_ueCMT%6?ldJ(zW_bTEvRdE%; z1;fBqD48n@;*|6qs`*@je6TY;A;dLF^${OTYW|NRa?vrc-Q=6PQe#9eM0_oX zuc(Ts%aA_eech=o;| za^d4u#NVndqAq&+i2s@Hn#?DTiR%|{i#R>0`9!|7yXZh+M6CTg2(ABJ!mruOgnMDk2wo zUPa_m&wC_t)#p`2uKm1<$Yr2c5xE%jDk9f~UPa{U(5r~gq*d)BzLL~@B41kawulqb zw~6Kx`O=bC5${zMkuNQI74c`PBJ!mruOf08>uXQsiq@-$W8!+&tB8DQ$*YLEz@1Oz zjn}J)y84_?ygFT1_7V9mjrU08TQUQOCNkHW-afHo_jH8e0`q{R`iQfVnos;#Qhmgg zNzEtnIg9tmr7Bmcu83Tt`sx$;0*qG?C#DP2`NSV4)kowzG2RxD@5BrY1^J_KvFhy; zxn%VviMmkjBkmm+pk76somAhA5g(Ewas}%P-Wk`cy2_lNVqD(&dhxXst|A9ke{?*& zugZvAS9<%6SCift*OFW|dKHl`ka!i5E5Cs*$+xBp#Q8+73J1y>KlAd|8m|vs?f9jT z`CJ=vLFZM(1##)-D@){Z&#Q=6sEWwP2VOFZU*e^V9l zk4g0r`PzrCJ+UW!1Eh~QA*uO9uB!)j9Ws~I-WahjE!jupqT8#8SE-7~)wov?+tb%c z`iT4rnO6}HQWcS}sCX5Ti}-=nCvy$&WyBlQ7?CS{uOjjtm4U{{o3teHxuoV3|CUrA zk>7#w_KAC>n+1JDZY_8falWdE+(z&!;u=*E?@wwz@n=c(5&t8p`NUU}>PzuG>D7>l zI6A35B6lr(z4%5B_bglyxqaa~HIbVbUPa^<#=zi{`G$p;5xJQ$P)6ovg?B*IeT(@- z?pq8jNq#PFVEB^6*OHn~xH{GKnwa@RHE|lW;P4AN8_f5A+@%yI3J5yVY zzi&FQNgcb_ALeY*x15u}+tat8`}kGO?@K)t@i8e*toSaDw?(`>onZBIV)ax~eSBq@ z4+wlgB3~WOH1+ebz{)rs^D5%6lIrL5Yq(CiIMw1j%NOKSh|?ffd~-IlcN(z9o8!I` z?3mgM``HV%%k^`Z$0(kd2DYEbzz)_muE(L#Kfl}N zt4f!&?~2w>NUiU%L9fLSj7=Lfk2qw5ZcH0Q>%LYuUQYW%R`tfq8&`E}+{5EO+>k$! z!S7ADYFz5{IHJvqpI$=bw{rbEf<*3-`8IP}@aleye1*ulz-~>;O2vc6H~cQ|4Vltm z<4cE4++&A5=(2dVa}#VQtGg*mcJHFs8W*8=rAyTs7h}Ilmu$7h3mo4lEuequTizrral=T1oC0w&YR*Y?7Oj_?zE{N#Dl+ory@Q_yD*M7J8kKrc<|D9 zD!M!#{Ng(mt&9h6ey1Xf2XB9;qPyb32j8japW?wEzf;kp@!*s1RK#D#cYa*?iw9@FQ&D{%*Z)i6x4xFg&k0SJ zG!5JH3jSq|n?Am0#1P(ZuS`?VaHE`GG25$YS<@$*#{L(URM+*?bx{51i1<11XSm4I zQp$sbUt!~*B4E#i6GwWaRs z>B4yQV_J|n>(F{heI*(f{8~J^Hh%g_5ntSHLFj*|kob0}T+>CD8}RPK-l^LI;?X1G zr*}&{<{cNT#G~`IAo2b0xZoG#(J#f%fn9_A6}c|*O>(2jH_Po#{;J$w3_EWf>_Q+oVYAheGh>yn^s@g3yB*; z)eE8DO;3fyKZL3mLad&*sP(ER*6v#|n*K+Ph%7bG){cMpj0M>iKd~UPAp;9m4f<-@ ztSXTWsTV@@yOUEDI&Ds4StHW9&n7~o=Yi&HX+8dOB%?N$_-ax$qE=#VDq@ z6(v30pVn*MLlK{mYKjqfPa27Nheqs|Vi<-U&U(%p8*xvmzmNERsfQvyDYYr$pQT=o z*qU~pdF>J3Ewz8dKB+S!o-cJp#5<%mMEo}?_QC^>NE^h!zmW!h-qlCdAAL1`?&Lb1 zf#)gr-I>U9QS`4TU(&Qkda@aEJY0zJ9{9UkUcYC?cv5&qSOT8D!xB7E3{F``!uWP_nwG6jRRehbu>AvaZP`=!_lO|TJh}qm0@cPr3Svjigu;7s_?31 zkMspucXq~stIUS|(AAD3y2Hixj_dhfJnHSZ>hoCj|IZxab{xNXjnDIrd*9BUXGZ4# zp(l06mHIC}sjTP!pPs=*@fu{?vrS9ecv*2g7;ufx{7#nZ*vWEnr&dchp8WaSUE^Xq zIib6>VJ-a-z2j0lyd|*I^|AE8!Hax*I6qDhzZ0t9H){OmBe+48jeQO@s7y-tL|h{EiHOUk*uY1Qt`Csk0d5>A zHt?pjHI=VN)YDmE4fJ$YX#367U8O6!`E}}Uhj*V+v^_F)cY5O*9TpE=l1k>WMjuRL zGLLvgsBF`PO$^;bDkDBVq-@8Hna7&%8f!k#8u_xcHS>tq4Jjk9QyGzAA83vIYn3%M z{A0t1>}zcJ{|ojthL8>2$-ef7*!Jv<`j-2wiur~yNXT8H!CNB0?0DD@mqgCPye?zF zHBsj>Yrq4NIRl=T%p1^?sas#XV8Betq5(@Jn+;eaSu$XgWZ8gXHg(iuK(A!00cS|I z8KC(N<`7q^E@Qx5A${10&kwBw_&WIDumR)J7s2Nc&ki*>=D=-|Sp%Ms%o*@E$-Dub zu_p|UIdG(8(Ew%{@XBTbZc$~)fX5}v2D~EKVnDf2e-nKxi!OX|B|z$ubN0~Unz6(aK6y@UH3@Pro58c>RlBfTf0xV|(A=F~WqAYkl`I%ABc%6Dyg+ps1HLMmHQ=X`IRpMf zGH*a>SX!Zi0f$N!4Ol4IY``kXk^v7(mJQe#a$v8F_?GH226PWkE0i_h2+5oQ)sO?v zPQ+!Z%NTHvq(3_WzmUusuwq2LZ*P(KaHzrk0@$cJVn_TY#$X+As$|xH%OrCK@XH~- zc;0}Gsw^1rVn|;{;>h?#hrzyqRq3}M<`BOzv<}!LnKhs|Dm@7~1Exsk4Ol4YN9ll7 zl75s9ctp~V(gA;xEE$j)oqEq0aHM3`fb%7D2HY%}Pk$aje<#XMi-DI_Su`NiJGA!z zCNA+I&Kkgk2QG64EYae51J+0u4A>-DG@v*p_1hS3nj}2tdeXo;1S7I1GY)F z88C5|)O))DeUcppTqfCRz*@9 zUG_-5mkc;jvTVRo$rc0dlx#KN=aOv(bnlru${298WY&O>NahTm zB}W_ZfMl-$&r6Ompl4F*Xcq&HkQ{43RWf4$zehHBU;)0V%A5huNahV_-6!>4FkqTw z(SUO$n+>>8vSh$dB+CYDlk|NlVB)^1ci)!+PLXUgV6kMzfUikr4R}J*kI4bANaiiU zeyR72jDVa0i9?84`n*B3U+Ijbw`fnEe5yCveSUyN_H7g zI6QTfGoV8tN~*ra|TS5yxf4c>8YcP0sBg34VWeA2bO?~C9?*sk@Sy^0yatd z$3_9gBU0}L1Exq84Ol4YHy8sxFIh6+pCvN}{HJ8rfZdKvz2^)#Rx)qE`y?|4d_gj6 z!1p9`2K+)YW5C;zSp&u&HDr~5qa`y2@I8sagFkSaDsu)rA(=PeH}&C>8lj*tYprB_Ty8Vc>|_P77RE~ zvS`5NlFbJEOtNIa3zAs_M$JsU=M0!BnKxjGWWj)2C5r~!d_rn7YruVyc>{hSnKj^T z$(#YhW~Das2F#Ew7;vFv(EyWdHsDFgk^yf@mJJv`JN4dTz)vLo-de!06H{fufDcG! z4Y)!wXTY~5^9DRCSumh*QtGH^z^;-x15TFA8?aciV8D+gvj%+q0fP8Sqb%c?13|SukMN z)6(Ka15TD~HsBMIB?G=LSvKG$$(#XWDygHq0TU%N2F#Vr8}M1lf&t%`EE@2vWU~Q_ zszZ7QZkEg$utzOb77Ums>Ca|BP12vufJKtc2HYpTA=zxeu+!5j`Qakq z0Lg*@ePwivMg8EKVT4VWX@X26w_{)Q58w`9(MUrOc; z7&9kzR50K$$-Ds{lq?ulWZ~IYROguzA4#ez;`6O z?7n~>NM;S#ESWc8ulLqh$v-b8P7CE{A-;D8)FcZAERxI{aJgi`fU81!H^i@~u4ur0 zsw4h*XdSRw((ge9yrPAPlls$$7YsN?vS`2sk_7{nOBM}SAz3hBwPdpaYb8qttd}ep zuu-zvfGv^*1GY+*3>Y_e$YuhQB})d(2F@jjt0jvD+##7Y;6cfv z0gp+R4R}&AW55>4W&>W7%ovb4GdSukL|WU~RA zCH?ps@SJ4UfHx#t3>Y^*4PD8A8IsKg950zMpemU)V1cBMQouQqIRnm>^v^c}mP3S0e4H53|J?bG2k&t-)RG$l=Oo@z!u4p0b3P4RW&q zy^9|{A25ged81Ry0vjMM5W(??F&@}kZ&o2Dc5in9RV?eKD)_}>9e)1GBRWf5h zRnp%#1LjEj`)0r*Nq^rASS;zE4+mT%nKfX!q>p^S3dyViDHBFUTq*GiTRSS?vHV4Y;vfDMv)1GY$J40us8XTa-{Sp&M?p9Z94zy!&x0h1;3 z227RA8c>xi8F02_*?=n~+YI=&WV->+N_H4f_&{3uP6Nu4c>~5smJFCI*`uh<_wrEnKxjLWYK^Hk}U?DBbhZ|iKPF6WWX9p{{_i_ zO_Kf#k^#jJ4H-IMill#v9q1o|kMkpy%AQN+knkN|p^+ zBI&1a0c#}v6fR(sq@ThC6c?qA{1h%=KgkXQrb;#&Fk8}}&49Bdn+^E9q<=mf@Q`HL zfImpK7%=9%w4SX7%$963;6llE13oU9HDI}9ivcSn%Lc5J%o(s+((ghA+#%U)z*@`XQ^b?7IS0%FsWX?}3pEsaGvc-U5lK#0tK#ye6fN_#J1NN8nZ;k}ak<1yeNV3&{ zizNNTEMU20-hdU7tp==?Y%$<2$*ckECH)E|V56iTLjtx)mJQe{*=|7bf;7nf1+IW8 zlI;e}m+UZLfn?r*b0qzk9I#k2XTVjGc>}JI^t&7Zw@J1c@PuT$0e_S1FkqjLq|NL! zpeEU6z&y#k0m~&@4Y*CxS1I7@k_7|SNahXrv1G}BpGp=C*eqE#V5_9R=?7#kOq=O% z`T+$=f71`>mTWViSJJOH113o33^+lu!+<4{od&Ft^l$S8Y?AbE^92+arWpvdw_2B(nyrmh}5J0e4B}4OlOkGhm}+-hi!=IRnZcP1{~D zpj*;Eh6orZ*=oRKNx$w0SS;CQz;a37lLJ;rwi|GhWY&N?By$GbCE0AiTFJZt>m-{E z*dXZ_p#d8uiv~O`nKR%y$$|kdO8UD@z*fnu0dGmR7?Azgkf#GEO8Qqj19~NM227Ro zYuJF}CG!T%mdqJ2S2AnBIg$kf&Xx50U;&FI{iC9QrIL9AR!I5{%z%}Wev2mHCdr}! zcT2Vz@StSgfQ^#v25gaRHQ+_bq5-c;`sqPH=Hux(${A3QY%`!o(odcP`XtK+TrJsR zz&9mZ4R~16zg7_NM@j!$LBK8-rS)tv;6%w*1C~m*8E~g$y8*wH>@c9XBz4qjzb59+M;#?rb)ILFi*18 zfJ-G?47gd+ugU}NkSrOnUb4l2=OxPq^jwnGv&Dd!lC1_Tk!&+yjbyt4nm^GDJSjQafR`jk8PM{Hv_(AzOp+XFz=@J03|J&N+<u97SnutL&5+YPu$ zvSh#=l0^g7OO7#Mi)60>TO|tyyegSDp!>2kAiEgQD_JyPf@Il%$&$?mOqDDcaJ*#M zfVq;*2Am^VGT>6lE(30s>@?sG$qob7O8R$q0@g{E4cH)AFkqvkf0!8Xv}CgZFG+S9 z@MpP0Z&O54cH>--^>Yk zQL@c|S0!5wC|{nQjur!kNwygBMn#~Il_RolEV#HCppZ34U(+}Y?SnE z4|rPA50wGWNtO)QDp@q3aAg{$f&txCxY&T%7q`$`n+%K6o;75|325gk< zFyL9qHUqXw`fap;*CksFX!%rn;@S)tCfRDh7|9j`CP?}zN5Evsf&o({{m)JWoG964 zKuxmKfO(QF2Am^VG+?o$AE*PCN)`-QA=zobTFDLrHcI-He!y1AHUnBdoyN1(fJu@q z227PK8!%6@+ki_Y{md%hDoNjI18$Pc8*qoDe^?W+Uee#S12#zd@iX9Q$$|lINR|y4 zb5+`Q|MEb7QN&tduMoutw7VqG!M+$rb~OSErS4 zHDHQln*j?Y+YMMH*a;8DqD1GY%|P0@hN=hC+O z$2tK8$+7|6lK$nZfL=+z1P&M{*=)cB$-DuRCH+k*V1{J70ShGkBbb2YlKzQ9z-meV z&@*7Yq#tPmwn+N7jssqlY&M|fx-?3o4cK3DlmYW4M;maRWUm4LC^^P}mn3&FVC3gh z?_&)(SaMeb=1Gn+;2g;w1C~pUG~jy4T@AQfa;yQ5N$z66OOj&@Xt_SEe6InMBu5)? zh~y{(s*)oNSS&f*fEAL%3|K4KZNNrJzYi9$RnqT+1-vSmGvIZ}ya9zTq|Nkm?|^Q} zvH`u4c>|_N`T;QDc*!;cs*-+P9I!~T!+^z-?FKBBEE=#v(tnL5;3i4G;TCX*WWj*7 zl0^g7NtO)QAXzkEqom)F2zXl3FNFf0lWa9$tE9j61iUU;GNACq^c*!C&@JhQwSZp9 zvH=q$O9o7q^fRk~sgi!t6mYzxKbrybBs&Z^N3z|33naS?xK^^$fR&OR2CSC!qhi2a zl4S$#mn<5vUee!X0v?rYG2ki5k^x&J{g?UzUX=7-N(y*Y(r>2(WL6A$;()Sb$$*iP zEe7l%Io5!Ql6eCTl58_zhGeS&3nV)YST5ONz%`P7S{QJ*q<_8{aKEJA*$eoQWVZp2 zNp>0Vlw`93TO|EWKVYk*AL|0Tzmx{q@392*O8PyPfN_!|4A@_?(|`jdI}A8pvS`2p z$!-IdOLiG>jbw`fD<#_uSS#6Xz(z?w_y=s2^Z^NYU9#DL@|V*n`L`(ox+VP{OF*xr zPkRwCNphG02TJ;%bPbp$*=)e^k|hJGlKv4)z+A~T0~Se^3|K7b-<}FsD(Ro;2V5yR z!hqG1!wpz3In019lHCSmZb;+VWxzPeP6LjV^vl(N^CdeCxJ9zdfX5}f4R}Lxm;rmQ zOsh29fPTpl23#&V(tyuMmJL`T=^tqYtd{gM|A6}>I}G?&$xZ|Qr(~A_?W@wtcN@?x z*=fKq$!-INOLiGBS+diBsgfNA%#iFdpik2OR&>DClAQ)TAnAXBFW`Ae{|kHpJzq(i z>3@MQV5;PB16E7=jlqDsB-;&mP;$5d|0+4mfUT0<26W$;R;kN?$&x;F0aGP?=mM&e z!wgs~*=@iI$u0xdN_HBsPO`&*4U+x`=K?lL`Z-v@vyvkXctdi80b_1T+dkZYX_CVX zm?!D?)&ee-^m}UoH%t1bmH~H2`lprwYbE`TZovJL%?50gEE}*z(k}x8wo3XpS_8Uo zPMhi9Yz*j?^y7TMG|4Ul&X(*n;PaAQ20SF$ZNSeZhZ*peU_W5AV?yBM%qa;yR0k{n~eKT3`@V58(N25glaV?g)U(#rQ5 zFj;c60aeLS1}v8BF<`0WNCR$`9AUtNl75^I*ep5BfHx$&4H&b!Y4D$a7TIOM1j$YV zW=QrLut0LO0m~&v8L(Qi$ACv9M;fqAvd4glUr*~f%78w}(FR;C*=xW9l4A_`mE3@(r;CV^^gWLfx8!aHJSMrT0WV38HK64iY2|k@ zV3On*15T9eHDHmXk9@$jlA{c`Te8Q1mOE4LBMlfMxr+e@N{%t0D%oqmV#(14tdJaK zz*@;31J+57G+=||2m`iA4mTikSK6Xs28@&JHeiONpU(%(mh3cOj%0@c3nbeOSS#sg zssTTg9BII2$q@#;AvxTD!reo*2pA{nTNE%u(zhsJwxn-Szyiru1J0FfG2l|k4g1pEN&iAuz(z^`KrLXaq~FyH=)Nayrr%Evm@MgE+X$E{*=+TN^#90+v*V}FY)U*g zRD09Mn@YQnKl+sMdzaoGW9Yjx^~ZhgX5x236@5Vi<6M|-%s>J(4IotR^q0l zYQ$}!8nzXEQjtb##A+zE6+R<;v~+Z=A^PsrQkD4KhL+%$Q)z|xm+c#$8I7Z-l~~Ox zae63L6Fw$QORAsvVp26Cb9eggMx0n?wfcz%wxDXn z*-2GSiFiR${lrDBX+h$Jq1Z(DW8oW~Q}iRLr7H3H?U&%ijGoj^-&Nwiq39bvFuaEM z=)vK|&rVHMPKkIyQvJkRlByB+?_eGJiOfssFGS)kQN>OeFF5okJ87gwyfPFU0$&wA zT4G4hn^Q|w;xi2`!N1+UCH7tP>#3#6n-S0MVm14T!@E&6BC|&N4o5sSRrM2pnpBPW zLa5lZ<6@A|UmupbBCboS@^HjwljFeP<6(b?B7Q%q8j-0Q zeM5=Qj$j@8i9d+9J@1{!{E5CG@q0aKLE_D$P&MM$La|f8{}4VlhvPZ=vD8wP__KzV z;D6n|C61Qp7gI|WW=QN9&1&`&Z%e91{6?r^)8fImO!$dZS|$EGmDbPa5whHjPKsh{aI! z2baS~f9x^n&!?8E#4j|o1h3q_CC+Kl_okLA---BSQvJlgB~>Fb+n?_-#Dx>szJB5x zN!5tCiS;U;4VYQ|yg}m3C~X)8H1q5E62vv{t~VY_aHv7Q5)WsZD#TYqHJ(f1i+i(C zRpP`@TI7Vm(=Ysjv`B^cfgKi^HMj_V%%s!{acn4d4S0|6>iy)wrtni!Qx#^>J3Fa< zV&^_|SR;-MMThX{@a+5XmV%zNFD+Gx`-Y+=_`vYA6mJCR*{P)pbKosYs-O6DQZ*v8 z+xd<_?A(vF>L)U@omUZ=!p={Ph}Xn|v5vffCcQuH*4iTukDqKU+!H=p;x&vuFSS%9 zp5M?C{ITs@;;4_lHnmh?0=#b})lY1FPg-;0_@t^tCbshtAN z!2f;wmKYHEkPv9|DU!|R1s zf0^T7Pfb;rRc_%ywBApADXALq z8~$y0ZEXFD9shc2s=`EWyG=lkL7<$+E z>4#0`3TrvG-jZ(^anGcx#6yy*5l={}N<8kk)E4o*NmYs6$EPads8DPUJSKc>4p(C6 z^HNJy;&t0E!BCbyRJ;CM!Y|% zD)FTgS%q4PC!s3Lw$-0hjkq|eD)CcE)ren7s!Dt%sT#58WO}R;nN-UMnb>(ssv_Q; zRE_xUq^iV!Ih6%##79Fh%<#{`GtBXXp)Ws;ma4?%p=b&IO!#Pt^F#D)sig`tV=?cQ zZ!(ctuc8q?wL)K4VRdT6FNI=t;FaN{CH6%0Kc<$d#D^PNg8yavmN;QVZ%!>$m|u(8 zvwXvd->$OeRpP;?qiVz>LUCCN|1p(TiEU@pmyYe@UNic@c-W8A#DhaIQt-6xTjG5m zT}>@jn8oTxN!5tIOsYy`)+rwa;%DY;x6%wH`d{N=e@h@fwfzztL($jvF@{y*b)ncy z_)Fp0A>x37zALpLWo`6ll;LsdUBR58_*R}qL*r{su33_)lXcVRE@}FO};_IEvia!9xKtGi8wi_8j;DD;yLA*gJv2g9~ELX z8exezXrh;^590MnRf){H0?el5RYc}eiszKmJM^oms~YjOq$;mRd`pTMmzYnM6 z)rbp{suIslszzL%RF%j?McyNkX^MQ~h)h!CRm6u+($h)h=Ghg0H;sA@RIp;x9xYDDHS@=KiY?@X6+P{JEKwy+55=hkd`$RgiQ9eXxv8bf{D=#ZsuIslszzL% zR6lWjQdQ!Qld5cp_?Xm_5jQ2(PkbqTL_@(Vz;&_41e1J`>G|ny* zeY0;d&kz#^`DPNCF31Oic%j-Qek@e9%T*-$+H+WwD)G8dY!m#Y@Ve(aWAGC}{9UQ3 z$~Pn4pHz+bSW;EuQ%Us`wrzXV z#`$ynsb}__msLgl%l7TEhUk_>X$^^Op;$wBSonrDMDLwis_Yl>FexHar7JR;NP z`13?$ejMLg;vG@luxV(f#PKDFOo$UpaOgyDNNZ9fZcVB}{Ok7Ja;}KJ^uuXHiJuI` zh{9KfkJaIB8~UcyQl)V&9UmBG(z#bv#I>ov`Zws|M^#FEtf3TsTBXFz4W%#>_4qgw zUrbB)r+7ZYQp-flCsip#Y?11SI4-FgaePvh2@xkr?H_SQQZ?f2r22`>)Z=SUT$HM+ z#N|oVh^v#T67Nc?Mr7I?f5M1e7cdeP;_y%nFD>-6v_zFSJruhXe9ZPOaZE(dO)XU# zXXI&kO)xhP^Xd5b5bsnY#Cx{ymSY3@Js)9{tHjBn*Z}y@@H%&>e_o6~H8oXfoPozz zk@Cg9-(9oG(MCfM>XH6jz?_nzN@%D}I0Unz9WqbgLx1>fYt0S(FYMgt< z7i8uc=9Tf+Xo??CTg9|7`J^gL8uLCW;`>9zw)0h2^tEY;D)G8dyzt;JZQl~tX6U<8 zOBLpu`H2+qvF#h-#06bh!e&;9wNR`M+#g=Yf%=!T@E=S~RhSs&0;!Kg{J0b|#e72Q zlM$CoF?9^Hu=sOCy!B#MzCv6bidQv!yGn`7;6f?PBre_&@yA-4xS^pV_@^o*KH5+U z|4gOCjSZ#n%PJ-QB~-(HhAu8;Y^ubGq4WgSuh8)eE=`LN-ye#70X{dpnyP=37=KA> zs=^#DUz8%QNUhgTS>an$N?hGg3g52MJ0jjK^{t3Z1mjOBah(32-@h8(F#E&OcAzl=UEr2gkDRF5-Da_0*K2*dN zY3UmArlhJw=4|o9Dv`-qye;C3X~7zCYp8~|7c}#>c)P^z%hF&Fdy}dWCnr@UPED#t ztR__@o|9CKxGt$GaYIry;>M(^#HW+05uZt_vL)j4Qp}*zy^L+F5l19d85wbm6f>fX zliDNVyQLbZNbyl^oFIia?YOgYd@Ni|jZ}%ujpB_E*Q<*7R8lqKmZYl0-z8NcJ{O9; z8Gb>fM5ZsH6fR%RC{~FbNmZD&gy~0oKP7%#Rm6)z(Fc5qN{LGwO5qz-O8jc57Qmqe_We8%p8c zBVU;u+xn5}FB0{54Bt(h*-FV)vD-V~w~t zsVec~NmYm!h2n{TFHtFx=|U)lnK8syhsb;(zS2bI0P!j!lYMv<@dxU5UBn+s{V3wb zq^iV!ORDlz#LZIAMr76xUkT#hRF(NueGrTB)4xX65|K$jd_f{pfW-60>i|6=HBu!` zPO3&^A`owvI6YNWW<;DRbz;QDNmYqV>*2#m+^Q<#>!BKUH}qAXW=E&U&ER4==G{1t_Z~%!c5T-PXu4BM1Myu5x*NMmf%Viee>0fPL+5|C@u%! zuZNG8xY>kWms+YYYsW98h?}=>gw;Vm^qI6e#2JU|Z&)4lf25Ww%-Hd|6!CA{ zH^SbexSRMGn@Uc4FCq-YLTBV}9nNip*WQ+W7Z zMf|I(h_8lXuYzAwDe?7&QkdB~yd&bR*Dy#G;_6Uz1mCVw;vEg8@OqUJf7DP4KcQ0M z#)eY(8I=;ZG?c=>Q|WUNUy@=j5~d3A@gRQw+B6=-6`>dp_y&~{nP!Ai_(qiyZ)#{2 zzD1?P)eWUEQP4mdVoJ5HC18ilUY*4 z*{SvVog#RyN{P&s!r;M7m!cJ^{~|4(nN$3!A%0q|Uls9Msp}(7x;_mCalfQ0#L1yp zE%;!S5}7cCQkbbsd<}_(FVJ_5*qv0B*qc<1xGt$Gabr?7BJ*W3}&2#R8vB3s#6%g<_|IKdVwA(^60hzn)5~#O^P%wKZaIQdQ#Eq$=YgPL!Gy zac)vo;<-sxh)n#z%E3!hX^prnsS5KwFdc)B6>VBimg*Kz&$!8aKECsI?D#(5ol!y9LH;1v*e&6wZe7Bxa# zoz|!RmIObfQsO^_YS>uxGiiw`@zs zNkEVJ3R_Vnjt#{g2k#MH!*=Z89)~|9HC18iin&t6d8zgK{sW(@QsSb9Qh2FKiI+B% z!Yfot{8B?He5*={Ot!(31T)_TubOz@K;NsD)<%3l>cNPUZ%iXkJUFQe@sLog0(_WC ziBlU&;kBu>O8j0@72^F3OT#}B!P4-wn^~tS@ra}<#2KMj8a_^?#N!)E;aMsr z&Tc4$KcrIPd7<<=tsg}3%*NrPO?+mDMd~kY{N%5uEhionilYQPHN1MSzc1k{si_K6 zcw8(+ymW_F>f3;4QV!n+;>owv*Rio<{7vz=pN|u7*j|Xwr)wEI} zjtj*r5+1KoA`@Rw3Nv|ycSO8hOB3&C=m@@3rNp}$O5uA|N?hAe3jac-#QzqmalG&k zex1Ro5+4f1&H(=?yqY>`aEHb}otmmJjYiWy(0YZK3#C@-Payv8+gYSayf+jp1m724 zO`SHlLik5hQM}iB)lWyH@}fOBCZX^ z((w0GO1!_J6nc1P@yVm^(v zNmYs8OR7S=KNNkyKTs)gT|+6%Y#G`Y>+iaFX1?&}ka*l(X=91UhhjzGSt=zmYX+q- z6K6DBZlIY$!`FkjT#Xa2Y*-KY^C~5-XefnmQ7LhCLn(Z(N{LMB!PddwQ|bK?ACzL& z59ajnjU+Oohn}DM2^OAtJO-YhyX()(aq-j7SBS@lVzuB|DkU-p2&FJHet1X34{Pbg z5tm3Y8wm4q_=3cP?@4LZA`^U2T5n7LmmTGP8wvA6fFaTw1>-^4W43@@;Zi@)L47GINc1A9-?TKJ`%`A1PNPpD)); zzD2G?eq63hW_A$ow}o6Tq<)*oQ{*z_C30Ev8o3;KlU$zsqFjMIx|sScl24FpCNGgI zk=MwT$a&6=#a_!_bavkJNa-HO2ycm5WZCj2hM|$O&$bE7d^3`%#@*{FN@;13Vd16cIw?IBcu1H=W*F?TeE<=7o zE=w-8rap4yL*?@1g>nV*D!C&05xHja({d$psV((eCLb!-LS87>N?s+`Mt(%DoxDx1 zgFLZ4_1j54MXrmyK(2{=yOw@98X*G#@du0;NZT$#K{u7&)jTr0V|EA`t%K0+=-uF5r$m&s+w z_sC_*|1Os!H+QFg^JHdn@i8rsXQ-};e1Tks{8hOunK@s)y&U;JRF@~0hNX2WkPnqB zk{8M~lUK==$Pdev$s6UG$V?RD>z5&S4^QioB_AP|BUj~`$jjt1vNDY=(TQT$X&9T#kINT%OE)H3Rzr`9;+=kw^BZU-BxsCh|Ar zGUQEiS#ohyYA;8gB9|vGlq--|$rZ_u$TgGyBv&G5MyGx=1jP_9f~CD%fJM6Q** zO|FeRahKF@JGoD;gM67>CwZ-0hP+8GOa8rFhTJnY^_wNnl*^Hq$mPjv)h~IPT#kI2T%Np4u0Z~#T#@{YTr;_Kx72Tme4t#Je6C!Ee4|{J{1dqx zd7E6Gyvw^%zXkFPxeWP2xh&b_a^xrF^5i$=3gmrvPyH6jr^_{ym&#?xcgkhSPsruS z&&p-U?cjkx!G$ldqR6kRO&SlK&{zOx|UW)NhG=qFkB0RIY`5r(7$U zxp{m$+Q{8|ram&{qvf*XkI3c7x5?$nPskO>f0HYc_Zgr1Z6?o?E0M2}E0dY2$G4+} zyk2z~^2>5rGL!ZAvN`hH329w2!g1 z#l2G>BgwsTJ>>VwjUrzyH=6u_Trc@~xiRFPNvYpm$jl++`^#8zRdpHi6>?efH|28V zXXNta)_qdH1@bhxBKcgoX7Y`4CGtKvxn}YQ zL0> zrv%H%b2E#ysdtz@QO8aPIfdk;zdwv%Vcb&xNX>m;v{>mqNG>n1bvlJ`4|+&v}r znuaL`;e=e6Nza>{7?>9B|TO^+)*G&GLT#5XkT$#+&Pd?5qbH$NU#^{eom>a`ALTm9zm@AE7YUznQf0&*m1W8MsEoMpkTUWtl@TulxrrRFIOVp zB3C9qF4sbSL#~y~RB65)ZRGuCG!6dqK_>1WYG8B8Q&mQsHl&Pvyvm3(hm?`4DkIj0 zl#%DFjCl5tGV-}9BQ6?JM!ra8#3e(@$jenmymCkx`O7LJ-k`D!`5#n9ynRR+`MWA3 zes4$_`C*k2e>kL!{HV%^j}0j!KczC_rXgkIEh;1ac1RidFDfJcbx0ZcO_dSf8d63s zACq=VVoNCBEi>eiDkJs`DI@QqGUB_2l#$1)j5uLP8TkN}5ho8RBOj|W;&DUD$fv7} zc*c-2@_dyM&mK}nK38SLMMKKS7paW6L}fYha+MLU98yO9n#zbjA5unsOD<2|^Vs_H z>`!WeyjM6sBoX&kS&n?L%7{$q=&j|*N2rW=$uQKA? zA!Xz-$FY}Ji4&5l5GRHjI3ANHtBiQykTUYIDkCzXsJD=I3swo;2bD!zqRY_-OUTkC?aSh1qN^ElV{ ze&%!Pd`$ZD53g^oT<5;ebDn1wCNp!khPR|%4|ul;-nS=wk-V@>;N@<$f>)#?yTCt9 zW8igpG5F_c47@Qf2H%p#z+3ZT@UPMs`0KnFyey4@Y#$oVbQkz>k7dENZnc8z(gxk& z_A~~*mKTHHO=IADc`G5Gj22A+@?gXg9(@Hc6!EBs38b%WVXHo0ek zcb@2{0X#@nh;@b8V>UT8Fq_PVTN`+JS`EA+tyTj6G>w7R<;7t3rwt9jE$K+`^K@hv zxXVF)RNz*!!Vz?Vd!;e3cU}zcm&QQ$$xW)kw|FcI-sx5=cvsq>1YVKGz=!f;@Y87w zd?qgjvte&oHn7_yUk|XmtmKTs+oUmY+q@XeUcaFMxFj73-kOf=3jZpNfxpR%!5?}o z3wAl!j{xi{D>(;n?=%MX$&0~*(ik{6F9sjzu`Kv4w_3q(=Z%D?r!nxvycj$yje%$6 z#o(*b82E=Y))js)^}4}3ACgTM0PCv+Iw1O6h-^@R63%rDJt;K`}i3%*ERSQ7B3Znc8fq$9h) zH>NT0ro0%uG>w6GV9HXYd&{+~1kvMqI3q^|Jb$$o0U8n;@(lVl|) z6+Sohy2DST-d6CxQg3T`_rv`(^nedfy`JzTskaTx-qc|(z2Li*3#aQIAsbSMSP9II z)FB44BXx)s!EHzQnt)T>Y6Xvx6-IW2Pf24S`&%b5cy<~C&q}LxgU?H2;DvcHcz)^? z!EBBljugBnF9yHl9kSquc`^839%}_ZNn_pMEosd0NI%it{&SP|!2bU^cDR1)i5y121-~6`Y@r><<4Z zje%F>#o)yr%Ywgjs})?5jx2#6@>m=Alv`PFwOg&=vuUwnxZPuI;OlO+f*bNi!f&N9 zkbTvY^@hv7#qFgHWEb^t3czfd0uOVm6`U+9sShvkSR2ST>Y+Zk*i)?_JF6$f;NN&G z3*O^aD|oN0WF&ll8Ur85i@|Kc9=_NKd_5frvMYPi0A?%p;B|%nnGOXv<~4;sN@L)r zyqNR1IaAsH+`hey?b|b+Y6YugCDVm#(->Hn7lYaEJ*)@#y>uivFCEzpW()W*61*lI z2`)@W7Q@%4F>p~{3|{H6Ht740$vJ?>r!jCs8Y_VhN@E~<*N18)@HCILfhV}t3QkWObb(J!W8f)itOTCtu{Q8x zw_3sZ>BwUE(liEMmc~lppQJHxK^iNDuSsLz!n_!KhsWB$JKbspm*tIw?@MFg^1K-Q zU>XBgP|JJ;tvru)kZa-~d_4l?4w>W8k2?7+meKELi7OD_Ea5 z5+0exz^1$ye2~Yo;300cf~|QY;X~6HcvxNxKEY#c;7M+^f+wdVOW^OMG4Q*2F?gQG z+Q9i~tQcO9dR^dad}u4UD2)}vi&L))yfpQS;Wb{a4P2YXy1*}btQB0J#){#;rZI3s zUJM?1ESF#w949MWZ$03%Qm-d`YwB$SuS>mNaQCUX7NK5mxGMGfz*AChTX>qh@E`-8 z;8rU*JssHvJ~@qnr=+nGcwXui!z+Dg8~ChSS#Vw6NcbI(wSgP+V(>>EYXvvu#o$lU z7`Qnv2A57N`trZ9Mqq!pTEPLbzPuL^4@_g=pfpwjmwBuWtaPgt%%mfW;hHoC*5<|F ztjF5G$$2q&Mj8WW<;CFH9?OFB@?!9UGzKnAW8L88X$)ME#){#UsaFE8O}%1xed=|E z+vSC)%ixAIRt$ff#=xP+`Kbqo$x6;MoK0ik z-~n#6f@9K=CGhw(22RL}!6$kw3tpSXwt*i@ykh zrd}z$Twb_Qf={{C2Chv<7Q^ix%YqxySXcN{kF|k2oygUd1&7K?E+u%sGzM0sv0`|h z$J)S)-D(Brrz5+-m!>iBvb-34gU7OtCvgOA#lo&`wSwJbg@ft>5A|3U+|8|4a9G|* zc+WHj?v)pV%RH6^Gij_Vd{!C*Z%t!c!|PJ72i*N+zXW^2RjIcPd}8YLg0D@z-tfbz z*9TrBFWfA_H{8mC+n?ey*%}_3dOhH?Qm-d`YwB$SuS>mNaQ7MBqc=P}_4>fa$O|_l z@bWaaHT=8O>jD2G^?JgCzvFGUfhVM1FZlG->kXfodL{5Yd0~3s0=L@0#cpN6C26s( z;ALqHyw9yxaCthi1b#4$fh+Q2@XFNd3cu+?v*7mM^+oCdk4?Rv@L8$14SZwj^@116 z3s)W3?p79jI~~~t-hO6oCSiHOL2k8zgJmUm2=LBn3>=ylgZJ}T7A$kC6)evi31`w6 zSd|xpYttB5mluN@(-=4*F9uKcSQeb&RvS3att`0Mtu}C}TUl_UTWw(XQ~eBpRkFfz z_lBpWULSZ`>UD*0O3Q(((^zl#v()PY?{k`8mD|E?sn-`iT3)zjzy)r#fq!x<3qFw+ z>joE}&f&L#UEOL0yUF_U5lLL?u`Jl%tyXYAIFn8v_Cc`42g*3|0@ zuS>mBxce+$-hOaZ>TL&4NxlB?JbB>;4$eC?)e5%D3fFTt`1LdfZpe$lZ>L@t_;Vkc1xvn{E*d;YUbx|c zJGs>g4oydvz`La}a9Cap-ZPDXd*#L8ebX3NmKTF7(-@e^i@`N%46MzI!DBp@1t+Aj zE^s#WO5jt{q2R1E)(w6rje+fMwSjNDl?DIlRx7wsR=7Y);E&Q6xG66Nf0D+)&1tL) z{8<`vJkzh4F2&;QrO6Wn;o)hl2YgBD^@Q(Cy=~x!<%M$KKhszbc*og3lb-N_skaS$ zPU`i7Z%@76@c*V>AGrHj-eX&McN<@YvMb20knGdcn7*UT=6^>h*!UpW{8Yg$JcxUwC}#mBMGIUO)KO z)Y}eTmwNr-?&o^n0dQ67Z4XaLy&d55Q*R)Am%MN)!28{51D|y(3*K>_pD=K_tZ+;0 z3(q>=W8gV%Wx@GwwSf!V%7TmBY6F+Jl?B_~Y6IVPD+_Lvl{~D#o6;CqdVx+=AQ zaVra+=vEsz!>uehOIEV7@WM0(UYo{x!Vh_@4czEf792FM=*$1Y{UKQHRu)|0RvWlV zR+!l~@Dm zZe_t*x7xr1-O7Tq+-d{QbgLDdEi25T8$2hCf#>AK;Ef(@12?C!ZQ%JAvl?yS61TG8 zO1Ij;Rc>X$HEy+me|D=CTq`R%CiulP2C{X15`)>hKHR`SHl7bx9#}Tt4+&(K`H%wH zWj@pb5BGstaDl8aiykn$$_KAId}}%sT$c{*33tCFH?=Ty8@MXCm3=K0i#S0w0}vz2M7IuQ&W)>h*!yO+J|l{JwHwD&RLR^|n3X zF{!r=d_wB=f`5>Dy19$IkH4%7qDoY(E`h+r#WX9S#+|A{`0teT5$?$WGCrKFChd z$(5i1ANjymaFeVsi!Lx5N{3<~8%l>_VE-$bMJqT!Rw&jL9+<|!L3uHFg~!@J_M#5c z00&(~&o*$Ftk837xGarh*=6PQ6n2)70w+@3k=3BGlUsJ~H+C z!xyIB0GJJr!;C>TIS%Ez!}n-tSaI-$wA!{Xn-7PfePK2n4qho-dM%662KJMc#9($A zPRhY$=}?e8g2Uv%22ZtuY#W>ugAeyu7Q7^#$F}hOsn-{NBlSw*?XU9_(GRXoz3pK3 z%MB9-*&{d1t~bn%xFH6XUGEDAvYl;m^!n|xGzGF3ZAgJ@(iF(XvmpiEu*f@t>>3+V zAiKtf%Lrt5*pLF*9X6!EV{V{)7Q9?ma-!hhrCurgTv(g`Ci`CF$ z06bHCnFL)2UYqf0}yz;JtqCZMTD)Qm;RJW$F!pf1i5W!|$fv4)9JldXItd z#MB!EpOJcl;fv&j!v&Y6vA*!DsaFbbdy}{A2aim>?ckZI*B_pndIR9!q~7-ME2*~w z+}phGK)50G2EoUt-eCBm)Y}nWoO(OKzm*r31)Ozru5Gw%!EBX zNe#uo$I=w|v8+&kdwBO-a`l6^1AKVu4TLXAy+QE(sW%vAd(u#ENBCpq!qJ1f|H9jD z4N)Efl9k$QvS?SJV#c7(^K-cImYskbwHYwCRiW~0+^XuH5KD;Ew8 z?6t((ZV%U|-VX4L)Efw2oqB`dds1&O%oeA~D#QO!E=&bvtI}{;fb26GQs5o8&G&vh8E&39{{Dm>I}U zkD*vUxaE#?8o~)~Wx-S2Y6IDnF|-8Plrgjf*clA>~h2X&$E2!juIugu_U-77bEm3tKif8<`J z!EC6QtTSBImA+L5Pj|1{;A`BgG5AsUY7J&X#gd{rgNwV-V}!x`xmRZJsqU2t30`tK2I$xM&-CR2aO!dzA(s z<6g$#%iXIo_+j^|4PNhFjlo5|=v!;>{_fQoe2jbb24C)8gTW8G*J$v&?u|5f=ic;f zGI)}E%?2OkURYD{CGM3O{E&O)20!WE2!pq{S7z{_KFlTD*NMlvS7z|{+$%TuO7|)Z zzTdq{ga7Vc#^8S2(znXs7Wb+RKHa?wKN_bLqji+hy@ z7xkk@#^C+kt1|c)_o@xP+`SruA9krAHdi$gU7m8Zt!gPDh&Rm zdzA*Wp<;3!!0nzJVeo+M)4uSv?u{_m+$%HqS@+5f-r`<`!NYf;N2S42+{+kzxqIP$ zSNyPh;eJ>Au6s2GZ+5TD;HrW2EjM_&dld#>?Ovt9E8WW&%!Z03MO6lG_FU*I-g8je z7ar|ig~2o2t2FpV_c8{rcCX6dE$&qtJbW;HYYd*^Uai5GyH{uM!|v4^{H}Wq2JgHh zJsJ(3B}L)<>i3s;E@SX= z_o@tj-Mwmqx7(GzH3pAzuh!sM?$sH5vwQUhv!P;1QG>xfzDbWVgKOL?H~1v?Dh$5X zy-I^uxtB5cBloHd{^oA@en1 zX7F71$_>8Ly$XZhb1&RJ#5?a!z3^`rF&io-_a*RD&s7_IrF%67|K7b?gWq+p&fuN* zpl`jwliX`C_yYGD4Q4~dlA@6Yzv{UrgSXw29?b@ibg#wWneL4;_(u0e8@$@R0}S5c z-WY?~P_d+Ftigxu#azZ2{C)Sv8+@mG6AXUYy#o#Iy*KqH8q9`@B}E4rJi&8i2G4P? z+~6hdRT%td_bLtUvJZVT2A8{6W$-ljstvx%y&8l6;9jl4@3~iJ@Xq_vH(W2`N$!Q~ zMSO~TWd>jGUb(@m+zYQkiP=ywxle@u?YT08_Z-e#$_-{i#pHQ0JS{H=pYL9U!M|{? z(%=`|%NSg|AAPF~9^qcK!Nf$}aIeDPf4Ns_FdHf+kE`(T{h436 z!EC6Q+=s!Zd9Kpno7~G7yxP6+JW;&Gz3@CyJbVOw!}CP(6!*gOMDgYBh3ARlhusU$ z6UFbk7oI1I*-){hsL|loGWw1*_(J!Z48F^~W`kdLuf^cr<dyEoS0E$)pom<<(^=M3=p3g%K~aMryFgXg+eY4C5{%NYEMdsPPauB1n`!Hw?K z7(COxT7z$Nug>7r?$sN-#k~fD2W9BnXmGQ8BMm;yy(WWiakVc@#pJmje3|De41V0bN`pUkFJthqT6$C&e3*OH2LHgl z8iVg~uh!sp_v#G(!o7Nfcdw&wgTa&CYc%*`_eL6guX{}fzvf=E!EC6Q+@Hd1sF*zV zz-*|P+@|4lbHxgS*<>;Kdl}rTf#WDMcwhI*4Q_U?%;3}9D>wKi_bLot?Oynsh*WAPpx>siKo9>kxy!}XeR2V$ky-I_Rbg#_dAG%j=FdN?` z=Lmknb7cnq%e``gcWX-L0@t`#X7EYwl^cAmdld$+a<9^0w!TXqyWy>x>04!Rm3!3& zPj|1z;A`BgHTY5Y>J0wSy?TR(wiJE&Uvk@rFLJNkU^dH2u5p+xuab3!uOCId@LW&) zxO)`_f9zhR!QULs*o?vK4wdwPk2ru_xxs9%lstEYug}ZD>)fj_xZ4=&RT^CBUdG_# z-K#Q~-IbF2XZRV<)foJ$d*udiJC?o`29I>F(%_lyWemR2y()um7)QNwgV_=(Sr_<; zyd3;5_bLo#Po!ilTsxi~8G}!Dugc)-+^aVDG52Z=-sE1b!R(2Y{7o2sd;)#LH6&&S zo#b`|v)4>=zYEVfFdYlu=3b@2>)gv2%w{vmzs2DJ6VrO|0q#{AJj=a|!GCnG++em` zNv?7DnS%r`hk<1U?wT)cH;5zrhc@wv}7tWh_hI`cp z-{W4m?Tepsugc(0-K#dZ-=WMU-1fzLx|cEd2=}TCzQnz1gO|HkWAN+l)f)VTdvyly zei(D9H<%qZlE*EWEjE(#3$p`8vd-}Tdc8`62T!I)#^4d|RT_M(dl`ezb+5|cN8GD6 z_W*N3 z;rbJ|xtB4RJt>lU@P&Cfn4Kk(=esalOC|V9O%iOCmc%^&cZ-L@9?o}Jy?q0^=jqcSL zJoKpa*x)kvY7B01ugu`AdsPO{axeT%M7-F&N`u)|A-V5_+dWrhaPiU1ugu_5_bLq@ z>R!g+GWV(sX8(nxFMOcqG6rYe3$K@mr@2>U@GSSj;r`oc3j zS8MPB_o@wMXN05&%r*!~J(ztEk{rx#21yQnDz69J?q0aA#O!B~JlBKS&mg%Uf_+zl zkaPYvYg%n=QLw9fRR*(HK}k`K!R$DY^o6rNHe>KK_i7BDkGHLS7Y!-_v#ETJ%%-{Hh7SGWd`rg82sgWX>>Ocb}{Q zd{ACJ_%Qd%4L-rW8iT*9FLJNU;KlA$7`)WI z@O}{SO806FUgKVk!E4>CFu2{laQhJRZS%=-z<+p6p(^!F;`Y@>~F3ke7oOx|cC{k$V*eFLtlo;3e*bza5L0x>s)SGWRMB zUgchRue10`_sR@j<6gPJYuzg|c)fd-25)dLJWh*0bT7OXDgM~K@S31_=y9COT7!qV zS8j0Dy*h&@yO%MTuY*rsTY_hKuF~My?uGY7ihtx@t-*`kt1);5F`*8NAlL@ZNp#diTlm8B&C9{V+zZ!>crW)d z2A8>4X)s@1pY(vUo~tqV824%op5tDF!MC~BXz)7sMjFf)+9&UKg!w}II~+a@00r>n6J4{p6kJUr+sp~@G*Jy;LF{sH~3-q8Vr8dy+(s~p3a;{8a&Cp zCW9|s1=u;$DTpW8BLaJi)z6gR}01=M3V>?o}B) z&AmEo%7 z-ryGZ8Vo+&y+(u2bg#nTdG6I2%vJ%(eFVJFa}@?JaxY`>V)w%9gkts-NS=?wOY?Ft zI|wAVL743VlG`u5GH)!r%DwP@Lh;|+t1-CGcUiw$gB#teGkB(Z^# zUJf4WUWLK?xz}KDxqFocv*$o^F5$Yo9NgkwxIYz-aj(+g3GP)GoOLh!oleYF1W8|b zhUe-Hp575?o}AP(!KESWbqpJ!hNT> z-Mw0aH@eqo@MiZK3?6trJXTxlckUTcR(|v4s>=B>hUZuga+^aBnwtE?a z&vCEP;Cb$a*FeSd-3!lY#Fx1jp3{i0b+5tTRqiz!{E>Sj4gTh7tV@%@ZSFN2e7JiV zgW1v{Su1#+=jsi<$-M@HZ*ebU@U8Au8q9_e$@5N_4Iz@(a^aVJY^}i?-3!md#OxgL z<@2!9bH|=;84;d`$zz|0>rV=3%tN{ zl?E?#FFb~d7r9qy@M8DEYn$RF?qv*K=3b@2%iRl)q2d+pRT{j~y$XY$bT4D@TK6gq zUhiIo!R_u<8oa^1@V5l<+wO(G&xkj=7aj-2o7}51c(Z%qaZp@*2In`tCtuvdy^O)7 z?uEZMiif&aZ*ZA=;or{US?)C$JkPywI~Ol-uhHN|?uFOz#Eabv&ymDS+zYQ6iI=)p zZSXSp!Z{bOaIf0nmF|VtjKr(l3$Gc8pLDO<;5F`58NAlLa2<%(yBDqlal3or?{wk~ z?qv+#=w3MI;?La+?^lMu$N9||n{)JZuhQUB_bLn?;9mGQqL^(ulG`dg%yZ%OA@N@B zRTy06Ub(>;_bLo#AC2Tb5pMBZ#^5pTh37fq$?k>cFXE%zD>rz$dl`dIaWA}nFP`mQ zc>ER5b1yu95zlw8!r;r?t2B6ld*N?3;)U*o*RI8j+^aJ94)+=izRSIg!S}cq-nS&a z-@S~%Y#ow3&cJIt*JyCNd-VoyaIf0nx818Uc%ysaIu&nnFFZ#VZ+5TJU^WIxt~I#Z znOx5e2KRO^{QFmYuzR%zU*KMy!R!{2{QCo5?z!+@EAi{@h4)&Cx0}se>I@#`UcJGy z+za=A;+x%TH2699MjHINdrb!KbryY_4Ib}ai@|Icl6-~(p5wWCgD-P$l);PLYcY7G zd(8&7yVqoJ@!8C8q`^boYc#mUz3}gD@ih194W8#-_&2tAv3s=!v&%{HTn}FAxq5?F zxmRcKdiQD#?mdU&s57|Hy?TRZy4PUvjqWuXyxP5y25)h%$zb+ADJg0;xcMCB(qiyw z?u|0|Cig}gyxP6+xli#H_rm8s#lz2~$5?}pa&Mf$?0r&FG~VFFo(tzge2;r04Q5A_ zCvjC&0RPj;`~;Mwlg89dLu@EW(6tznYe2Yi|5stsnp znB?^hc%kQN4Q3OWq#nH3bKyOFVs@5E>cLArH__l#?j2}wyL%H1e%rn9I3wQVUic0J z@n-i9GPv{t)_J1A1Kg`Nc#wNl1`l1^xmRs)#=RF$Nk&xq%_*KF`&_nHh|;@(Ju zm%3ML@G|$pdp^a>-K#Trg?qIIuXL}<;8pI0?@16p>0YhD>)i|AA0~dsy(WX-bFaqW z58cZc{IPqr27l^a_&b=m`1@Rw;oo55Zti6a?%`gQ!KLnnzwL;>;a;=B`?xpC;QieT z-v=eGa4%zUwR_>cQDU}8N?t>OCwQ*f;H-P${juW7?o}H+&Asp*8}W4a!gF--Del!8 zJj=ZrgJ-)}Z}2(p)fv3dy+(tVyVqdw3is*^Ug=(V-BG;Cz3`b<@f!ESzX!!@-K#cu zy?f#M6Sun;-s39X;9jG_8{KO#c(Z%;1{Yt*wHE%4DDLK7y}|4>mAuXcZ|}JVgEQ{c z8$8*)I)i7sS8MPk?$sE)+`U?Z*_0}o3;b8lRT})NdvylC?p}D_E`H0sYJ>mjUX{Tc z-3#wA6mN1beBMgD*}d?3v3S5-*16u`GWWu3BjSvEjRt4kYcTj2_Zkg8&b?ZLPjs)w z;2G|P&lZShyH{=SIqp>%JkP!G-ca#n?o}DQz`gK(e(^&0Dh*!jUU*GkywbgJI})#Q zug2gf-K#QqjeFsH)x;a!3-9q4Z*ng@=MoQ?SM=q7$#YS7kb4aV4|T8F;9>5C&uELQ z+#6@`WcS7zJlnl71}}8)0E3siH`?G8?u{~-ZOW2=!@^H`F1!{gUgKV+!E4>CF?hXu z;cv|1cK5>HPQ)ABt1a4)H!L3NUiiGOc$jve$BlGgWqtk-r#rKYcP0|d-VoycCXIh zK0n}^Y%sW=d*M9<;-T(^e;bI|m@auA0KAvysthi3FJo}Vy=sGN-3#AqB|g}_W`o<@ zYclw7_v#Hk+Pyl1r@0rt_eeb5y()uGaj(wcS?<*u%uad9zy08IJQw~ZEMDkdlflc~ z8)@)b_Zkh}=w5j4BQCv|^Hy(gnS0^!S6u5}t-&qsjWT$edo2c^>t3_L^V|!!E%AK! z!fi{u(7o`QuXvGr;cr>u#qNdo$BLJ@7v2vdUgch`!B4su9xugf+zXGF;WKQ3PFUY)^P+za0~EFOLdYtUfu6!#hpzTCZ$20!dx zlfkRp3+Gb&k$ZIpfAfd*tv9&My#|Blxz}j$-R_Mvn5_bn_sqg?dal;s?JuQooxv^c z)f+t3y#|BXD=>M^1z+X4CW9Bd*J$uV?ll;^*1dXzH@R15Fk1~K*8yC78OPCN@KE5_?$sK+*u8L{BWByg&lyu`gagIBp1Zs+0+?uF;n;5-J4)==}%bG@doei-Z+CNyEoq8i`|=G z@V)LGXz*+9O*FXla{3-*Fgs0_6iqUittLx~#uh$7=tIfcYwjO-5YK2Lia`)yv)58gO|J4 zZ17t5!rv0a8{Hde@Fw>v4c_ct`1h8$_)69w{Ci8>&Asrtqqv8A;k6)fse82s4{$GI z@F4dp4Ib)VxQ`XLxEJnY#bexSFnEG{^#*6%3!hyQ&vGyP`$#<7z3`fc_#F4bYaZfx z?$sDP-@R&sFLSTP;05l5&v%O#x)=U-B3|TP_}htiv3ucjf#N0Zh4(Fqm%10;*CJl# zUX{Vi-3za!iC4H+WAIA%!sngEPr4VLJBru17oIzc*SZ&8KM=2XFT8#rZg($y&O!XP zd-VoybT7Q-Cf?*;c+E{*d==MjjltdAt2VfYd*LxfTR$M_y?B{>;q$BF zPOA;>=3cGAJ>07?xYWJyZ&>jF_ri55-qpQ>4Bp+nN`tH2YcROQz3{wUJjT6dgQvUK zWbi!qMjE`pz3}>wc$s?*1}}H7-r&dFYccpK_nHk}<6ijuxp=L6;qNKp_3kwo-0og@ zFOztad*QWV@qnv2Z{f9J@gVoYYs2E9?j2xoxqD3pSGgCyi%`rC#mRGOxFs(Kvu$yb zgC}@yl)=;8YcY79d*N@h;`#1{=cnS!+^aKqfqUUxiWj=qVDKXM!uOerm$}zy@N)OU za~knl_rh};@kaN;a~km`_i7B@>|V9O#Xse|h37QlZtjKWG~yoag}%iRlmMu@B2t1-CFy=sG7+zX#U6_0VR#^4F=H5iz0n4*a&MHu z8{BI#xZ5?H^JasGxz}WHm3t!%p6*__UlU*BUbDfEy4PaxhwhCsc<4grGTPu)_YN?a zZLpJn?8+gJlA9}`(r1cm4Vp|yCl5N4W8sbXXPfA8LCgV(t?%HU1zwHQ3$dgjt>aK^o`R$_M3 z{&KD4P4?U!unhjp=UX#J>#hvtkS9&fy4->C)FT9^Y{G@x~-v(kf@=jha zfnW377=w!!u?7biJk-5#n-RCT7hZ!GPjfH41}~oHUU+;HFLp1y_ejis;mPsB><*s1 zwgj*6vEh9l;_+!tFHh9?2nDYS!vsZa?e+5tXT)6KPU*lf5?-W1kUbycR zf9PJg?-URHIeo)*AZD}j4gQ0B2N}H9y@>{Ia_>Nc2i(k@Cm5V@Z@j^i-5Y1{ zEceD5JkP!GdZKu-dj}Z2(!J3Jx4SpW;NrzaU;dXo=D|bVYc`mj*Gt0RQ{cTkcc8&z z+?!zVboa&^Jm0->1}|}MtidbX8)NXh?u|8g=UX_AaRyIvZ@j@5xHrMzJKa0b;FsN- zXz+XPjWKxVU(k1~!IRt@XYd8?jW_sC_rm@{;+NeE`wNMC|B@bIe<5+BdtrYe@l5w7 z8GNIA2OGTFy+aIM>)sfHyDp*cSc5Cv8)xuw?u|G2a`z?}e5ZS1oyF|tUQ!fZ7=zp0JHX&i-5YIik2})ifQPvkjzc`gy>J}j z3GRjC5Knin-r!T*3-5Iif8V{424Cx5qruDF3-2WsuXQi{&04(4z3?|{@qk}(Y_$ew z+^aFT*1c*yn&!qO|9}4%C13vVp>&h9>o0SD>yn&)Tbho{(Z4#G-%fRhNt;!dK5_kl zoy=D%KUO+I_30DWukB=hvhpWMhp0Y%;`&E-GJlrxmrDDpK7Hc)=XElFo$^bhMXFDq zxc<*OnZHl@KT1D{`o#5DbTYrot-0%QSLrZmrL^@nU9Zx(-yWUJk5+!Nv{`lO6W1T# z$@~e*pCuik`t*tGpVG`t*tG|EiPuN0nbAEmD2@ z#Py%(Wc~})E4e*)-E@=omkzum=MR&{{kH04{+r5Yq+6>led79ib~1l}@`p=5S(=+a zed78PI+>rY{MpjCRG&U^{TZFi|3vwlq%W#Ied78HI+?#$`Bl;TM^zT}q$0e)mr1_f)=0dcBlBasA<)%uiJQaOtH|`o#5HJDERL zx2NNzCrZzjUM#&r8uvT7llkYAe?huV`lj?F>F3h8-;15hm;EYtdv1_kD!p17*RSei zp1R{TZjO{bas3wkzN2|^hicqZ>35{Fr1XvZP15iG+wm(k{u$}OU+30yS83euu}#tF+qj_?F*SHU)|CSc3AARF~FDv)oj_-bPu3|rFf9W7;+^^4Xa_d_v z9U$FVdb;!+X*_<1PUfk*m&Q$%(kHIJtA5|nJh_aKs^8K4IjVP+^m*xeXwcB==hC?Tr=84G zcSqHm8}*6n576&BnkQGTai>Rp;`;mQ_Z`hIRsIoa(Y?8K>LHEmKh(+maMc+ved4}c z{k77#{>V<|se8P}J*c|$iR&MwTu1ZdzOQk&t3G|=`e!QF(LA|D8h5?w((T{#P#n`uA_N!&uQEo)u&Hff0c3_&69ga<4#t6`o#5LRj#9Xa>c59q?A5! z{eP=|NAts%=dSnh(jgDze%@Ca*B{x*Jav!PxW1}OpSb=}%5^kP?)w^7r26!U>z}Dy zNAu(sY1{|*=hlZlas4Zm>u8?beH!U*E4!5zwVG*9k1jeB18=@XSNTBTe^^W@&q zxJOieRQKknPh5X{{l24la@87lRn#Z0U#8!8 zH2-fsk3V*Pt`eVXd`>^d_3!;%?)rUJdiU>hKR+Uk^MC4Op1N;q+|7T;)&I3LuKzdX zI+`cf_2FFIt5lahas5wKzoU6_yQuzL)u&Hfe}Hlw&6BIsxYJdiK5_jK%5^kPZnDNr zRek!z^(QLV(LA}cG_Fu8?bgBmwN_30DWze~A} z=E<$sxFM=fpSb>W%5^kP?o*BHtNQeb>wlnJNAu)%F3vKggf{Xs*tQ((g)7 zlg^RGD5oNQX)Hl#Y}jpsw3cs^Ox?`Zy19gm(q;dYY@*kD1lK#Cw{_Q7n>p%3#oSq?_D_tO6CXM@bliyR?Te__@t{0ErSGh(h zeSfH*e=KDl@%a1n`MQljP zzN2|^muTGGQJ=W}T>ZYI`O|fMohLnCI!_wcUnKu7>BG{;3*-l`&Ru7ZOCMd6`}rwp zT)#oNJ35$uPr1#~xzFe7UnPy}liT{)TyFexIXzT5O?t949{;)e{I}zWsPDbf7c|e0 zq&I3^9+18uZI>SLLT3|v^UA!p z(ma{>QvLi^f%(50_3NWPJ4?B4s2|Ut^L9dX9k9;Kn{{SgnJ4QS&vV-UTzjsHxabG<>I zH(e>^GpE=5Aa~teD~3Zp_(l4aj%=zlu;|*G;Tck^*w-;Ey!GF%x`IdBw^cT{# z(gAC~y5D~K{nw5ET)Fso_g3BaslP7Q=Qe4auTk!nC_hm7-K6ExW2Ez>7fXLAy;54J z-yQ06w>0h(&+j4CyYPQ=$8nXk`o*tazbBM0kMg(c=li68l)fh|RlWYw9i+QR3-znh z_-1L`CqACjRPSo(_t)o+<9cbF|6V8aKU03Wl)85psQ(w`UXwN}*IFR|g>r+V+|dQ{ zd&;krGLPRC$m6fn@Bc1+zd(M*OS$#i|1UXhmcA*C*K>~YuSv-tsr(7jGo&|3S4#gR zeO&sSv{1iy)aL_f+$Wyjr>ggdzvhnTdFk0N=YEd!TkH2{MESS$^GDJWjo(k2l^!NN zLVB#UP``6kZ>}`%6VLBQs&~jMx%p3(ZuPgXKA!89FNyMV^z+5itEIn}wo6}^zA1fQ zTBu)7{l2d>?h_x+V9on)(hsE9z53P1v!{N4b(G&)`To*fr3XuANzas?Exk}$sNW6h zbF(z=6CclZ?YVjHAl*?qO#13;x!->vjmMMQOZjqXgYi{lW-5P{bguMfji*jLp4`RCUn;#$`ZMV*($iJ%Z0UK@xzf0P zXY+;n{#yMD_2oF@{>wCOx%6S_i@=dO>b(s(?%rggJ?ZJM=dQoG(m213{L(0Q zWr6%M`432oH{|N~md5pKONdx{=+(1KR%w* zRQF8j+0sJ&o>0Gcq$6})wMi#SkCev!KGL}OdS9yRKF)ukI@}((F5}w+*D3QZ(d}a| z>G!42NDJM5nAfqI&z$IX8TXCnd$96Z>7mj>_2TibX?|}@i~lco{oJrAr$au@>0AHG z>D*6pI%;!H=SxrDlKVNX|B&i^F1<>1ZjS2RuDW}uUPij>r@6XENaOlXcd~vwzFu{k zq@%v3-~J!v=5v~qdEc%1za{Of`45(ITpY(w3LH;!C+o+@bGquDDLq?SsNc=%_m(t1 z4$cGTn>tSvnE$e`sTa@pHr4sH^f%H%^@r-Z94)eovf3-o(Pb-Dd;d*Qm~IB)$dcU^rXolxNR#6143dG%FaZl|0l`ozcc zj>f$!eP3FrUOfH`&FdWL0_k6*dlYr~a!9LmLUHcrlcc|w-rhau$Mvc6=I6RU`68#( zeO`4BC{Q=9_fO611L;T7tyKT5sD3G9I38c&^gJh_vUKTUd$v{~b+6OSi%f%5aES4u}{JayvnAHSU`djJsTjj3z z+ohjNOSaDWQ>9V4qNA0I$G<0k$k&WNwS(g)6zD%q{>jqsNXPfc&HG5{UDA7`eS3cO z?YpObACJFD{_|fm{u><}zgf9>Jtt~jQ>7BISAE<6u<<9z={H9LksTG(LiyJU)NL(L|9A5LBwZ(cwLreSG&j#rr6c;~es16HtLI;>T)lLp^mu8!zURrm zLQ4H+^@;O~lw&^RzF#1}O!+6JQi${dm=As8`9G^%NAq2^&f7@0l@5^3 zmtG-_`;i;0-w&1UA-zR2XrlAs&BG|J-$Y;DDUYm6q-B)z|M2mH)By3hBMlxc<}fUy)M(D)ou;Z!5=q$UR#i zUo3x+^loXPeD_Y~sk@uTF(3NG^Z$l&9nBxMeQuq4BlKw_|kCb(Y$G@QKbn(F4 zI=(1fF!-yl-~UzqFVa_}T{JGPzpMOARR4nl`DXddhunUHzIr}KDu24PuX2U*Q#zTa z?s*!=eCQJ&?`-8dn!iu;{jKy5(pA!o&cnz8=Y!l+%CC|Bue43$jwvvn++UU7ApM7Q zoW@ZnK3;MkD8E_yg_L&r9gg@@?G`&N2G=FpLQ}&-R)GD z`Oqgm-X6+zG+(rH?!5Gu?yK`uQ{a5{>|}n9@)t^fAiZ3AwECP_pdY!bm0u+Nh4f&J zqfWdYy`IqBiM<@(Q&#{K@TasMYBsXJ}Uhm zX=lgB`RjEYf090)~R}<8tX6(oF^CM{ZG+<2s1vceQdI&6E43#=RtE zUUB`K^!twH8?+uR(y`Lr_Q;*rX6eX%azDrY)+yg>_uTL2?wQkt((9!^lNK6Zr14#( z-J^P!7Z~5B+!QJEov3-o{m7l9Jh_t#E5}Yca_HdKG(QDsy|uB zF-N*Vx~ahNeckxD-!tm-iS%X7>z~qHbRG+x&tr64r$~P+y-phUJHC_oL)HI8=`87b z>2~|(*0Wj~_d6jPe{q5FyA&AzOXcr~`W4EbryPCA?NOlqO!-esZ{9C=JTFSm-aq&A zmE}2IBz?9b_j7!_=c&%6QpR7bI&q#{q5g6HD%Jf(G~Y)w-#Ab1aplQzd~yEQ%Kb+A zfV89IZ`E;j9g$m~=gV^Xs+9HHPV2W&dZ+Y{(n9M?{X5m?KIwDPVvVPMe0=YJ&HUp0 z13KR;r8h&iOE^VuWHZC0M^nRP039tzbPrMlGX zrsIh7HOh4~KTi2Wq;1kt&AUd*antv|J)T1SPF3Go(z(+3_#T%3ft2}8(mdllxi6Gw z{sRiE-zMccny1dLs&}gN`~vj{%kOA@s`4jBby@%Tc*!x3jBY>QlE(R+v~EMB-;}bh zai06lFLXaOVtDTUCcYm(O1JxX{37M|)cxn*q;E+-mlhiTdyW6AG#(%KBS*iltN)4W zekT1w+D-G?TgO#f;P`5kJ4X7Ul)mx&ChGSGOWUL!9e-FS^SyLD1EgF>JWj;(<2;Asq3f()W$wBdBK@XxPwC#$5z=welcnF0&XHa%y;=I0H17X({o;JTOm3co zq-D~xrKPpG-#1Gik-j4R-@4rI$2R3Ou1}o@s&c=7UV3VE?&mpD`owh$)jLn~yHGk` z`iS%sX*~Y2Lb+&uALwW1_lf3tcTH~I%r~RsXC2~xH~g3Vma5-d(n9^?eseXS`O-_j zW`5i2I0s92k?tj(tK;Rk<9_6ZE1!`zNn16ZI`MdNqm`d1oh%)p@zjaOlRHZJY0~dV z2WmWZ;_>88Q~qq}Jn7aNPn~!?x%tXpF1=35d81A|p4`ur|D|-9G|o@a?Q9OWx0c-X z*jF0oPwiy>0_EpRFO_DSbA5g!EsFYX(a*g`<#JP{@q7x^|E2oeCcR%8kN-dUBcl1- z%)Fuj5M&k;NkMmC{|BCc6)m>Yl{+~OUr|!EN_mJw+C!P<- zxsP%`lrAhVpJDPlnmFFB(L+KM^a^u>i$BxbY9M`{c zLe9TWTBzTJ>hlvR^-faVcz)zMI=^`QHR^L)f#ZwwOO)$qeuL)!iS$9OGwUAL?>a8G?t3W5?TK-p$>;iK-QszF z-FYf>d!hd>ng{*1);h)W9iUuC^Sdd(uXKOuW@&u9^o@^qrp`l0uggNmTWCHLHJ^i} zQ>5|n-yr`*Df6GC^AzXFy{SCMH=w}!zN}nF^VHc@^-h(ZU!eYA`5nzqRsO`NF6Spc zUUJOidYw0}&p6L@&;333@7%8AJonRGqQ|2`k1HQUk1KJ#WvbJx9Qn`mb64Gtc^rwy zuhsbflQMp@#>aVb^dr~Ne%q<;4${HWA<_|=Z<93cf1GmDrKd>eO5=QQ9amrJc2b@X z@VL!!$K&_Wy_)F-}jRCl`_wL3mh-Me~9|Z70O?w+%Kiue@%X2C-c;e=R==(y_c$fNAr&< z|D<%S^e@u5{yRFpx`T7q%c{e3`nojEAFSNFZMj_ELv#A#VL5$E+E?Q%q}2U~e%^Fs zE?;_7PA7dUr<0{)r{;c+`_EPXo266L?`-M0(hH>V_&YW38R@H<|7X%Kq{RisKd*7` zOOI53j`Td~1=6_x$U}0+HC}r2@>iTVv#^VpyxD%xGSyG_ikCnSs`lDlWeIAq!*X<-D zt&!FjxcyM)Vb!DW@&f%|SMCexpks3VM@wf)XG`Zu&y&W-Po3?vxjM7emvxWxjmjM< z{qDDO<8G49)OnpPog+Q3!1<=mX{yKlQ&WNCzgD?r(sHf)RO!E^U9{far9BF)KXsl^ zy(83jdV&7$E7w!^w-;$$@0Px%{_jZNm3|wC=;DM@WyA z9w(hHjq6e8T-9UUCl)yVXO!ddX7drb^WR&KA94L1biZ3JeM#%IwbrA*&dW~HU8K7f zIA7G6pnA-c^A`7iPWNx`NayPQ;m17A>3-sD>C@8xk*<@jm&Wy}TdeiscDt&;`ju(D z>ZRY&x?Nmg{m4yG{@2RAP#{n4Y~`uTxOo1@Dc8|Fxhpk}dGP!pu7AFA9nF(ls&V`2 zINJ&w?={MGG*51&#!;8^5YPWEmlUI+`D->-H$=dMS^4aeZ#5 zMY_H4JaD%H*XK0d?y648-LA(=|9x8S=eYjK%HJp5{yVwcaA}7O*uX9~=h+#i%@ zo~IX>??09MK>CsNU($a|_dG7QPT%-$PIs5a$3w1MdHT*R(EnKFj+dS!ogqC{`ZH;- z8M*%brE!09OO&VYRR#LLpxip?OVXF6?b1HS=lZVKakm#ZesTkqr|-=L`j1g=f^?F! zReG3op0xkW+&p%Y#>Y?Y$I8?9?gITERPJ}uN2HHRAD4b4ZPo4c$O5-la-SRy`DNo<$3-rH9xm%>SN|#FSl)fZgbBeA5X}tdA zURR#JuNLS}ZpRaIbyw@W4%F>?)c<4dJ;0-?w)g)d2!c`qif~mliYPWnLdQY^1PFDc zBj_ZAfdoP_q|j_50%Adfg1y9!VhJjW=+%e~D^XEVQDV7@mPzUEqdX< zum;?~dUzI;b#f8UscXR}Shuo|T+BS`I&9CwH0sdxO!|xUB$~gW@h0l`19cCfZ)bqE zero^s>7T7%^BVBGMfG2=NAdp>-PaA|ll$@&bk(5vXn&c<`OK^A6SbE8;&OC1fDs*i z)c&8N`weu^C0q2OYeRm~rK5iVtoe)ay1tu&=6>1?`ijkUHh4yvx&9Q~f1bHc1-0K3 z4ftujeBUmhAv+HR|)D*nQQtz6bw?2)TQeY z-B|Q8j}oW#qANrHWvR*c6R7pqqI&>bOFbJc^Ch}R&_51Vft$fr#LK*E-?uFOTZw-g z{22TOe33X?{C^VEi|?Pr$+#tt?$;0K;?;}J)(`E!H{**}{{#AKN@CyFN6a_;9iYzl z1aU8bm$FXow5%7=eSy9Voy2MX*U`nR7v0aqNgYpE>iGs;yn4~?jo(Nx$KwA7{_*NX zm!y29Pr5(N(Z#D5-ND3VfHDs4-;USg)!)T);0f?~@HNZxVe|sCz7~MaB6FPtwmREf zUkN@9ehBJ%3mfp$ddYhkap~k80cw2+UA+3G3F^i74&qX%L+aA?T!k)P{q+gzzec|c zOr{>GOV=a1#tWn8QR1{-be+*(cb18}1JwFq=%#^FsAraCzCP7bualeCY zEdKZLdc1nkRViQTlkU%>=;GCj?j_>B1!WxC|5;v-S3jBcQV7lm&jYppT-Me4WoCVC z2CpcOz1|j}e+E4JQlnc1YX9aT^Lk6L4R`?90n7wHTw(N|gW6AYqtQ#fHPo&3XQMk0 zTna7+F99C~*Ij1vKMHC;(LIe`^441Ne~a!%@MrKh&^gcKI{_SZvALcA>inYXjXsk1 z0u!h80d)D`954u$f;WS2TxfjW1GS&%)}nXFn`FuV4!ZZj55Z5sonX7gChu*R7`zA6 z`9*gaddZt?$v+a^so;2U5;zsS5Uir_n=Snp-4*C1Z;B=VQ|O)rUjSbQtHIyFG{)V} zGJetRbH3@5<2^e?OaHq=k)%UAeSGmpQ3Nz2WA?F4@WWu26>PAb3wd^J<{EPJ@n!lm(ChB)2{hAM63flT<^Dnd94|g=+*H86duV1;(0_gHU zTR!2>N4E^L&8N)cPt2?A6Culf(S~!xA)x5WE&4okXM&=uwCE!`^rEXqznFC_>st4# zp?Iwy$T@B(I14-*EC(w=9e>p2=Kfm;4!pu#PXy~ffQ2T$Jpk92xBkosl-z%f@%(mon(8a44U2EbxfJcJ|ktfBHuVaFG z@jaHf?qGjV@3)gsee|DzKY&Y#7atujx}VWEV&7>2&L>`cbiC-=pg#ya5|ni;K001>N2Bin z%08&|vM;Vhx0L;TCAbQ_2HXOE32Hy_c?iEpz>T2RSHZsmR)cR?^p#he`}#?68PBcN zp!RnB{}=RsfQ`^K1Czi`miX@UaSGV6f#+#|bfc6$+4B4y zl%RegK2P6h`n(go@FsJ8Ik@gNbA9OT27BFMurIg>JRf`xd>Q-!)crq){ENY*;CfK& zFNI$TUJ2e}(Qkq8#JGAfp3}koZ#LuT2kLxXh)V}|fl0(`eHO2e1*M-7r}chx(tq)l zI<@|6^dWF5crBPrUAFiO64Zd+<+C@*|#-;lux*O2n20jF45-&bF zUUZM5-vqu4_9k9@biC+ZL;o)L2`KAWe003%K12TlDEpw+%f2|9{V|h${8VrpI2pVQ zTnlPH@hQb`KDfxT|AydKfaTy77JZQW>RfOz&#m#GuIF-eH-r7qNu1VS&;0aMzGqqd zH==(6+yrh0tHF;!o$q^|w+GYD_d(n9^iTAyl)lC?AA7^ctM7ZKx$l>+F<1$v-es=) zfiHvA;Qn`;*Utnq)|%^KVCQ?ybysjGI2&_>2c{WxYKO>hTUwP%pldh|2-zfRg7^ zOTOF$_2PRTapK#Q`$msvKDv1IqFYAXW#EmV>P~t+wpARkv%h<2VL0!N2tj6zZ z@H$ZIEABD--u>XB`^@z+Q0q6Ldkri^CvjT;H2d|7;H%(PFoXDEmVBan2Yn6rDL9Qd zsYB-%-IwTp0Dl3;5-&bFUUYw=Z-%}VD0PdEju%}U^hba)Zmqw8*T?aEn+%3Pt$z&t zli<_f3*c+u=b(;%iFLILJf3wm)Uv+bM)#%CcWXfZF8Un_#>=_kX!Zkn?(c(-9#2Pf z@#;l)B5~p?=L+qgiY{Kg=tdK#&mG!76J5Oe1)N*1ebC&uRba+L=6V=-(gt~G!R zfh)jrF!-p^Zv{_#%v|S!&w(F+KZAdQDUTcdNnneAo9otK2B^n>Hsd)DTms$&YW>^r zAA>Uf8v3C1N5J<4BRcw|^%>}-zYe;iEc(gl=YmNM=+8({FTP8OlX@hNu74i7c=e}J zZvecR_3#v^{ih_T7vDVM=7MK~lIIgkzLEs>;=7VK@!gwst;cf#x_I@XyOOw@!23YS zbEGBTZ3*hdcO7vX!RJ89bFwAh;|c1;_f6tnS#R#+PeI+km(azl?~l)5a2Pla?EJ9F zcOt0siEc9bY;YFXnmF;%@uDk2zW_W3{8{ zzX)6bmRs~qpD^otU$6tX7+eEZffY|0eI*!t%3Lo3p9ObQulaE{cVYB4;}@c2%Z9FfI6S9 zZwR^xV3n#z>qjK07vCJ>WW16``}ZRMBruQplyzX!_d$Phg7G)d=Uc%w;O}74(`J5B zz>#1Hcq8}}sOvlC854g3mt2&}CcnqI(>D3c7w4{qN}Z z;`Mz&iPQBQ{G6#b`+0*w@aoOxdIQ+^1#>+G{1DWB6Y&dx1)xv)S8-hfhRCxSO#Per zPEh$CSNW32lL<=x8m{*ue`8SBvl0F&(AJN}L9L9ZpI;i!Rpt}-GW?oY)^DDX=(BB4Lx5bQK)`j@UK2w8V#oI<#32xhF zu4}>Ucg*!w;DsNU>t^gf?P|<*SMUmO4fyDX=JoC1sE^HcKB&jPp8B_dI=|M7?w=a( z|MmDVB`M?q9&6#LIIgh4qmSE&-*l->Y@= z_J7QJX!@x^ov*fmd|H1v_hAoE?i;C7>qF=&z&lu{vTn8hb#%3$to#0~cdb8&b4Dld zDDXJT`6Cs+KPdNQ75At1pNMWgxScw_vD9-vx-H;wADOX;yaJH3VdrU{0(} zGM{Ini&rnYRm6#JAB+D*=;GCj?pET&cap{b8g%jMMRzB0kAv0VHt=gu&v%zM%{sdh zl)7ZSY5iz)GnGDM8PB)`_2N5^IPtaBQ-CgBy^M1gadLmjeWAzuAi9Ua=fKxhe70r1 zZ%$Azz8?`MzP9?_Mi;MsGv|;Wz=@xj`JVw+fKP(DADQnO{pnyH`{WYKemN#VeGq*a zxCmSdjv|lb)%A()GW7CXkvOft4&CkGC+w^8oYndl(0vNNgkIvb{u^|^fU<8(oYwEd z`_}_O>8qRzwf@Za&3wqYp(*FWK42Co=f<|27iNQJftP^SgL1CW`7R^hHK6D#iPQRR zje`$QO z!O&Ocx&mDCUvqsC*#BE|Jpfz;{s{(tGOw=&XYVrCI{)qDUjyC)J^*U{R`@T#pvtfH zyTs>nlfN<86x8}|@YBHx`mqhv`V-MjRr)6_`t$_#ub?0Ig{eO>KltzZ&hSmYH+T{_ z7@PoxK$(w9=0%TZGI{dAAoDNlLF?zD3xVa-C4JL+(Je)PDR{N`5HCJD{#JCdUS)l5 zqfV`V4E+<}Ch%==197(aXA;zl?>EFreUeAlw;f%)`fun@fV$JUAM?RM+-J7?P2zvT z=RkbADL)^6y50fkP6b6L`L%vXg8G%@y&aVOq#f&A`(Kx!UVQH+?m=)9D0z;vC%#!0{~hS!)r;35n#s7PB@#;VQ+U#S$f#SQ= z;{RQO`hR_6{0{{?fxW>u$s_x!UT>nyK)(w8y_Wh$qMHcHI3!N{m!Z2De5cmb`zNUN z=Ow7W9sMRyo(s3~e9-=)+kyUJ>X5p${zzUw2J8v;2cM-+(q|nnx*K>ZWROiMr z%lYJv1oh(k3~}PS)Z)JpUA%hHZ6i*6<(#F*`zpG4_2Yjw^E(+l9Snlyznj-9K%Gx? zrRdL=I50$<_~`g@bgRJY!TZ4=@#3T7MfWiJjo@j&n7WhyFqi^%_>*h!EU*IH3GVCc zty6`sKWo7Mk_7#7sk0QUV!YLselJFMA-Dp(3alhfeDokhcO&}s;FDkl@#3T7-$GXl zN}aWqdjE&+>R+ShAzkK$ehmeuf(2k#=3xMs4_<7UpCid*%a^F%&G_99M#f3~x<8`Z zi2ez1+;3+5GHxI7wsFh4lyRm%c9{{toZ~P}lnlzWX;Z>*lL{4E_vi{YmJ?gLzGj zegUZU!xGes?@r=U@SOyfgKNO4)LEqJ_BAtgtpL}6y1r%PvE`FKv?jhE7_Yzhen%eZ zlZ->x^DDYWYTVLit=E09)%CPx{I8Q|IQ^6O1?Z)3ws`4#De+f=w}86dZ}4r_+|1A0 z`x*QXsP(DnhJoe#8hr(*_5Bmni|_lyrQ;g}E5Xg+S=4zMcu)&d&s^|ca5JduJCi)N zeBw7aPCxPa3}5Ms)UET^qWcvLF)rz=){CwYI_ZnVX?=5aN#FtC;h@&*zS{cuv8A8i z;X9l8kofD=JlNu8-F-oP3*uxRbiI4EH1q9mWiSXn(#Bj@gHLua*E&9(_(9-sFdMv} zt%+L&>i7%L-2_&WzY5g)RSD|Fx3?N!IoH)-4Y;ATsdpRra+0~;AxJ-d1XCE->EOr% zjD7}q1GoXy<9Uto#9QAEl|RvZl4k(pl|D-!bbZ6ooeEZfGEZ7Bx=HAy&l0Egd(r3p zRNp`2TI;*OXMn%9GyQITpux6aJ5a|sS;8sxQyNkH>pxn>zajo_DC8)1t-MlDAXD$Hpsq)B|3)vmDvN$Ay01ae)mZcgz#k^BGtSnauIDIpCxB_-NnkDL zSmH%D5Z!2SGAMOMd{hCa;#&&pc~)}ApP*iRlMXTSk^)Wx4`$uSI@9Y)=U+p9?RTQ` z8-i~`ep1Iw;x7bOgF635@SlOr$s^;?`eP0?SV5ipw@RyP%pkii3{OdZt*__ zUA%hHO(IU}mOQ%tk?7*pFGt_~Fw>Vx>fQ#{9BKGku;gfSy#jm|{2APKjCsAuu?A-z zXRsX9^*)tg{%tB>L;fc*t|6cg{0fwDI*e~KDC3??J{k7|T+6tR?qbGw8hAZ;57>fn zcLUEp-srCebw7#|tncsU`-yxrl1*J57=ITq=_tc52gftNcY^nT>p&T&%*!8)yEEf$ zcY^Vo0_yP(qz+p>;@<<`-e5ma`-x9EzH(p6I@kJHq7&pku<7qa_is?f+08P)pP)PF zaMOp4oekE4x}I9}ZIynDMZX+f-y@8#tZSLqqlp^|%DOFPyKI5pvX4j|dc2|=iN2gVrB7Nfx{2sR=p|0;FGP2R)Pvq(eQW&&bellY$$g>q zO;|5|!9Qgm;QrA1ley0x0A*izkoEI0xXH4f1`sy{oB)=A3&1l$oqsap&jtfv5h(Zl zDocNa|C-mo1$SBWhp>Mh4PFDvzN+gxJVCwqrV%I4DaoV#k4G1;elhEO33xepJy-#r z-Ob#8<>2{!xF1ykJ-ZryG${Ht#3{Km9o;t2mtx}m;PM{k`ZiFC1cM{~grv61QKfiCab(M^+;X1p40GsAwmD5IQ_*}>MtSg8c^3Gy0@rj7W1&svc7kq`y7<@Byrkb zbWK=~zkvHP?~+H>V?*%`>E%AYmprl#+gbKssUw4WMAzG*pNnn{n1jxCzsNe?i~e^4 zyIJO=9qZ>Hup`(D)ctA3ebN%_2A*WOe?F$(=6%h&-OQb_mY}{ZzMVkvZFZu` zqy5i7mj{Y2*`g1jyA%{%AB(;T6-<0@n;5dt) z_((nbsyN-BO7cDp4kfRQL+eHN7JBK6#A$uTNoL%~(TBUik3g-@LO&9m3I@Rv@O5@Jw<#~x{0p_ zwO(}3p??v451cmG#210ZU>T_WBm$**E zOWs;be$jP7e>`|1*mH=fV*r>54h8l2eZ-vsM)GDDAFUT%F8Z0^Jg{%3i5m=Nfg?ce zw}iOML5I9ami(f-3jKB9J>W;=`3C$B{LzwM;+`g6@+MpIi*7Uem%;bJBbeuIU>exd zGXE0y1M!kK#gboiKcoL0Y{h!nIMDR}dGJN>6;StI;yM#AdDAWVMRzRvu3&%gVD9rS z;BjDA%l$8L6Ns0*K1+VlO+oJmgWx3c1i(CSwk5yBT|m6#&9>y934bqGF~Ib@67&r< z*E7Hs;O(I9{{nngf}+35qQAC*{MujYTu0mnup0ai`@)Zw{ox&SABZ0O9Xy0OkFnI- zl)ki4eX8PG*DJasdA*Ff7K2N{<(7H}5H|s=25Uf_Z*+qC>FD#o+2CBT7W@;``9wFL z*QF0qr`CtiT>#2BB#+ihUfBm^-F40~>r(5FXJ5D+ycWD2+`+us;&t3z=wG(1hv(Uc zWuJbKd3?$;pM$9TW$+Df8~EceGp^*}25Z5wBg}PZl)*~yAfLJZ6kK_#xxNJ)KbC8- zXq>rz1bh)}JKpfRpDR_pQqM2cl}=qlz!9LW-WAk&EvWO|@(<_J{teZu^?E*}-+CPX zSN*rGlh;@$J3*t)Q>?w5j+jd z1|?68C0{6sF!(?=fwFu zhvm84k^3SAl;`eZ%l^5Py8a990voe`O8j_BypGfLoKBoA{~Of*Jt#WceqWQIelPma z1Z)OMpY;66zVaQq16Y5_pw_Qqd|SY+VBUn-_v=ddyTP@m8{K+v1Na!I^GV#liBFnn z;*&wG7u_cG&w+1(-KLuOlfeGq08sl$oX*>Y{F^5kzgjRj*<4qHYo?g%8gLflls@Qu zpIOG)P`)e3SJ^;*oo^ZSTnJv$Kz&k2cg8Q{tRb)V7hNCpCxIiuW69SW><69{Ci2_^-VZ)t z$uDuw5$}*U$&z1mFQMN8egOK(Qveo$#g_cF#QgzE-egOD(KY7&*az$YzI=x1+dJTP za0jUSDRJG1m%J&K{G#iDz7LoMUP7L0!0W-AEcqoan|R5aZpkmY0Q!7z5jcW8lfkK= z-;!VARuV6HeU|)Pxi8YejBL~I(V*_{M0{=qe?fO#PVDuahwePE3A%O`z4+dV{yy+I z@C))uUR~c7bX&pq!0*9_iGSKMzTeR8qxR)mu5~`q9mMO>x2gF1!D*I!eTegckvx{? zO=g1nGtf^11K?~hnLP5`)8i9e8F~kOlBK?L&|L_MPV#8~B79_@AH%xXVp$*8qi@9i zzc1Jhl=#(_cpY~Qy2ma0Pv8rtne|-)E&x~O8omlFpKh+d2a{)-Yah5V&s;CdH<&uh z-~jN)*<2SGY(2-|L~s`P0I2(!N?lT~)N?KM)PSFXUxBuIPoU0zpw2hoAI_)!8>(09 z^?XRb^*H{o`Y(Og>trtLV>u{w`slyRlWiVk9RF0^Cls1>rTcdY^LaZc`L3|c|I6q; z0kauT5Y+zfCaC`o{r|vUK!-j`o{%M9b94uQ(r>9#*Eay&cu;(0ezbl%I@|m@-1o8% zBpj~-G6QDbe1iCAgG%m*ZXEh4;JM&D_L~*pr=aXZjo4>oABxw19{$=-$4ea-qL*<5 zE#nd0D)b?AK0P+OG{h zXDh$=mERfoU99}IpZG|9GgO?`i|%6bSCY31)cRHEZUQUNNu1W-iS7YVe5G$%|1CNP zUzumgqxC-}sF!(?{k0R%VRbh(zY}N6 zUqYQ%fTFYQ_n`#!H>1BDTmwp<^nA#^ayk3TLtquC^*!io5m*W~D~kQRIthLpSX+v& zEVkZ{ZUb12UdMGHe&R~wvj(gL*MoOmVP5|l)Z;mqJZnMGKZ^cw@F`2Y#7VslbxD0X z-!VZ`PYT!{`~bY>0`qzm7`)hAUj|;d%3QAp-vswrZTM|h8Qkk?gF1f>dENsnRX*+C zke~QS{qL)Kbp9{M`vbU{e${|lKWeTS$7E1+wHCeTPDei-oCy|!=Yzvm8h=?wI{)41 zs=%aqMxO#|{lf|B#rND|<2xSTASmmgmU((=h0%QgURiFg4`Li?*P81wpsw#n>a*p0 zGeJM`xsdv$FES3D|8jKKgAU`AzG}Vb?nED%cT4{tMAxLm^dW_HvKsU)F?@%m21E2! z?z<`6XL8@I;kpVOPk)NQU+8+b8 zR-bRi-IKlsmz(SK3k}M?rTh3g{rnPaa*5H)zI8DB*Bz|mXD#bFRn?>O%e?(l`Myx& z)#KCsZA@P}gAM7YFrE*=6!P@~uU=;QB=ck&S9|)o9oz|Kv2JA@ue!$gJqzmkuT=Hu zd|H1W`f9KteT5p2tb>25{^_M=d?nz=7n$p(tUFzQeu8@OT}+(#9%k`hfG%FW=vERZ zzI`nI7odw*zX83Rv&Nrk`cn+noNKO~5U3h}b1_U|$1LKgip zbQgoyfz_aMj;U)ob;`cpjdfMQK6Ebgz8G8zR)MlEq_46sk62~=BrUC3@SAlY$>F2cUbGlzLz9x*b8Mq&)^=;q}1`h=fx9A^(e-eBKoJc>v<2ji` zKcydj`Xb{ykMS)5F94UZZ`;Nvd2-0NnS7F0kM9It7hOa1C+8rk!{*l=-?89auoRpR z>i7%buLSk_(fUgg)QfKgaeBPkKb7@75-`?Qb!rFgY@{UUG$ zSPs4oM)qNqKz!fCKZviKo0QxU-ACx94vEux(S44-7W@U2=TL<_H53-cQT|Zv^FYj7HqoO~7X0k*td>%Xv=nt{}fWccl(ht|Pju(5Ejpb!UTG zFS<48lhH|>)<1>rRZx5vSp3^^E*T6?z0A~;4{CqW`OwR}R9WUn&ONKpi>}6^KMP&F zdeJ>hoSdtYE%)P%=;GCj?m6PbH{Ig@7`k}%qI-)t@y)jQzl1Jcz3Bc!ocM+;{_mlS zSKsX{vtIgxK5zy5mF$bMZsorFfcsCcuNlP80t>+fp!n5T>OTuz2)qQm5_HZp^(KQl z|8?kY0`COZfswqH_=nML1fK_A1DkOlNC1O5QkQiu3zKhZUk`9Lpm zS}(e$=v#yT0;O-q; zkf#_t%TkZ{WZ^dwJPkYp41n4_l=UTA$ z#U@^GG}nT&xEB1GYrz9AG4XR+?+Ue_w8{1;4B? z^B~yzW^*mLnrp%ATg>Z%H*zg_H`gZ1?mye|*FIo6IN#WDwHw|v|JfLa|E!Z!yPtV& zW^043k_{$mA_H-OTkB;4LZU`hM`lG;=)@Tnj!Anpb!K`GM-kk{0H*4PZKbk^X4^-A?9j z9f<1$9wk2DPB5>f(d&Ne{%QZ3W`;>=ZZNp7!4SBnqq!b>sKL{ihX5#jy_Eh2P9PrK zn?7~0^s5u=B?Qi89h?QqIyheP9&h|tfji05rmNxgpOy6cnk4he)r{kS!_4(7M;M&e z$>3h(k#+b#u2-<$ZUAK+cBYPA;H}j2EI5>PG+V8!ZCo!&HF+yQbG7@=*=^0=2kvih zY_h?{;A-$~Q2KTm{R>h5SKw^!i#Ndkfd69tjs)etG1+$i`LFio?}ve%!4TNtU*`47 zLkv!&-_rMExZmZzm%60Slc^^gl>4*^{Viagmw1a~4?OxL;=o>DIye~gfiu7mxE0)a zit+g#T-M)QcT6{^|J;?}`2PPso>}z!Meq~)QVZ(w3om{9#nQJOmi`@mvT+Q7Yrwzj z*8`tEV6pOF&-JTdSL#j&r-HfQT<|jRaWK*GI$cW^&MD2A=3;5F!94j}VNq$I>&(Kk zuG7l$3#OltKivsm<>i#*IbEkOEOa9cmKK{=<^_sN@{0Q<3-`66={co2PS-%5e@1c6oPa-Xx*IE3Cc>XnT%5DeM9AM~<+?I2 z)XU?#glo!~lb`F>QRKS2e{>C}H1^X5&LNyH2KBq2db3eQpT@>Wss`n{VFVL;-AT%zKCyTIrLn~M#0$P0U4D43>snN(_&)EL0Ku0#*H!PHKVk27|KiP&tPjWG z49ASB_DAMl;vaVZ;+=LSz8Ue&;*8(q#(MKF@kzud#Toy+iccm!nfN|p?CQLq4&VN_ubd(*59RxiSN?H#HSMR%2hMD+D>McUD z7=b^zsD>DRMdB}1daeD_62FrC*>YpyqvKn-gyuZywhNDAUa&v$(JIGjG1zR} z>sCkaU=k<#VV3xRzt=7-sm_Uxh`w?h@9`>YM?5`Tak6=@Gf4%g%Wyx{6o+kg4l(iN zMaH$03*N^)vhL;i<&7>@{soVi_`zqJc==Q37d{p?cB_+fOx@QTyQc*?pG5PG9XWSI z^LsmTo`~j~IC4&i=9@b5{Ez1Mi9Fw<`DT&lbu{mGN1n%ZUTEw-$>sT4hj#n8pCixB zXugFb&% zzYJfa_*U*F<@wYqegwR8hZ*lww+`=T8GQDghL=9P03THRe(pIT+y}*vf-hIR_f3tb zuTcE^@Rf=`(mhs&`=I!l@YRaH8@>iU(+tDe4xe(jA!NmOav#^8zYjjsw85DPU!nB( z!&fQ&5AaEAjsIeNTDWgg!{b%_5%4MZ7(JiRIsM^%ik}1@gfGCq1il7dj!l=t%f9*_ z^lRah?=^XUfqxQSzUm6VzbpFtqU-ztUcLg8<6cYmLFtV*9sMn=tHa@I?>9c{@y~>> ztTep5@4ndO_i{Qo>64BME8XQ0{;7t~hEIn-z+I?b-rzdplMg?|RIpd;dy@`x}IOrXDgp{_t@q6hm_9}m-l><9yC7R z($6aN)u%=G=U4a|_-c2ayq})#1{n5PZ+r$CaDp!H<*l3+?Q=JL6}#vs?& zJDpn^|7!TL@ZMK7Ufz@q(fYgLE8s={6}CYOy@B`p0;h)B5D!hCpzYcx@ynHp^1^#w;`HJ3M9^s$o z;N`1&*(cv~d2gNgR6jpPFJI-KhR+}9vz5N7`<0nDUiqqD-k%%`A9~J=_a^$B1uwq} zAkV>R@bW7Gmy!1@c=^=;Ir&`+pS;=lUyZ&JUVe4J-A=+Zv<^3G&^5MS8=LLp#($LGV9BegZIaA=PsPkL&rNWmRq7D8x;a|Qe`o4P* zz5L38>?f~_&kH8uCj4vR%U?A7_4qeEz>F*9Wy7C}{!sXG_;K*v;A`RMHZ?B{aCxr} z71Zh84&k4%@X2bO1mM#ZzX(34`gsL>w&K^pJHhDwyz27aI+S1G=-SGR?<@34VP2&V{dNZTOlaP2Wo4YqAV4_w{x7 zr_7EX?|txH6u$|+Lhb*r!8__X@}ckxqy2w`uPuq@_dC$^XV-#gzB7Cczf&O3$G-5j zN`ESR#r$ZWeDP8GrSQpWTu70iqC-$DSiRGPw^MSSE_ohgHKobXW$)mKG_a` zwetBIevRV)fKO5WN4p=9c>O6?`o3Y_{k$d9tOwaQ3enf7`}9iqYQ=AauTuOc@Rf>B zazEe*&zIse;L8<12R@|u>)?Zme*r#Q@xQ_Q6n}#IfcEN1SNs(C6vZ!xPgeZH@JWjQ zSoG?C+{^vQX)niJ)B~dX-#g5AaDr<8p95d3?)OXZsp=o?vk`r^^7$4%behroc%B~a z9(cSy)F}NJmk*y~cbS9yA~xKm@UDx@7I~s6q4(r`|PK>VSZG3{No*&RB_lwr|IKt#jQF&*F`Swnz zPqcn5`edd53VltlX#EMDjDM2S7l!%vPI}L1{e9>irLTprRrh1+k;Z?y(w_<+Qv6)_ z1&Y5)^utU&dpqXmF5%UA<4O3S;@^cIs-AaW!~2xJX=hV^w&FX%SE_SSDtsUH{7r|i zP*_UlXOcT`_ea*r z7x1+cqxoiCOdqP$dH!GUHAT=3a>YLlpQL=gf)6RZ_bb_6KZA(w31+<2%I7F}N9p^+*N%^_|8)3rVQ<3O2xkp zU!#0Jg|AThKjF(2-?2OET=^UiA5!{E_@Lr*;j5HSF?_btUkvY4{9W+1rP2L)96nv? z--J(5{P*xR%BOV?Gu~vS?*gBs_`&ei%I6GtN9pIo*N%yHrS@>v64qx4U~S1W!8 ze5LaFUHp~)z@BEjm5T2HpRIhd;474V8hp9pL-0Q3b2WTO>DR#r6~6^OUHNO6dzlulP&gE0oV&!YlnI_;SV92(NtpfDb8s`#xs8 zLB;ok&sIK}!Yln5@IJ+#CA{*v6h2+)?}SfL{IjB0KJURNEBz1fNs4dV*NnHiIC|bw z;T@$P24Cxo*5|=jDW8ksYn1*r_-e&(g0ECQABexw|4;OaZ`aR^t3vst39t0S;mZ}D zFTC=(2tK6rx55V%|CH#J&xi2YO8*PIPw^d2WPK{1W8l-3egJ%m;T7&YQ^`3ca+a~_$s9@gs)WmCE`Cf zy3QNnE0q2b_;SU+316jrK86n|{crF=#UFIC=|j2l=?0&z^h4o&ik|@=Qa)wy=}Lbo ze2U`lfe$L5jqu4z{|0=L;=hH@RzCZjV#ezzeKLIQsOWh)1>UE8eDF0&pATQH_zU3E zmCtqXRZ9O5e5K-Fhfh&H|Antm`lkJvU&S8@pR9aNfe$JDMEIcM%ixogPdR+H(%%K| zQ~dMrj`H~!J`{|emv7wmv^rylnDZU8aQT%fF+L6(9-T_~u z_$T4375_ebmEwPbuT=a28D_i{ia!CqT=B!Dif=x^j4Mg;N5eacPlvA^5#9eY;A;w_`B}m%{rT|KioY4YLam>wFyG#(;`gSK z9rN=we1+n>5A??6ejlp%g<-yfQ>(s@Tki7V@7dpI6gIwnFXO)fKKV_Z1<}Tt57J4&RwR zl<#X^*nm$^&HL;4RN*rTpU?3L{%(BwG&e7F8EWd!R^#dmU#rG76yB%$c^Z6jk*U8K zc?-lxjd!u=6@LwUjqt|)t#^DMpxxbFcGJJNk zXnrz$(!PezWnB62@=tdygTDkmg#L2VZs!*G&{tozZ#XsZn;osXi&gA_c^?xY* z@rJ*2AM-+!k*1y+wf@_=yysKh-ROI=PP)J+^)!61eT`2ZKDDaP^Wm%1{kS~Lw|D;Zsv^4_{~f+p`Btiun`*Qolxf_K#C zOZ&PD#;dbh={pFozF$7l<-_~){OG)e@Y&}YzIz+fhkNl!QF&iPUr}!K{Cb@8BYfxz z!#~vA_#AessWW+a^gh!EK1uNt;Cy~3;e;&J#Ywa>f+pQQNr;Ioy_*YLIKzW81IM?}|o;5gHVO2zkp4=Vpm z_-Zw-GhE)A_oPov-~Qlvagp#l4L>Ex^m9Ev<;wpBc%SO?hxk-=Fb9FoO^i>w@yw$d zZ$J17<$pSSNby0J_v){0Vf?qSZr7l%QS0+5_-e)P5WU(r_M2eptWx?T;VTtC0Nzpa zG6lX?=@-IRtGu_1zv|C}F7J&ubb=XgW5)Xx`YNUW1wLKXv;Raht`xf4u*HviCFD<-L8Qa(486 zGz)!7meHTy!szcspQ7%U$KZo%zFvdhtnT-Z;49SkYpo`G^|W`ATbO#1Ouk&w=#SM z{A73segXX4FyGSI{}Ho+@tATJ!5{Xp;W-vL7sCIt&hV}AserG5XIphPz?Un&8vgJH zjZZ6lK7~*A{vinW=WzJeQ@uX4bbMO+6{FIAr>z&BC)0{H(u z5Z%wk@SiLGYWRa6GJ3WL=N|aVO2fCI&S&A1?l*i}_!{`___u`r34S{M+}2KW_k%BQ z9+U1fJ_n%h3}3GDo&q0K{6zTesy~JBKBd0^zO@?fb?~pM{;Y$qWStyDoo~Pw(|;N7 zPWTS$e)%7KE#uuEpSFI}hd0riZaB_i@QqcS-Qn9P{{iq-s{TpvXRH1M;U7@?W$=Yc ze(9Z+2O+QoM z{{`P0zE-Wf4p@e$}`8;ICBrXW)HGza9QU^s=tLgYQm1 zc^l_6&N1VyR^#djf2PXY9sXG5GYG!+-st-=8$NWG;V*W~&xP$6EN^RDLWaQJfgcH}(;{tZ?C82Itj zBhRC3_#3H5?%yE%^U7xld?o8p_VXKsryhA;Y=kdoTvF$o@ImylPksmQQ{!qq-SiJ#`$YQ6mo|0?&3 zoQskIX1uL9S2U)cgW<1K^K~42Q1u}bzLt7qT)FU%sr|VO{!-&yA<$Q7;{B5cam%`tq z`0L=$Q2uM-uT}aD@JVW&RKwq@`uqv}Rf^vQ--h)g_g$lWvu?Mk&jI!i^DUi^sZ-v+ z908xsIYizc^?_fl>d%Bf1zy(SSollen=>!j@J}*cd4D}0{$e$*i{aDMx#(v2?bI*x zUI~ALT0fiM&sX(qf&T!$8Fjt~pS;H0(Q^LTdzM+BS1A7j!+Zy)ndy$?hjv~J}2o1pACNmeanGA8Xu{r6uu9AkoCD3K27oE z@aL*^cpH4BTDOnEKd<`sBK+g<`%&jR@X4%a>E}1_Mbt0nqP+@Cf2ujp$oure;8WCo z-Vc7gswWG+RIP^z@XgizRRF(*dSo8YhOcHl$a#1*{7Ljp^moHgpdPuuHo|vP`YrIY zsZ;KY?eNE|`T7F>D8=uBA3@%I>3_31rl0qz{F_5h zA0K><(w`pY-G9Gv(ox|Glc{rdn0G&=>uLBD`19bi`S(e(;WrA;zb7O7cfw~Fp9=Jy z3cWtKpC|M02#J0we8oVcFX!O38s6de;zIbmB0fWmUjF^>CPlIT-Qy&e-^L5C z^4{mz)%>0b_D&kSbE`bj%qyAj>588c_TT;QPRqG*R+!)O-_2f$Pe}RP5Y~I|=FPaI zp2uB2*1zZcqWJKiZk$iK?}U9?I_Xtrg(PG2Iea#}+m!InH^M)~ih}5;{xJ(*ZQ-|D`2V_mTkrdz zSIv&mk6QPh8@v9F7XCO3e~QZ|*BQV3^)!oqriCxF@JlTGbr${+3%}XIZ?*6{T;A(j zEq&X@2Laz$^m`Q>eKmS{Kh?(NlcXtiu(O5lW#I=}_|q)>Yzx20!e3Somiw z{CgIDXPDpfzWc_aZ&VVypKUDs;TAsC!Vk0XGcEi=3xBDFzsBX;I(z>28g8=a*IM{Z zVITMRPPd!;x+!bxEsK7qh5yyUw=9j_=VL5Fl?1o>^wmUuEGd zEqs-Qf5XCmX5oLd@Qur2_ost}?_}ZoS@_{D@9jUn8%<|UOfeJex9I0s_;W1$Y775} zg@4Avzir_^arw4&_B;9OE{nd|yx96fTt3$R+0()gx9}4!{cL zzr@0?w(x5#{39;!^`ZK8bH5CscbhHxw=Dcu7QU(biyX1m;XxMuc$fF;$!1=XuCwT?(93@UyaoELVZHk~Gyh&RwDXR|=W`3c3;#;$ zkv*Z=!r1*h#=`fu@L3jqQkZu?2UF+y=@xydg+JHAUvA;oSonu5{Bsumbql}4!vA35 zokiRi^k4R+_AVc5J$JJ3eJp&Ig`e*7$+Bqb-~x;OA`5?wg}=|jZ?y2QTKJD#-n(BM zp0k6f^=FH|)tRyTc8G;P*24F-@FOk!6boNq;m>w?Z(Oy^yUfMq7X3{YeyxRn%)-BI z;di>c)KF(RIE~ISbtY{!`_*VZnCsy3vDW7?7QUZ_A7kNjE&MzSe}RQxW#MmkdHGDZ z?s%Va`L>SxX`;%)``)4Fx->Orp_ z-Exad^Sc%~xj6*|{+V-%3jHOeImM-pKd-bj=nv);mjsHt<~n|VaNz>~41e#O{G#wH zscCf;{?wGAuHF}x`~AkHw5-JM{zsOB1%c842CijpK_I8t>N6&1{+PhrvOr1c$UsR+ z&P)lM87K`F7X__xslE4z^v?;D<`qpR^ItIt=9K3Bjd1x-VVmCll>+htIn&+$p7!6U zp*Uy0|L?n$bH=S6co? z4aEgS$G4(Of<=WTfdrRypYW273iT(rreawX2Xac{pMY2n2`;Eu7Jp$~#dc*`VU-7L+zFUc(m2Hf4gxGcBS@BS1Ag2jIS zZkzfy>i9hVN-1goL@iM!KKId;SzJ8EeX0}{2eJysmgaI%eD9eaZh-qrqz8N2gr&HR zDjJlZ>$NE8j>uh_(*tf%MY)Nrv+iy~3j+&+URj>YjN(8bx2Vjm%677dvCv|f6y%ru zEswu8oTz2?m&X&+CD8%xVe;2Tl=@FhP%M)~$D=*|+Hmw<@|V_IER#fsqdnpn&Yq9| zxNn+zL+dTw8X0fFF%ItyH$9xy64`LMF#_Fc3j_22&Zd&ML##V6!6ITT`UD+fth4$Y zY>f}h36?JOhaY6S_xlEoqRy&rocDb3E%cr_872NeVc8tNdD9s6&Mc0F6?Mw-OveUF zCzR$)E0A{q?z`6T<7A$Yp2&Timj&Hp&GfR|fIq*)?>(vI(C-D*d2-j4GG0$HGf?Wj z8;-nt^(gED3+l)Ww+G?RUFg06mA5)xu$xBv3AJ17m7X;xSmeD44-aY%=r*ds^OS8q z#mVG&txOHg%5(UPE^u=)}!!YV-^4OxRC)-ivkC%fP%q z?(E@#h4YJwr@LpY{6hB&X0_Z4+(TSf_w$p|uHC!uk!xi5qlq!@0xd4=nqN|!)3tj~ z#JwU$bq;x>irh0Eg5C(+L)n0``~vrsI?9|)y{=E=MfZ?bIeR;usYq8K@5)9<} zON;z-!gcUUWIHIyUlj0@uV;_gufk4ukBHL){#^gGg{6TKld5M={i6F$#+?UV-Q7j+ z$m(^&8!In*ReH?|E_6%t=elo*-CKN4PJW?3zpyk=?0!b!{@FFPXP;h@B>chF=1 zlba_Suz6mD=SL*r&Cg%#p6&C)Z=Jlj>E2}U8AjLC-YLCOP={a0^$e%`-SD_pBF6EvlHdPj0p})+1bMAiV z9QEMy?`||N*F9rKz3M&qB-(ubO=8d4ycmv+dQGa>ouD z-Jd&#w`_l^w*z>?^rpaFOzx*XyEWk!%Ln##?+q`4IBzi*O`GNSr+RyE#L0Cm4wSg_ zqDWtU?(Bl7H4#qi%Jspa$wd-cV6@Be3TQH)>mA#U}1x0cnf}l`{Cp69nEfDM;o~v<5SCX!LA;gInX~b zbHLcq1BYjh^AFFQ+;GUi(WAy?jvD9B95rzCpsZ0t8XRlpNZ+{0eqYAq5u-B(HK=xv ziGiFsW5VC)G$kGf0ZS-!F2>KRvWuePX|`o86_Z=cx1 zh}L-fgzdHZZ+lx*T-`I<#b0P&jKF&O*T)oDH|Xy*u&&b{9gOi}y?eJgI@SAyU_4Xs z52V!}|J0v0j=B>a_Z}bOCR~9YLZTJa{piX&L?>Lp-yeddgxsKcPv0XvB=3*tZ7uTp zw4$N{zxPM%*L$1&)cY90`|Y3wPR_Jk_sxs@u}EOL`@X+V)LW4~kE`BJQHQO2F!f%V zE0d? z{W~C@)P2GGLb|MEg!@rNodCW-9$NRr=;=M#xS}GyB$jtxMLE+m z3*EOy?gwQ0<$*=+XI_P+BLampOY`)L?&m&*CGHW_7M$lj;sWvwy7w8V)Z>jc`i+2B zOC2_HQ3g@gbuFS^@XK5F=#SNUr9`?F<6|}V)w-WLWDFdb=^IDW_wb2I z5dHC->r?klyYcZ49GWp^toyIcnuV~3pS%Z;U6;Jg_8NqrdNZaC)8u2En1*R}7Y&9Z zGDZyMG|GdnV4lHa}n zd&m-t?JFINQTCY3Q^#kH9oJCZvgTs@OVjG{H*;#~dQVw!G3|Rs-H_Isu&1o6*e24U zaE;z=Vyi_KP;47%MA&A$yH3Ysot7~!YqV`a^^_$O(=PH&hG#c0W8lzCxs@%|^^zqL z+fG^#wi`WaROY~XN(+BaWnGNDqz`z7Kjj*fHP&6_S@oI9T8Lesbfd0m1G{x^nf{oL zy`>>_9UIuLd&^pg?O6A2k&pLAWR4m#Zm4Badds4S?I#_Hs&Mqc`c_S!dT)q6(viB3 zBL_*{;VL3um-R~NBda22d3~fAbAKCS5UZqlaf%eWDtx&oh0c9iGpijB!>MSq8DIk&%a8+zmNv zR6Xk>HAPlHEVJF;35U(H+=Irr*mIehB9kB6M+WZsWRA;_54XeO-3u%=Mdm!Viwr#M zGRf!eNtS9Nhx?d5k>e>oSz~MmsMN^!Td|E~(4NuY(PJiNj2VEOO_Q08U5|`eoZN3V z24`gs@{i3LHPEuYQ`2OcV_QlCupBjdRA#*ucCUAZM^2d7)w5rvc9-dnSy*@J1Ww~e zjf`is-DToqn@TS{)8Uz!KKEdrHNn=o9leGS6*i;?N#rxkDUID&*({$ z{Tc2V)O)Yz9w%(;tCvi9%-%;%fzh4~oNH5i$;8Jtm3DZh_1&Dk>s|YiqhHu2(>+0C zjaXI>sDY^g8^z)3yyEEpi|XTTPr8$1^mo zyUca$;-m+jW8}=?9+=(Jhpj}J@R){?BcV35zdJ~ae0mt$vF?hmTVi-`rARNE`F{*X znpbCnddMhaCy@2+nRve-D!(@pR@bqK9MNLhgny|!R`#CtW{*C9)yY=xfhsL>pwdM~ zPDL?`jC?k>M_9eH8hzNQQ)In|m$b;?MQ7_REst4b^l_t3w#a!PW?1C&Af2sGy%P}q zY_F58-iLEq)WiAzb#|>yZRARnUz7?MZo;=ECS=(Qi3`Z4_LIuk1GvVo^4JN!zy6-n zdbKo~G1)IJ>p4=ZyY)KVnsvxZm?Db}KKC>i?sbkPG;Y<^x&UUl6BKhSmv#yT+nak} zFRBj0O?xXjD^+5_5bf(;STJl|KX7;2XHv!M%mkRS?lx#UE&)u?uFSkB*mwVKRiKlD zXIrDDP!VvrI}HKKi2h{*3pI7NudhYgXUXyLzay5e06x%PqJUII!{d zT~H_8H3$oBtj`p)XBnmyi zj@#8F;6@lVU#-?^Qll}+MuivSS3|1~LwlkuKE+qFGUgT}WS)I(K@t(mpsE58Ufg$> zU$gBCU@dS$7I6-^#-AG6xXewp@=*OXz#`8yEot5z56;69ppQT$`7Kdsyn|%~4Wg_o z71t8|!PDcgxbFL4!C_A6dx@#03{iB7!=PhVMUghuH!UYLELrf~!D!#Jh#+Td>RChb zB~Dy40Zz_N{c8UW8n$S=@uqUAS;q)>!Pm|G?$P0*7#`8q#(bImtd_wv=2mb{%?T*R zEYUV==)CI`Vqv?sv8H#)`I`5~la`oP-cdx)=dI|=Wiw0j16Pp7hW?HiVT(Ft~`m7pSdD(9ZlD3gF)El6jn`0^~~NX=9g2&VsFw)1tsyJs}t$xPtN-e){&a5 zc>Sbzd~)8m`9Uf-Kb~XZNM!qcxrSNd=jC)rTO*gKr0U^iv-+h5FFEqtGSQU@hN-Z( zbK~&4<6F|7%2<%2jOijeU(!lz@LqQ7>{?U_RwOU0dG$PYMuL_#;gy93qUI|o;MyNc zNtau(qF!JDsC=UJ^{+7UXK4L;4&zHl9vZl1)5DH1PVX~~>G|}q%e;{>PicDCm8XYY zaeCObrU&FprU!l|+Qs$tyCk==xKz%OSX(l#=z|_tJJ2lPj7c+}Dojt^;5t4rInf zl!Vd#YPXzFG{kzHPLeL6N0qz>jKiVXBeF-T$WBiJNTZ-fk(yB2B6;nK6fP&Ws})#4 zyg6|&4z+n8dP@Q`_U8p4-L3+m zj0u>Fl)h*0PkUAgXYZ5s=F@7k7$?=vtdle9R^$87C-3>$OgHK5+AP~_J;8xmZX-?4 z907sux_qcwzfydxo)a5-3EKlFyJ+21lWO)8sChLQ82Ce3q@8Lz*mG{9_y1>Expb%o zAA^U8f+!$0QR81%Aj@*Kdwvmu8H}B2u!v}$_L#c@bL5{$*(AOF9(+u%V#1kMVpe?e6KvzVk?=CZZ9#iv+I%3*AMk z*Ga9f`Kh8@%u^{Z7WNy(Vjnvic^lM-9Jl`*w{=*W~Bcywe+@K&unMRSW*uGDIxm0UJ{=**VbFd$bjMZkY$QGigv zFrcQ%9xrEZlhbyIZdvj%w(S_FE}94+w&j~6iPNTz?Sx<(mL%!e+>QVlozsi9IY3Oy zQ2jBX#fHAN1Y@uAr+C1a5E1V&PGiktY#07q<%lqHMk)jjf?c+bwZ?lR(1L9vPD3XU zEO_Y1Vin~RmuOT#b&r+#76ip0=d+- z4Up>+Ko^lMcVo4A@!ssUkH8_X~YC@JA0-VrH1#_>pndjxGxUuQ5!gacZU|2-sD z{;Q^a&*6x*Min9uz=3rE#-tMa%^Q`J*azwqHUx-YwQR73w{|s!i(%#m2<*EM!Se z0^!9!J#ox#H|pGxG9uyzuQtke1_C0maVXT;Clav|h^Kuj6XWG@F;ZXhCO#!<<8f&m z{h9W$jHE1BIN7W<7=?kjX|1(8P6i4%6C0iPuLNL0PJK^@VCK`L_Rfec@5b{HB)rX~ zW?ej+Cg@1JBb8jOnB;t#S;Cbc1LAEY4pNXk>(DUH|OVpGy*2SK5g1war= zCyr7iOmExTs3=YR5Hzc70!cPp3Xbp&fV183d$jEvI~1lx!)?#xeRp&U!7g+EO@AiQcxd1JHC0- z2a|Gm@vhmzv!*<2_t)?a+a1_qnj<{5hWnrfP$;uqaLQd)%~2r=4vJUiS=_3dDNq== zr`Ww7aUSMNchh(O8HfQyAro$0moqcoY{q*`!&}_iS(nq(-D1HTJQcFoNS#&YGdstj zi3FI@if_2Tw=h=xDh4tuMWYdVX+va5&D{)UhCeC6SO%)kZv9tD6sGxvLp#=@?mNBc{xV)*g{J-K6X&s#Yk zN$lrn{|WBlFNC=FjIjN*PuJB|wT3|ika)Ig`{WaA!z$jn6CdqwW!9CYdr}=Rf`Tr+ zez?Wj%CiJIO&)oWcPK{t2l2?vWj{Xw+#gEuy(xsGpBIhfK+xYp^CiR|)wsT^o}e#K z!wYpj_cfLIzLa^bngWN0BDdm0ABRpj2!IPw;2y+RIcdjcFU%DlQt~595CKOUNyC7T zK-SN%Hb>+KjR@_5uXn^*zq9B7T8J0_LMEH)nvaILC#LL3MCv;lct_`dt#HZe zMv5nJ@LS#>Z2im|)M-1%@6x|Ny0UWPd$F9#Nct34v1cTo5&dWZ%0Xj`-#wJEaRO5CD-JE|-&#fk0(8_W`Booy~Rx5rzZi za^KA+FGF5S31bYglD7gt&A>`=y8x~P)F2QDbatc9RlL#yVHOINe;IO93K*OfpF8V& z-^-6{!F@G?KOz7a>e2q5;P)locu~wnk$@)Q^JK9vUm>js zMMk}7f*v8=mF$Lrc5q!36Gia})V2BaK=AQ_9Tt}uhD#FB5^4% zTHK(o%VU;`Z@dBWC!DsS6kLWLxEwe=L-xpAR7=8LY&ts()w!q^lb6jOe|)*Q{xmcv z?@r#G=`t)Vc^2zDkNb#X(NFZ@7@N&Dxh^1<+%u#Olj_#{ygIA()@xZJj`n6qgytP6 z1^3`TD~b&nK8ao}Z)OYVHz6*;ALJy6##kf~tbn&SEGMw!72av6FoJl%5bPHpuf?Pl z+kDaZ7OP1P=~i85tgK(VV;-fDtsW*jeghKV37bF9k}@wrS#VxrAr1v3b_PQOiZRec z(B?#`X8PahFJ#H}9->IxZxhf8EBZv}p(g?lTr@J8K~-3l>eMMHBrQY3*)sEAUXlJe z2E;pII6LTwgSOzA8N}{tKK9E5yWYUA4$I%PoL6}$FL-!q#;W+Y^nK*a&T-SUuXQ}d i).decode('ascii')) + + +cdef inline str http_method_str(int i): + if i < METHODS_COUNT: + return _http_method[i] + else: + return "" + +cdef inline object find_header(bytes raw_header): + cdef Py_ssize_t size + cdef char *buf + cdef int idx + PyBytes_AsStringAndSize(raw_header, &buf, &size) + idx = _find_header.find_header(buf, size) + if idx == -1: + return raw_header.decode('utf-8', 'surrogateescape') + return headers[idx] + + +@cython.freelist(DEFAULT_FREELIST_SIZE) +cdef class RawRequestMessage: + cdef readonly str method + cdef readonly str path + cdef readonly object version # HttpVersion + cdef readonly object headers # CIMultiDict + cdef readonly object raw_headers # tuple + cdef readonly object should_close + cdef readonly object compression + cdef readonly object upgrade + cdef readonly object chunked + cdef readonly object url # yarl.URL + + def __init__(self, method, path, version, headers, raw_headers, + should_close, compression, upgrade, chunked, url): + self.method = method + self.path = path + self.version = version + self.headers = headers + self.raw_headers = raw_headers + self.should_close = should_close + self.compression = compression + self.upgrade = upgrade + self.chunked = chunked + self.url = url + + def __repr__(self): + info = [] + info.append(("method", self.method)) + info.append(("path", self.path)) + info.append(("version", self.version)) + info.append(("headers", self.headers)) + info.append(("raw_headers", self.raw_headers)) + info.append(("should_close", self.should_close)) + info.append(("compression", self.compression)) + info.append(("upgrade", self.upgrade)) + info.append(("chunked", self.chunked)) + info.append(("url", self.url)) + sinfo = ', '.join(name + '=' + repr(val) for name, val in info) + return '' + + def _replace(self, **dct): + cdef RawRequestMessage ret + ret = _new_request_message(self.method, + self.path, + self.version, + self.headers, + self.raw_headers, + self.should_close, + self.compression, + self.upgrade, + self.chunked, + self.url) + if "method" in dct: + ret.method = dct["method"] + if "path" in dct: + ret.path = dct["path"] + if "version" in dct: + ret.version = dct["version"] + if "headers" in dct: + ret.headers = dct["headers"] + if "raw_headers" in dct: + ret.raw_headers = dct["raw_headers"] + if "should_close" in dct: + ret.should_close = dct["should_close"] + if "compression" in dct: + ret.compression = dct["compression"] + if "upgrade" in dct: + ret.upgrade = dct["upgrade"] + if "chunked" in dct: + ret.chunked = dct["chunked"] + if "url" in dct: + ret.url = dct["url"] + return ret + +cdef _new_request_message(str method, + str path, + object version, + object headers, + object raw_headers, + bint should_close, + object compression, + bint upgrade, + bint chunked, + object url): + cdef RawRequestMessage ret + ret = RawRequestMessage.__new__(RawRequestMessage) + ret.method = method + ret.path = path + ret.version = version + ret.headers = headers + ret.raw_headers = raw_headers + ret.should_close = should_close + ret.compression = compression + ret.upgrade = upgrade + ret.chunked = chunked + ret.url = url + return ret + + +@cython.freelist(DEFAULT_FREELIST_SIZE) +cdef class RawResponseMessage: + cdef readonly object version # HttpVersion + cdef readonly int code + cdef readonly str reason + cdef readonly object headers # CIMultiDict + cdef readonly object raw_headers # tuple + cdef readonly object should_close + cdef readonly object compression + cdef readonly object upgrade + cdef readonly object chunked + + def __init__(self, version, code, reason, headers, raw_headers, + should_close, compression, upgrade, chunked): + self.version = version + self.code = code + self.reason = reason + self.headers = headers + self.raw_headers = raw_headers + self.should_close = should_close + self.compression = compression + self.upgrade = upgrade + self.chunked = chunked + + def __repr__(self): + info = [] + info.append(("version", self.version)) + info.append(("code", self.code)) + info.append(("reason", self.reason)) + info.append(("headers", self.headers)) + info.append(("raw_headers", self.raw_headers)) + info.append(("should_close", self.should_close)) + info.append(("compression", self.compression)) + info.append(("upgrade", self.upgrade)) + info.append(("chunked", self.chunked)) + sinfo = ', '.join(name + '=' + repr(val) for name, val in info) + return '' + + +cdef _new_response_message(object version, + int code, + str reason, + object headers, + object raw_headers, + bint should_close, + object compression, + bint upgrade, + bint chunked): + cdef RawResponseMessage ret + ret = RawResponseMessage.__new__(RawResponseMessage) + ret.version = version + ret.code = code + ret.reason = reason + ret.headers = headers + ret.raw_headers = raw_headers + ret.should_close = should_close + ret.compression = compression + ret.upgrade = upgrade + ret.chunked = chunked + return ret + + +@cython.internal +cdef class HttpParser: + + cdef: + cparser.http_parser* _cparser + cparser.http_parser_settings* _csettings + + bytearray _raw_name + bytearray _raw_value + bint _has_value + + object _protocol + object _loop + object _timer + + size_t _max_line_size + size_t _max_field_size + size_t _max_headers + bint _response_with_body + + bint _started + object _url + bytearray _buf + str _path + str _reason + object _headers + list _raw_headers + bint _upgraded + list _messages + object _payload + bint _payload_error + object _payload_exception + object _last_error + bint _auto_decompress + + str _content_encoding + + Py_buffer py_buf + + def __cinit__(self): + self._cparser = \ + PyMem_Malloc(sizeof(cparser.http_parser)) + if self._cparser is NULL: + raise MemoryError() + + self._csettings = \ + PyMem_Malloc(sizeof(cparser.http_parser_settings)) + if self._csettings is NULL: + raise MemoryError() + + def __dealloc__(self): + PyMem_Free(self._cparser) + PyMem_Free(self._csettings) + + cdef _init(self, cparser.http_parser_type mode, + object protocol, object loop, object timer=None, + size_t max_line_size=8190, size_t max_headers=32768, + size_t max_field_size=8190, payload_exception=None, + bint response_with_body=True, bint auto_decompress=True): + cparser.http_parser_init(self._cparser, mode) + self._cparser.data = self + self._cparser.content_length = 0 + + cparser.http_parser_settings_init(self._csettings) + + self._protocol = protocol + self._loop = loop + self._timer = timer + + self._buf = bytearray() + self._payload = None + self._payload_error = 0 + self._payload_exception = payload_exception + self._messages = [] + + self._raw_name = bytearray() + self._raw_value = bytearray() + self._has_value = False + + self._max_line_size = max_line_size + self._max_headers = max_headers + self._max_field_size = max_field_size + self._response_with_body = response_with_body + self._upgraded = False + self._auto_decompress = auto_decompress + self._content_encoding = None + + self._csettings.on_url = cb_on_url + self._csettings.on_status = cb_on_status + self._csettings.on_header_field = cb_on_header_field + self._csettings.on_header_value = cb_on_header_value + self._csettings.on_headers_complete = cb_on_headers_complete + self._csettings.on_body = cb_on_body + self._csettings.on_message_begin = cb_on_message_begin + self._csettings.on_message_complete = cb_on_message_complete + self._csettings.on_chunk_header = cb_on_chunk_header + self._csettings.on_chunk_complete = cb_on_chunk_complete + + self._last_error = None + + cdef _process_header(self): + if self._raw_name: + raw_name = bytes(self._raw_name) + raw_value = bytes(self._raw_value) + + name = find_header(raw_name) + value = raw_value.decode('utf-8', 'surrogateescape') + + self._headers.add(name, value) + + if name is CONTENT_ENCODING: + self._content_encoding = value + + PyByteArray_Resize(self._raw_name, 0) + PyByteArray_Resize(self._raw_value, 0) + self._has_value = False + self._raw_headers.append((raw_name, raw_value)) + + cdef _on_header_field(self, char* at, size_t length): + cdef Py_ssize_t size + cdef char *buf + if self._has_value: + self._process_header() + + size = PyByteArray_Size(self._raw_name) + PyByteArray_Resize(self._raw_name, size + length) + buf = PyByteArray_AsString(self._raw_name) + memcpy(buf + size, at, length) + + cdef _on_header_value(self, char* at, size_t length): + cdef Py_ssize_t size + cdef char *buf + + size = PyByteArray_Size(self._raw_value) + PyByteArray_Resize(self._raw_value, size + length) + buf = PyByteArray_AsString(self._raw_value) + memcpy(buf + size, at, length) + self._has_value = True + + cdef _on_headers_complete(self): + self._process_header() + + method = http_method_str(self._cparser.method) + should_close = not cparser.http_should_keep_alive(self._cparser) + upgrade = self._cparser.upgrade + chunked = self._cparser.flags & cparser.F_CHUNKED + + raw_headers = tuple(self._raw_headers) + headers = CIMultiDictProxy(self._headers) + + if upgrade or self._cparser.method == 5: # cparser.CONNECT: + self._upgraded = True + + # do not support old websocket spec + if SEC_WEBSOCKET_KEY1 in headers: + raise InvalidHeader(SEC_WEBSOCKET_KEY1) + + encoding = None + enc = self._content_encoding + if enc is not None: + self._content_encoding = None + enc = enc.lower() + if enc in ('gzip', 'deflate', 'br'): + encoding = enc + + if self._cparser.type == cparser.HTTP_REQUEST: + msg = _new_request_message( + method, self._path, + self.http_version(), headers, raw_headers, + should_close, encoding, upgrade, chunked, self._url) + else: + msg = _new_response_message( + self.http_version(), self._cparser.status_code, self._reason, + headers, raw_headers, should_close, encoding, + upgrade, chunked) + + if (self._cparser.content_length > 0 or chunked or + self._cparser.method == 5): # CONNECT: 5 + payload = StreamReader( + self._protocol, timer=self._timer, loop=self._loop) + else: + payload = EMPTY_PAYLOAD + + self._payload = payload + if encoding is not None and self._auto_decompress: + self._payload = DeflateBuffer(payload, encoding) + + if not self._response_with_body: + payload = EMPTY_PAYLOAD + + self._messages.append((msg, payload)) + + cdef _on_message_complete(self): + self._payload.feed_eof() + self._payload = None + + cdef _on_chunk_header(self): + self._payload.begin_http_chunk_receiving() + + cdef _on_chunk_complete(self): + self._payload.end_http_chunk_receiving() + + cdef object _on_status_complete(self): + pass + + cdef inline http_version(self): + cdef cparser.http_parser* parser = self._cparser + + if parser.http_major == 1: + if parser.http_minor == 0: + return HttpVersion10 + elif parser.http_minor == 1: + return HttpVersion11 + + return HttpVersion(parser.http_major, parser.http_minor) + + ### Public API ### + + def feed_eof(self): + cdef bytes desc + + if self._payload is not None: + if self._cparser.flags & cparser.F_CHUNKED: + raise TransferEncodingError( + "Not enough data for satisfy transfer length header.") + elif self._cparser.flags & cparser.F_CONTENTLENGTH: + raise ContentLengthError( + "Not enough data for satisfy content length header.") + elif self._cparser.http_errno != cparser.HPE_OK: + desc = cparser.http_errno_description( + self._cparser.http_errno) + raise PayloadEncodingError(desc.decode('latin-1')) + else: + self._payload.feed_eof() + elif self._started: + self._on_headers_complete() + if self._messages: + return self._messages[-1][0] + + def feed_data(self, data): + cdef: + size_t data_len + size_t nb + + PyObject_GetBuffer(data, &self.py_buf, PyBUF_SIMPLE) + data_len = self.py_buf.len + + nb = cparser.http_parser_execute( + self._cparser, + self._csettings, + self.py_buf.buf, + data_len) + + PyBuffer_Release(&self.py_buf) + + # i am not sure about cparser.HPE_INVALID_METHOD, + # seems get err for valid request + # test_client_functional.py::test_post_data_with_bytesio_file + if (self._cparser.http_errno != cparser.HPE_OK and + (self._cparser.http_errno != cparser.HPE_INVALID_METHOD or + self._cparser.method == 0)): + if self._payload_error == 0: + if self._last_error is not None: + ex = self._last_error + self._last_error = None + else: + ex = parser_error_from_errno( + self._cparser.http_errno) + self._payload = None + raise ex + + if self._messages: + messages = self._messages + self._messages = [] + else: + messages = () + + if self._upgraded: + return messages, True, data[nb:] + else: + return messages, False, b'' + + +cdef class HttpRequestParser(HttpParser): + + def __init__(self, protocol, loop, timer=None, + size_t max_line_size=8190, size_t max_headers=32768, + size_t max_field_size=8190, payload_exception=None, + bint response_with_body=True, bint read_until_eof=False): + self._init(cparser.HTTP_REQUEST, protocol, loop, timer, + max_line_size, max_headers, max_field_size, + payload_exception, response_with_body) + + cdef object _on_status_complete(self): + cdef Py_buffer py_buf + if not self._buf: + return + self._path = self._buf.decode('utf-8', 'surrogateescape') + if self._cparser.method == 5: # CONNECT + self._url = URL(self._path) + else: + PyObject_GetBuffer(self._buf, &py_buf, PyBUF_SIMPLE) + try: + self._url = _parse_url(py_buf.buf, + py_buf.len) + finally: + PyBuffer_Release(&py_buf) + PyByteArray_Resize(self._buf, 0) + + +cdef class HttpResponseParser(HttpParser): + + def __init__(self, protocol, loop, timer=None, + size_t max_line_size=8190, size_t max_headers=32768, + size_t max_field_size=8190, payload_exception=None, + bint response_with_body=True, bint read_until_eof=False, + bint auto_decompress=True): + self._init(cparser.HTTP_RESPONSE, protocol, loop, timer, + max_line_size, max_headers, max_field_size, + payload_exception, response_with_body, auto_decompress) + + cdef object _on_status_complete(self): + if self._buf: + self._reason = self._buf.decode('utf-8', 'surrogateescape') + PyByteArray_Resize(self._buf, 0) + else: + self._reason = self._reason or '' + +cdef int cb_on_message_begin(cparser.http_parser* parser) except -1: + cdef HttpParser pyparser = parser.data + + pyparser._started = True + pyparser._headers = CIMultiDict() + pyparser._raw_headers = [] + PyByteArray_Resize(pyparser._buf, 0) + pyparser._path = None + pyparser._reason = None + return 0 + + +cdef int cb_on_url(cparser.http_parser* parser, + const char *at, size_t length) except -1: + cdef HttpParser pyparser = parser.data + try: + if length > pyparser._max_line_size: + raise LineTooLong( + 'Status line is too long', pyparser._max_line_size, length) + extend(pyparser._buf, at, length) + except BaseException as ex: + pyparser._last_error = ex + return -1 + else: + return 0 + + +cdef int cb_on_status(cparser.http_parser* parser, + const char *at, size_t length) except -1: + cdef HttpParser pyparser = parser.data + cdef str reason + try: + if length > pyparser._max_line_size: + raise LineTooLong( + 'Status line is too long', pyparser._max_line_size, length) + extend(pyparser._buf, at, length) + except BaseException as ex: + pyparser._last_error = ex + return -1 + else: + return 0 + + +cdef int cb_on_header_field(cparser.http_parser* parser, + const char *at, size_t length) except -1: + cdef HttpParser pyparser = parser.data + cdef Py_ssize_t size + try: + pyparser._on_status_complete() + size = len(pyparser._raw_name) + length + if size > pyparser._max_field_size: + raise LineTooLong( + 'Header name is too long', pyparser._max_field_size, size) + pyparser._on_header_field(at, length) + except BaseException as ex: + pyparser._last_error = ex + return -1 + else: + return 0 + + +cdef int cb_on_header_value(cparser.http_parser* parser, + const char *at, size_t length) except -1: + cdef HttpParser pyparser = parser.data + cdef Py_ssize_t size + try: + size = len(pyparser._raw_value) + length + if size > pyparser._max_field_size: + raise LineTooLong( + 'Header value is too long', pyparser._max_field_size, size) + pyparser._on_header_value(at, length) + except BaseException as ex: + pyparser._last_error = ex + return -1 + else: + return 0 + + +cdef int cb_on_headers_complete(cparser.http_parser* parser) except -1: + cdef HttpParser pyparser = parser.data + try: + pyparser._on_status_complete() + pyparser._on_headers_complete() + except BaseException as exc: + pyparser._last_error = exc + return -1 + else: + if pyparser._cparser.upgrade or pyparser._cparser.method == 5: # CONNECT + return 2 + else: + return 0 + + +cdef int cb_on_body(cparser.http_parser* parser, + const char *at, size_t length) except -1: + cdef HttpParser pyparser = parser.data + cdef bytes body = at[:length] + try: + pyparser._payload.feed_data(body, length) + except BaseException as exc: + if pyparser._payload_exception is not None: + pyparser._payload.set_exception(pyparser._payload_exception(str(exc))) + else: + pyparser._payload.set_exception(exc) + pyparser._payload_error = 1 + return -1 + else: + return 0 + + +cdef int cb_on_message_complete(cparser.http_parser* parser) except -1: + cdef HttpParser pyparser = parser.data + try: + pyparser._started = False + pyparser._on_message_complete() + except BaseException as exc: + pyparser._last_error = exc + return -1 + else: + return 0 + + +cdef int cb_on_chunk_header(cparser.http_parser* parser) except -1: + cdef HttpParser pyparser = parser.data + try: + pyparser._on_chunk_header() + except BaseException as exc: + pyparser._last_error = exc + return -1 + else: + return 0 + + +cdef int cb_on_chunk_complete(cparser.http_parser* parser) except -1: + cdef HttpParser pyparser = parser.data + try: + pyparser._on_chunk_complete() + except BaseException as exc: + pyparser._last_error = exc + return -1 + else: + return 0 + + +cdef parser_error_from_errno(cparser.http_errno errno): + cdef bytes desc = cparser.http_errno_description(errno) + + if errno in (cparser.HPE_CB_message_begin, + cparser.HPE_CB_url, + cparser.HPE_CB_header_field, + cparser.HPE_CB_header_value, + cparser.HPE_CB_headers_complete, + cparser.HPE_CB_body, + cparser.HPE_CB_message_complete, + cparser.HPE_CB_status, + cparser.HPE_CB_chunk_header, + cparser.HPE_CB_chunk_complete): + cls = BadHttpMessage + + elif errno == cparser.HPE_INVALID_STATUS: + cls = BadStatusLine + + elif errno == cparser.HPE_INVALID_METHOD: + cls = BadStatusLine + + elif errno == cparser.HPE_INVALID_URL: + cls = InvalidURLError + + else: + cls = BadHttpMessage + + return cls(desc.decode('latin-1')) + + +def parse_url(url): + cdef: + Py_buffer py_buf + char* buf_data + + PyObject_GetBuffer(url, &py_buf, PyBUF_SIMPLE) + try: + buf_data = py_buf.buf + return _parse_url(buf_data, py_buf.len) + finally: + PyBuffer_Release(&py_buf) + + +cdef _parse_url(char* buf_data, size_t length): + cdef: + cparser.http_parser_url* parsed + int res + str schema = None + str host = None + object port = None + str path = None + str query = None + str fragment = None + str user = None + str password = None + str userinfo = None + object result = None + int off + int ln + + parsed = \ + PyMem_Malloc(sizeof(cparser.http_parser_url)) + if parsed is NULL: + raise MemoryError() + cparser.http_parser_url_init(parsed) + try: + res = cparser.http_parser_parse_url(buf_data, length, 0, parsed) + + if res == 0: + if parsed.field_set & (1 << cparser.UF_SCHEMA): + off = parsed.field_data[cparser.UF_SCHEMA].off + ln = parsed.field_data[cparser.UF_SCHEMA].len + schema = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + else: + schema = '' + + if parsed.field_set & (1 << cparser.UF_HOST): + off = parsed.field_data[cparser.UF_HOST].off + ln = parsed.field_data[cparser.UF_HOST].len + host = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + else: + host = '' + + if parsed.field_set & (1 << cparser.UF_PORT): + port = parsed.port + + if parsed.field_set & (1 << cparser.UF_PATH): + off = parsed.field_data[cparser.UF_PATH].off + ln = parsed.field_data[cparser.UF_PATH].len + path = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + else: + path = '' + + if parsed.field_set & (1 << cparser.UF_QUERY): + off = parsed.field_data[cparser.UF_QUERY].off + ln = parsed.field_data[cparser.UF_QUERY].len + query = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + else: + query = '' + + if parsed.field_set & (1 << cparser.UF_FRAGMENT): + off = parsed.field_data[cparser.UF_FRAGMENT].off + ln = parsed.field_data[cparser.UF_FRAGMENT].len + fragment = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + else: + fragment = '' + + if parsed.field_set & (1 << cparser.UF_USERINFO): + off = parsed.field_data[cparser.UF_USERINFO].off + ln = parsed.field_data[cparser.UF_USERINFO].len + userinfo = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') + + user, sep, password = userinfo.partition(':') + + return URL_build(scheme=schema, + user=user, password=password, host=host, port=port, + path=path, query=query, fragment=fragment) + else: + raise InvalidURLError("invalid url {!r}".format(buf_data)) + finally: + PyMem_Free(parsed) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_http_writer.c b/venv-linux/lib/python3.6/site-packages/aiohttp/_http_writer.c new file mode 100644 index 0000000..edd752c --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_http_writer.c @@ -0,0 +1,5805 @@ +/* Generated by Cython 0.29.13 */ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.6+ or Python 3.3+. +#else +#define CYTHON_ABI "0_29_13" +#define CYTHON_HEX_VERSION 0x001D0DF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact + #define PyObject_Unicode PyObject_Str +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : (Py_INCREF(func), func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + + +#define __PYX_ERR(f_index, lineno, Ln_error) \ +{ \ + __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \ +} + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__aiohttp___http_writer +#define __PYX_HAVE_API__aiohttp___http_writer +/* Early includes */ +#include +#include +#include +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +static PyObject *__pyx_m = NULL; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_cython_runtime = NULL; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static PyObject *__pyx_empty_unicode; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + + +static const char *__pyx_f[] = { + "aiohttp/_http_writer.pyx", + ".build-venv/lib/python3.6/site-packages/Cython/Includes/cpython/type.pxd", +}; + +/*--- Type declarations ---*/ +struct __pyx_t_7aiohttp_12_http_writer_Writer; + +/* "aiohttp/_http_writer.pyx":19 + * # ----------------- writer --------------------------- + * + * cdef struct Writer: # <<<<<<<<<<<<<< + * char *buf + * Py_ssize_t size + */ +struct __pyx_t_7aiohttp_12_http_writer_Writer { + char *buf; + Py_ssize_t size; + Py_ssize_t pos; +}; + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* WriteUnraisableException.proto */ +static void __Pyx_WriteUnraisable(const char *name, int clineno, + int lineno, const char *filename, + int full_traceback, int nogil); + +/* unicode_iter.proto */ +static CYTHON_INLINE int __Pyx_init_unicode_iteration( + PyObject* ustring, Py_ssize_t *length, void** data, int *kind); + +/* PyCFunctionFastCall.proto */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +#else +#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#else +#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* ReRaiseException.proto */ +static CYTHON_INLINE void __Pyx_ReraiseException(void); + +/* IterFinish.proto */ +static CYTHON_INLINE int __Pyx_IterFinish(void); + +/* PyObjectCallNoArg.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); +#else +#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL) +#endif + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod0.proto */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* UnpackItemEndCheck.proto */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); + +/* RaiseNoneIterError.proto */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); + +/* UnpackTupleError.proto */ +static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); + +/* UnpackTuple2.proto */ +#define __Pyx_unpack_tuple2(tuple, value1, value2, is_tuple, has_known_size, decref_tuple)\ + (likely(is_tuple || PyTuple_Check(tuple)) ?\ + (likely(has_known_size || PyTuple_GET_SIZE(tuple) == 2) ?\ + __Pyx_unpack_tuple2_exact(tuple, value1, value2, decref_tuple) :\ + (__Pyx_UnpackTupleError(tuple, 2), -1)) :\ + __Pyx_unpack_tuple2_generic(tuple, value1, value2, has_known_size, decref_tuple)) +static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( + PyObject* tuple, PyObject** value1, PyObject** value2, int decref_tuple); +static int __Pyx_unpack_tuple2_generic( + PyObject* tuple, PyObject** value1, PyObject** value2, int has_known_size, int decref_tuple); + +/* dict_iter.proto */ +static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name, + Py_ssize_t* p_orig_length, int* p_is_dict); +static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict); + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* TypeImport.proto */ +#ifndef __PYX_HAVE_RT_ImportType_proto +#define __PYX_HAVE_RT_ImportType_proto +enum __Pyx_ImportType_CheckSize { + __Pyx_ImportType_CheckSize_Error = 0, + __Pyx_ImportType_CheckSize_Warn = 1, + __Pyx_ImportType_CheckSize_Ignore = 2 +}; +static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); +#endif + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + + +/* Module declarations from 'libc.stdint' */ + +/* Module declarations from 'libc.string' */ + +/* Module declarations from 'libc.stdio' */ + +/* Module declarations from '__builtin__' */ + +/* Module declarations from 'cpython.type' */ +static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; + +/* Module declarations from 'cpython' */ + +/* Module declarations from 'cpython.object' */ + +/* Module declarations from 'cpython.exc' */ + +/* Module declarations from 'cpython.mem' */ + +/* Module declarations from 'cpython.bytes' */ + +/* Module declarations from 'aiohttp._http_writer' */ +static char __pyx_v_7aiohttp_12_http_writer_BUFFER[0x4000]; +static PyObject *__pyx_v_7aiohttp_12_http_writer__istr = 0; +static CYTHON_INLINE void __pyx_f_7aiohttp_12_http_writer__init_writer(struct __pyx_t_7aiohttp_12_http_writer_Writer *); /*proto*/ +static CYTHON_INLINE void __pyx_f_7aiohttp_12_http_writer__release_writer(struct __pyx_t_7aiohttp_12_http_writer_Writer *); /*proto*/ +static CYTHON_INLINE int __pyx_f_7aiohttp_12_http_writer__write_byte(struct __pyx_t_7aiohttp_12_http_writer_Writer *, uint8_t); /*proto*/ +static CYTHON_INLINE int __pyx_f_7aiohttp_12_http_writer__write_utf8(struct __pyx_t_7aiohttp_12_http_writer_Writer *, Py_UCS4); /*proto*/ +static CYTHON_INLINE int __pyx_f_7aiohttp_12_http_writer__write_str(struct __pyx_t_7aiohttp_12_http_writer_Writer *, PyObject *); /*proto*/ +static PyObject *__pyx_f_7aiohttp_12_http_writer_to_str(PyObject *); /*proto*/ +#define __Pyx_MODULE_NAME "aiohttp._http_writer" +extern int __pyx_module_is_main_aiohttp___http_writer; +int __pyx_module_is_main_aiohttp___http_writer = 0; + +/* Implementation of 'aiohttp._http_writer' */ +static PyObject *__pyx_builtin_TypeError; +static const char __pyx_k_key[] = "key"; +static const char __pyx_k_ret[] = "ret"; +static const char __pyx_k_val[] = "val"; +static const char __pyx_k_istr[] = "istr"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_items[] = "items"; +static const char __pyx_k_format[] = "format"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_writer[] = "writer"; +static const char __pyx_k_headers[] = "headers"; +static const char __pyx_k_TypeError[] = "TypeError"; +static const char __pyx_k_multidict[] = "multidict"; +static const char __pyx_k_status_line[] = "status_line"; +static const char __pyx_k_serialize_headers[] = "_serialize_headers"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_aiohttp__http_writer[] = "aiohttp._http_writer"; +static const char __pyx_k_aiohttp__http_writer_pyx[] = "aiohttp/_http_writer.pyx"; +static const char __pyx_k_Cannot_serialize_non_str_key_r[] = "Cannot serialize non-str key {!r}"; +static PyObject *__pyx_kp_u_Cannot_serialize_non_str_key_r; +static PyObject *__pyx_n_s_TypeError; +static PyObject *__pyx_n_s_aiohttp__http_writer; +static PyObject *__pyx_kp_s_aiohttp__http_writer_pyx; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_n_s_format; +static PyObject *__pyx_n_s_headers; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_istr; +static PyObject *__pyx_n_s_items; +static PyObject *__pyx_n_s_key; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_multidict; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_n_s_ret; +static PyObject *__pyx_n_s_serialize_headers; +static PyObject *__pyx_n_s_status_line; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_n_s_val; +static PyObject *__pyx_n_s_writer; +static PyObject *__pyx_pf_7aiohttp_12_http_writer__serialize_headers(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_status_line, PyObject *__pyx_v_headers); /* proto */ +static PyObject *__pyx_tuple_; +static PyObject *__pyx_codeobj__2; +/* Late includes */ + +/* "aiohttp/_http_writer.pyx":25 + * + * + * cdef inline void _init_writer(Writer* writer): # <<<<<<<<<<<<<< + * writer.buf = &BUFFER[0] + * writer.size = BUF_SIZE + */ + +static CYTHON_INLINE void __pyx_f_7aiohttp_12_http_writer__init_writer(struct __pyx_t_7aiohttp_12_http_writer_Writer *__pyx_v_writer) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_init_writer", 0); + + /* "aiohttp/_http_writer.pyx":26 + * + * cdef inline void _init_writer(Writer* writer): + * writer.buf = &BUFFER[0] # <<<<<<<<<<<<<< + * writer.size = BUF_SIZE + * writer.pos = 0 + */ + __pyx_v_writer->buf = (&(__pyx_v_7aiohttp_12_http_writer_BUFFER[0])); + + /* "aiohttp/_http_writer.pyx":27 + * cdef inline void _init_writer(Writer* writer): + * writer.buf = &BUFFER[0] + * writer.size = BUF_SIZE # <<<<<<<<<<<<<< + * writer.pos = 0 + * + */ + __pyx_v_writer->size = 0x4000; + + /* "aiohttp/_http_writer.pyx":28 + * writer.buf = &BUFFER[0] + * writer.size = BUF_SIZE + * writer.pos = 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_writer->pos = 0; + + /* "aiohttp/_http_writer.pyx":25 + * + * + * cdef inline void _init_writer(Writer* writer): # <<<<<<<<<<<<<< + * writer.buf = &BUFFER[0] + * writer.size = BUF_SIZE + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "aiohttp/_http_writer.pyx":31 + * + * + * cdef inline void _release_writer(Writer* writer): # <<<<<<<<<<<<<< + * if writer.buf != BUFFER: + * PyMem_Free(writer.buf) + */ + +static CYTHON_INLINE void __pyx_f_7aiohttp_12_http_writer__release_writer(struct __pyx_t_7aiohttp_12_http_writer_Writer *__pyx_v_writer) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("_release_writer", 0); + + /* "aiohttp/_http_writer.pyx":32 + * + * cdef inline void _release_writer(Writer* writer): + * if writer.buf != BUFFER: # <<<<<<<<<<<<<< + * PyMem_Free(writer.buf) + * + */ + __pyx_t_1 = ((__pyx_v_writer->buf != __pyx_v_7aiohttp_12_http_writer_BUFFER) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_writer.pyx":33 + * cdef inline void _release_writer(Writer* writer): + * if writer.buf != BUFFER: + * PyMem_Free(writer.buf) # <<<<<<<<<<<<<< + * + * + */ + PyMem_Free(__pyx_v_writer->buf); + + /* "aiohttp/_http_writer.pyx":32 + * + * cdef inline void _release_writer(Writer* writer): + * if writer.buf != BUFFER: # <<<<<<<<<<<<<< + * PyMem_Free(writer.buf) + * + */ + } + + /* "aiohttp/_http_writer.pyx":31 + * + * + * cdef inline void _release_writer(Writer* writer): # <<<<<<<<<<<<<< + * if writer.buf != BUFFER: + * PyMem_Free(writer.buf) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "aiohttp/_http_writer.pyx":36 + * + * + * cdef inline int _write_byte(Writer* writer, uint8_t ch): # <<<<<<<<<<<<<< + * cdef char * buf + * cdef Py_ssize_t size + */ + +static CYTHON_INLINE int __pyx_f_7aiohttp_12_http_writer__write_byte(struct __pyx_t_7aiohttp_12_http_writer_Writer *__pyx_v_writer, uint8_t __pyx_v_ch) { + char *__pyx_v_buf; + Py_ssize_t __pyx_v_size; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2; + __Pyx_RefNannySetupContext("_write_byte", 0); + + /* "aiohttp/_http_writer.pyx":40 + * cdef Py_ssize_t size + * + * if writer.pos == writer.size: # <<<<<<<<<<<<<< + * # reallocate + * size = writer.size + BUF_SIZE + */ + __pyx_t_1 = ((__pyx_v_writer->pos == __pyx_v_writer->size) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_writer.pyx":42 + * if writer.pos == writer.size: + * # reallocate + * size = writer.size + BUF_SIZE # <<<<<<<<<<<<<< + * if writer.buf == BUFFER: + * buf = PyMem_Malloc(size) + */ + __pyx_v_size = (__pyx_v_writer->size + 0x4000); + + /* "aiohttp/_http_writer.pyx":43 + * # reallocate + * size = writer.size + BUF_SIZE + * if writer.buf == BUFFER: # <<<<<<<<<<<<<< + * buf = PyMem_Malloc(size) + * if buf == NULL: + */ + __pyx_t_1 = ((__pyx_v_writer->buf == __pyx_v_7aiohttp_12_http_writer_BUFFER) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_writer.pyx":44 + * size = writer.size + BUF_SIZE + * if writer.buf == BUFFER: + * buf = PyMem_Malloc(size) # <<<<<<<<<<<<<< + * if buf == NULL: + * PyErr_NoMemory() + */ + __pyx_v_buf = ((char *)PyMem_Malloc(__pyx_v_size)); + + /* "aiohttp/_http_writer.pyx":45 + * if writer.buf == BUFFER: + * buf = PyMem_Malloc(size) + * if buf == NULL: # <<<<<<<<<<<<<< + * PyErr_NoMemory() + * return -1 + */ + __pyx_t_1 = ((__pyx_v_buf == NULL) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_writer.pyx":46 + * buf = PyMem_Malloc(size) + * if buf == NULL: + * PyErr_NoMemory() # <<<<<<<<<<<<<< + * return -1 + * memcpy(buf, writer.buf, writer.size) + */ + __pyx_t_2 = PyErr_NoMemory(); if (unlikely(__pyx_t_2 == ((PyObject *)NULL))) __PYX_ERR(0, 46, __pyx_L1_error) + + /* "aiohttp/_http_writer.pyx":47 + * if buf == NULL: + * PyErr_NoMemory() + * return -1 # <<<<<<<<<<<<<< + * memcpy(buf, writer.buf, writer.size) + * else: + */ + __pyx_r = -1; + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":45 + * if writer.buf == BUFFER: + * buf = PyMem_Malloc(size) + * if buf == NULL: # <<<<<<<<<<<<<< + * PyErr_NoMemory() + * return -1 + */ + } + + /* "aiohttp/_http_writer.pyx":48 + * PyErr_NoMemory() + * return -1 + * memcpy(buf, writer.buf, writer.size) # <<<<<<<<<<<<<< + * else: + * buf = PyMem_Realloc(writer.buf, size) + */ + (void)(memcpy(__pyx_v_buf, __pyx_v_writer->buf, __pyx_v_writer->size)); + + /* "aiohttp/_http_writer.pyx":43 + * # reallocate + * size = writer.size + BUF_SIZE + * if writer.buf == BUFFER: # <<<<<<<<<<<<<< + * buf = PyMem_Malloc(size) + * if buf == NULL: + */ + goto __pyx_L4; + } + + /* "aiohttp/_http_writer.pyx":50 + * memcpy(buf, writer.buf, writer.size) + * else: + * buf = PyMem_Realloc(writer.buf, size) # <<<<<<<<<<<<<< + * if buf == NULL: + * PyErr_NoMemory() + */ + /*else*/ { + __pyx_v_buf = ((char *)PyMem_Realloc(__pyx_v_writer->buf, __pyx_v_size)); + + /* "aiohttp/_http_writer.pyx":51 + * else: + * buf = PyMem_Realloc(writer.buf, size) + * if buf == NULL: # <<<<<<<<<<<<<< + * PyErr_NoMemory() + * return -1 + */ + __pyx_t_1 = ((__pyx_v_buf == NULL) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_writer.pyx":52 + * buf = PyMem_Realloc(writer.buf, size) + * if buf == NULL: + * PyErr_NoMemory() # <<<<<<<<<<<<<< + * return -1 + * writer.buf = buf + */ + __pyx_t_2 = PyErr_NoMemory(); if (unlikely(__pyx_t_2 == ((PyObject *)NULL))) __PYX_ERR(0, 52, __pyx_L1_error) + + /* "aiohttp/_http_writer.pyx":53 + * if buf == NULL: + * PyErr_NoMemory() + * return -1 # <<<<<<<<<<<<<< + * writer.buf = buf + * writer.size = size + */ + __pyx_r = -1; + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":51 + * else: + * buf = PyMem_Realloc(writer.buf, size) + * if buf == NULL: # <<<<<<<<<<<<<< + * PyErr_NoMemory() + * return -1 + */ + } + } + __pyx_L4:; + + /* "aiohttp/_http_writer.pyx":54 + * PyErr_NoMemory() + * return -1 + * writer.buf = buf # <<<<<<<<<<<<<< + * writer.size = size + * writer.buf[writer.pos] = ch + */ + __pyx_v_writer->buf = __pyx_v_buf; + + /* "aiohttp/_http_writer.pyx":55 + * return -1 + * writer.buf = buf + * writer.size = size # <<<<<<<<<<<<<< + * writer.buf[writer.pos] = ch + * writer.pos += 1 + */ + __pyx_v_writer->size = __pyx_v_size; + + /* "aiohttp/_http_writer.pyx":40 + * cdef Py_ssize_t size + * + * if writer.pos == writer.size: # <<<<<<<<<<<<<< + * # reallocate + * size = writer.size + BUF_SIZE + */ + } + + /* "aiohttp/_http_writer.pyx":56 + * writer.buf = buf + * writer.size = size + * writer.buf[writer.pos] = ch # <<<<<<<<<<<<<< + * writer.pos += 1 + * return 0 + */ + (__pyx_v_writer->buf[__pyx_v_writer->pos]) = ((char)__pyx_v_ch); + + /* "aiohttp/_http_writer.pyx":57 + * writer.size = size + * writer.buf[writer.pos] = ch + * writer.pos += 1 # <<<<<<<<<<<<<< + * return 0 + * + */ + __pyx_v_writer->pos = (__pyx_v_writer->pos + 1); + + /* "aiohttp/_http_writer.pyx":58 + * writer.buf[writer.pos] = ch + * writer.pos += 1 + * return 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":36 + * + * + * cdef inline int _write_byte(Writer* writer, uint8_t ch): # <<<<<<<<<<<<<< + * cdef char * buf + * cdef Py_ssize_t size + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_WriteUnraisable("aiohttp._http_writer._write_byte", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); + __pyx_r = 0; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_writer.pyx":61 + * + * + * cdef inline int _write_utf8(Writer* writer, Py_UCS4 symbol): # <<<<<<<<<<<<<< + * cdef uint64_t utf = symbol + * + */ + +static CYTHON_INLINE int __pyx_f_7aiohttp_12_http_writer__write_utf8(struct __pyx_t_7aiohttp_12_http_writer_Writer *__pyx_v_writer, Py_UCS4 __pyx_v_symbol) { + uint64_t __pyx_v_utf; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + __Pyx_RefNannySetupContext("_write_utf8", 0); + + /* "aiohttp/_http_writer.pyx":62 + * + * cdef inline int _write_utf8(Writer* writer, Py_UCS4 symbol): + * cdef uint64_t utf = symbol # <<<<<<<<<<<<<< + * + * if utf < 0x80: + */ + __pyx_v_utf = ((uint64_t)__pyx_v_symbol); + + /* "aiohttp/_http_writer.pyx":64 + * cdef uint64_t utf = symbol + * + * if utf < 0x80: # <<<<<<<<<<<<<< + * return _write_byte(writer, utf) + * elif utf < 0x800: + */ + __pyx_t_1 = ((__pyx_v_utf < 0x80) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_writer.pyx":65 + * + * if utf < 0x80: + * return _write_byte(writer, utf) # <<<<<<<<<<<<<< + * elif utf < 0x800: + * if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: + */ + __pyx_r = __pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)__pyx_v_utf)); + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":64 + * cdef uint64_t utf = symbol + * + * if utf < 0x80: # <<<<<<<<<<<<<< + * return _write_byte(writer, utf) + * elif utf < 0x800: + */ + } + + /* "aiohttp/_http_writer.pyx":66 + * if utf < 0x80: + * return _write_byte(writer, utf) + * elif utf < 0x800: # <<<<<<<<<<<<<< + * if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: + * return -1 + */ + __pyx_t_1 = ((__pyx_v_utf < 0x800) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_writer.pyx":67 + * return _write_byte(writer, utf) + * elif utf < 0x800: + * if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: # <<<<<<<<<<<<<< + * return -1 + * return _write_byte(writer, (0x80 | (utf & 0x3f))) + */ + __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0xc0 | (__pyx_v_utf >> 6)))) < 0) != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_writer.pyx":68 + * elif utf < 0x800: + * if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: + * return -1 # <<<<<<<<<<<<<< + * return _write_byte(writer, (0x80 | (utf & 0x3f))) + * elif 0xD800 <= utf <= 0xDFFF: + */ + __pyx_r = -1; + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":67 + * return _write_byte(writer, utf) + * elif utf < 0x800: + * if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: # <<<<<<<<<<<<<< + * return -1 + * return _write_byte(writer, (0x80 | (utf & 0x3f))) + */ + } + + /* "aiohttp/_http_writer.pyx":69 + * if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: + * return -1 + * return _write_byte(writer, (0x80 | (utf & 0x3f))) # <<<<<<<<<<<<<< + * elif 0xD800 <= utf <= 0xDFFF: + * # surogate pair, ignored + */ + __pyx_r = __pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0x80 | (__pyx_v_utf & 0x3f)))); + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":66 + * if utf < 0x80: + * return _write_byte(writer, utf) + * elif utf < 0x800: # <<<<<<<<<<<<<< + * if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: + * return -1 + */ + } + + /* "aiohttp/_http_writer.pyx":70 + * return -1 + * return _write_byte(writer, (0x80 | (utf & 0x3f))) + * elif 0xD800 <= utf <= 0xDFFF: # <<<<<<<<<<<<<< + * # surogate pair, ignored + * return 0 + */ + __pyx_t_1 = (0xD800 <= __pyx_v_utf); + if (__pyx_t_1) { + __pyx_t_1 = (__pyx_v_utf <= 0xDFFF); + } + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_writer.pyx":72 + * elif 0xD800 <= utf <= 0xDFFF: + * # surogate pair, ignored + * return 0 # <<<<<<<<<<<<<< + * elif utf < 0x10000: + * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":70 + * return -1 + * return _write_byte(writer, (0x80 | (utf & 0x3f))) + * elif 0xD800 <= utf <= 0xDFFF: # <<<<<<<<<<<<<< + * # surogate pair, ignored + * return 0 + */ + } + + /* "aiohttp/_http_writer.pyx":73 + * # surogate pair, ignored + * return 0 + * elif utf < 0x10000: # <<<<<<<<<<<<<< + * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: + * return -1 + */ + __pyx_t_2 = ((__pyx_v_utf < 0x10000) != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_writer.pyx":74 + * return 0 + * elif utf < 0x10000: + * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: # <<<<<<<<<<<<<< + * return -1 + * if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: + */ + __pyx_t_2 = ((__pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0xe0 | (__pyx_v_utf >> 12)))) < 0) != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_writer.pyx":75 + * elif utf < 0x10000: + * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: + * return -1 # <<<<<<<<<<<<<< + * if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: + * return -1 + */ + __pyx_r = -1; + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":74 + * return 0 + * elif utf < 0x10000: + * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: # <<<<<<<<<<<<<< + * return -1 + * if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: + */ + } + + /* "aiohttp/_http_writer.pyx":76 + * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: + * return -1 + * if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: # <<<<<<<<<<<<<< + * return -1 + * return _write_byte(writer, (0x80 | (utf & 0x3f))) + */ + __pyx_t_2 = ((__pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0x80 | ((__pyx_v_utf >> 6) & 0x3f)))) < 0) != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_writer.pyx":77 + * return -1 + * if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: + * return -1 # <<<<<<<<<<<<<< + * return _write_byte(writer, (0x80 | (utf & 0x3f))) + * elif utf > 0x10FFFF: + */ + __pyx_r = -1; + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":76 + * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: + * return -1 + * if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: # <<<<<<<<<<<<<< + * return -1 + * return _write_byte(writer, (0x80 | (utf & 0x3f))) + */ + } + + /* "aiohttp/_http_writer.pyx":78 + * if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: + * return -1 + * return _write_byte(writer, (0x80 | (utf & 0x3f))) # <<<<<<<<<<<<<< + * elif utf > 0x10FFFF: + * # symbol is too large + */ + __pyx_r = __pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0x80 | (__pyx_v_utf & 0x3f)))); + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":73 + * # surogate pair, ignored + * return 0 + * elif utf < 0x10000: # <<<<<<<<<<<<<< + * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: + * return -1 + */ + } + + /* "aiohttp/_http_writer.pyx":79 + * return -1 + * return _write_byte(writer, (0x80 | (utf & 0x3f))) + * elif utf > 0x10FFFF: # <<<<<<<<<<<<<< + * # symbol is too large + * return 0 + */ + __pyx_t_2 = ((__pyx_v_utf > 0x10FFFF) != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_writer.pyx":81 + * elif utf > 0x10FFFF: + * # symbol is too large + * return 0 # <<<<<<<<<<<<<< + * else: + * if _write_byte(writer, (0xf0 | (utf >> 18))) < 0: + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":79 + * return -1 + * return _write_byte(writer, (0x80 | (utf & 0x3f))) + * elif utf > 0x10FFFF: # <<<<<<<<<<<<<< + * # symbol is too large + * return 0 + */ + } + + /* "aiohttp/_http_writer.pyx":83 + * return 0 + * else: + * if _write_byte(writer, (0xf0 | (utf >> 18))) < 0: # <<<<<<<<<<<<<< + * return -1 + * if _write_byte(writer, + */ + /*else*/ { + __pyx_t_2 = ((__pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0xf0 | (__pyx_v_utf >> 18)))) < 0) != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_writer.pyx":84 + * else: + * if _write_byte(writer, (0xf0 | (utf >> 18))) < 0: + * return -1 # <<<<<<<<<<<<<< + * if _write_byte(writer, + * (0x80 | ((utf >> 12) & 0x3f))) < 0: + */ + __pyx_r = -1; + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":83 + * return 0 + * else: + * if _write_byte(writer, (0xf0 | (utf >> 18))) < 0: # <<<<<<<<<<<<<< + * return -1 + * if _write_byte(writer, + */ + } + + /* "aiohttp/_http_writer.pyx":86 + * return -1 + * if _write_byte(writer, + * (0x80 | ((utf >> 12) & 0x3f))) < 0: # <<<<<<<<<<<<<< + * return -1 + * if _write_byte(writer, + */ + __pyx_t_2 = ((__pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0x80 | ((__pyx_v_utf >> 12) & 0x3f)))) < 0) != 0); + + /* "aiohttp/_http_writer.pyx":85 + * if _write_byte(writer, (0xf0 | (utf >> 18))) < 0: + * return -1 + * if _write_byte(writer, # <<<<<<<<<<<<<< + * (0x80 | ((utf >> 12) & 0x3f))) < 0: + * return -1 + */ + if (__pyx_t_2) { + + /* "aiohttp/_http_writer.pyx":87 + * if _write_byte(writer, + * (0x80 | ((utf >> 12) & 0x3f))) < 0: + * return -1 # <<<<<<<<<<<<<< + * if _write_byte(writer, + * (0x80 | ((utf >> 6) & 0x3f))) < 0: + */ + __pyx_r = -1; + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":85 + * if _write_byte(writer, (0xf0 | (utf >> 18))) < 0: + * return -1 + * if _write_byte(writer, # <<<<<<<<<<<<<< + * (0x80 | ((utf >> 12) & 0x3f))) < 0: + * return -1 + */ + } + + /* "aiohttp/_http_writer.pyx":89 + * return -1 + * if _write_byte(writer, + * (0x80 | ((utf >> 6) & 0x3f))) < 0: # <<<<<<<<<<<<<< + * return -1 + * return _write_byte(writer, (0x80 | (utf & 0x3f))) + */ + __pyx_t_2 = ((__pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0x80 | ((__pyx_v_utf >> 6) & 0x3f)))) < 0) != 0); + + /* "aiohttp/_http_writer.pyx":88 + * (0x80 | ((utf >> 12) & 0x3f))) < 0: + * return -1 + * if _write_byte(writer, # <<<<<<<<<<<<<< + * (0x80 | ((utf >> 6) & 0x3f))) < 0: + * return -1 + */ + if (__pyx_t_2) { + + /* "aiohttp/_http_writer.pyx":90 + * if _write_byte(writer, + * (0x80 | ((utf >> 6) & 0x3f))) < 0: + * return -1 # <<<<<<<<<<<<<< + * return _write_byte(writer, (0x80 | (utf & 0x3f))) + * + */ + __pyx_r = -1; + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":88 + * (0x80 | ((utf >> 12) & 0x3f))) < 0: + * return -1 + * if _write_byte(writer, # <<<<<<<<<<<<<< + * (0x80 | ((utf >> 6) & 0x3f))) < 0: + * return -1 + */ + } + + /* "aiohttp/_http_writer.pyx":91 + * (0x80 | ((utf >> 6) & 0x3f))) < 0: + * return -1 + * return _write_byte(writer, (0x80 | (utf & 0x3f))) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0x80 | (__pyx_v_utf & 0x3f)))); + goto __pyx_L0; + } + + /* "aiohttp/_http_writer.pyx":61 + * + * + * cdef inline int _write_utf8(Writer* writer, Py_UCS4 symbol): # <<<<<<<<<<<<<< + * cdef uint64_t utf = symbol + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_writer.pyx":94 + * + * + * cdef inline int _write_str(Writer* writer, str s): # <<<<<<<<<<<<<< + * cdef Py_UCS4 ch + * for ch in s: + */ + +static CYTHON_INLINE int __pyx_f_7aiohttp_12_http_writer__write_str(struct __pyx_t_7aiohttp_12_http_writer_Writer *__pyx_v_writer, PyObject *__pyx_v_s) { + Py_UCS4 __pyx_v_ch; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + void *__pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + int __pyx_t_8; + __Pyx_RefNannySetupContext("_write_str", 0); + + /* "aiohttp/_http_writer.pyx":96 + * cdef inline int _write_str(Writer* writer, str s): + * cdef Py_UCS4 ch + * for ch in s: # <<<<<<<<<<<<<< + * if _write_utf8(writer, ch) < 0: + * return -1 + */ + if (unlikely(__pyx_v_s == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); + __PYX_ERR(0, 96, __pyx_L1_error) + } + __Pyx_INCREF(__pyx_v_s); + __pyx_t_1 = __pyx_v_s; + __pyx_t_6 = __Pyx_init_unicode_iteration(__pyx_t_1, (&__pyx_t_3), (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 96, __pyx_L1_error) + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_3; __pyx_t_7++) { + __pyx_t_2 = __pyx_t_7; + __pyx_v_ch = __Pyx_PyUnicode_READ(__pyx_t_5, __pyx_t_4, __pyx_t_2); + + /* "aiohttp/_http_writer.pyx":97 + * cdef Py_UCS4 ch + * for ch in s: + * if _write_utf8(writer, ch) < 0: # <<<<<<<<<<<<<< + * return -1 + * + */ + __pyx_t_8 = ((__pyx_f_7aiohttp_12_http_writer__write_utf8(__pyx_v_writer, __pyx_v_ch) < 0) != 0); + if (__pyx_t_8) { + + /* "aiohttp/_http_writer.pyx":98 + * for ch in s: + * if _write_utf8(writer, ch) < 0: + * return -1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = -1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":97 + * cdef Py_UCS4 ch + * for ch in s: + * if _write_utf8(writer, ch) < 0: # <<<<<<<<<<<<<< + * return -1 + * + */ + } + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_http_writer.pyx":94 + * + * + * cdef inline int _write_str(Writer* writer, str s): # <<<<<<<<<<<<<< + * cdef Py_UCS4 ch + * for ch in s: + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_WriteUnraisable("aiohttp._http_writer._write_str", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); + __pyx_r = 0; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_writer.pyx":103 + * # --------------- _serialize_headers ---------------------- + * + * cdef str to_str(object s): # <<<<<<<<<<<<<< + * typ = type(s) + * if typ is str: + */ + +static PyObject *__pyx_f_7aiohttp_12_http_writer_to_str(PyObject *__pyx_v_s) { + PyTypeObject *__pyx_v_typ = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + __Pyx_RefNannySetupContext("to_str", 0); + + /* "aiohttp/_http_writer.pyx":104 + * + * cdef str to_str(object s): + * typ = type(s) # <<<<<<<<<<<<<< + * if typ is str: + * return s + */ + __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_s))); + __pyx_v_typ = ((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_s))); + + /* "aiohttp/_http_writer.pyx":105 + * cdef str to_str(object s): + * typ = type(s) + * if typ is str: # <<<<<<<<<<<<<< + * return s + * elif typ is _istr: + */ + __pyx_t_1 = (__pyx_v_typ == (&PyUnicode_Type)); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "aiohttp/_http_writer.pyx":106 + * typ = type(s) + * if typ is str: + * return s # <<<<<<<<<<<<<< + * elif typ is _istr: + * return PyObject_Str(s) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject*)__pyx_v_s)); + __pyx_r = ((PyObject*)__pyx_v_s); + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":105 + * cdef str to_str(object s): + * typ = type(s) + * if typ is str: # <<<<<<<<<<<<<< + * return s + * elif typ is _istr: + */ + } + + /* "aiohttp/_http_writer.pyx":107 + * if typ is str: + * return s + * elif typ is _istr: # <<<<<<<<<<<<<< + * return PyObject_Str(s) + * elif not isinstance(s, str): + */ + __pyx_t_2 = (__pyx_v_typ == ((PyTypeObject*)__pyx_v_7aiohttp_12_http_writer__istr)); + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "aiohttp/_http_writer.pyx":108 + * return s + * elif typ is _istr: + * return PyObject_Str(s) # <<<<<<<<<<<<<< + * elif not isinstance(s, str): + * raise TypeError("Cannot serialize non-str key {!r}".format(s)) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyObject_Str(__pyx_v_s); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(PyUnicode_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 108, __pyx_L1_error) + __pyx_r = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "aiohttp/_http_writer.pyx":107 + * if typ is str: + * return s + * elif typ is _istr: # <<<<<<<<<<<<<< + * return PyObject_Str(s) + * elif not isinstance(s, str): + */ + } + + /* "aiohttp/_http_writer.pyx":109 + * elif typ is _istr: + * return PyObject_Str(s) + * elif not isinstance(s, str): # <<<<<<<<<<<<<< + * raise TypeError("Cannot serialize non-str key {!r}".format(s)) + * else: + */ + __pyx_t_1 = PyUnicode_Check(__pyx_v_s); + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (unlikely(__pyx_t_2)) { + + /* "aiohttp/_http_writer.pyx":110 + * return PyObject_Str(s) + * elif not isinstance(s, str): + * raise TypeError("Cannot serialize non-str key {!r}".format(s)) # <<<<<<<<<<<<<< + * else: + * return str(s) + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Cannot_serialize_non_str_key_r, __pyx_n_s_format); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 110, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_s) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_s); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 110, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 110, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(0, 110, __pyx_L1_error) + + /* "aiohttp/_http_writer.pyx":109 + * elif typ is _istr: + * return PyObject_Str(s) + * elif not isinstance(s, str): # <<<<<<<<<<<<<< + * raise TypeError("Cannot serialize non-str key {!r}".format(s)) + * else: + */ + } + + /* "aiohttp/_http_writer.pyx":112 + * raise TypeError("Cannot serialize non-str key {!r}".format(s)) + * else: + * return str(s) # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_s); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + goto __pyx_L0; + } + + /* "aiohttp/_http_writer.pyx":103 + * # --------------- _serialize_headers ---------------------- + * + * cdef str to_str(object s): # <<<<<<<<<<<<<< + * typ = type(s) + * if typ is str: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("aiohttp._http_writer.to_str", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_typ); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_http_writer.pyx":115 + * + * + * def _serialize_headers(str status_line, headers): # <<<<<<<<<<<<<< + * cdef Writer writer + * cdef object key + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_12_http_writer_1_serialize_headers(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_7aiohttp_12_http_writer_1_serialize_headers = {"_serialize_headers", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_12_http_writer_1_serialize_headers, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_7aiohttp_12_http_writer_1_serialize_headers(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_status_line = 0; + PyObject *__pyx_v_headers = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_serialize_headers (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_status_line,&__pyx_n_s_headers,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status_line)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_headers)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("_serialize_headers", 1, 2, 2, 1); __PYX_ERR(0, 115, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_serialize_headers") < 0)) __PYX_ERR(0, 115, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_status_line = ((PyObject*)values[0]); + __pyx_v_headers = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_serialize_headers", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 115, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._http_writer._serialize_headers", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status_line), (&PyUnicode_Type), 1, "status_line", 1))) __PYX_ERR(0, 115, __pyx_L1_error) + __pyx_r = __pyx_pf_7aiohttp_12_http_writer__serialize_headers(__pyx_self, __pyx_v_status_line, __pyx_v_headers); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_12_http_writer__serialize_headers(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_status_line, PyObject *__pyx_v_headers) { + struct __pyx_t_7aiohttp_12_http_writer_Writer __pyx_v_writer; + PyObject *__pyx_v_key = 0; + PyObject *__pyx_v_val = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + char const *__pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + __Pyx_RefNannySetupContext("_serialize_headers", 0); + + /* "aiohttp/_http_writer.pyx":121 + * cdef bytes ret + * + * _init_writer(&writer) # <<<<<<<<<<<<<< + * + * try: + */ + __pyx_f_7aiohttp_12_http_writer__init_writer((&__pyx_v_writer)); + + /* "aiohttp/_http_writer.pyx":123 + * _init_writer(&writer) + * + * try: # <<<<<<<<<<<<<< + * if _write_str(&writer, status_line) < 0: + * raise + */ + /*try:*/ { + + /* "aiohttp/_http_writer.pyx":124 + * + * try: + * if _write_str(&writer, status_line) < 0: # <<<<<<<<<<<<<< + * raise + * if _write_byte(&writer, b'\r') < 0: + */ + __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_str((&__pyx_v_writer), __pyx_v_status_line) < 0) != 0); + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_http_writer.pyx":125 + * try: + * if _write_str(&writer, status_line) < 0: + * raise # <<<<<<<<<<<<<< + * if _write_byte(&writer, b'\r') < 0: + * raise + */ + __Pyx_ReraiseException(); __PYX_ERR(0, 125, __pyx_L4_error) + + /* "aiohttp/_http_writer.pyx":124 + * + * try: + * if _write_str(&writer, status_line) < 0: # <<<<<<<<<<<<<< + * raise + * if _write_byte(&writer, b'\r') < 0: + */ + } + + /* "aiohttp/_http_writer.pyx":126 + * if _write_str(&writer, status_line) < 0: + * raise + * if _write_byte(&writer, b'\r') < 0: # <<<<<<<<<<<<<< + * raise + * if _write_byte(&writer, b'\n') < 0: + */ + __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), '\r') < 0) != 0); + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_http_writer.pyx":127 + * raise + * if _write_byte(&writer, b'\r') < 0: + * raise # <<<<<<<<<<<<<< + * if _write_byte(&writer, b'\n') < 0: + * raise + */ + __Pyx_ReraiseException(); __PYX_ERR(0, 127, __pyx_L4_error) + + /* "aiohttp/_http_writer.pyx":126 + * if _write_str(&writer, status_line) < 0: + * raise + * if _write_byte(&writer, b'\r') < 0: # <<<<<<<<<<<<<< + * raise + * if _write_byte(&writer, b'\n') < 0: + */ + } + + /* "aiohttp/_http_writer.pyx":128 + * if _write_byte(&writer, b'\r') < 0: + * raise + * if _write_byte(&writer, b'\n') < 0: # <<<<<<<<<<<<<< + * raise + * + */ + __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), '\n') < 0) != 0); + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_http_writer.pyx":129 + * raise + * if _write_byte(&writer, b'\n') < 0: + * raise # <<<<<<<<<<<<<< + * + * for key, val in headers.items(): + */ + __Pyx_ReraiseException(); __PYX_ERR(0, 129, __pyx_L4_error) + + /* "aiohttp/_http_writer.pyx":128 + * if _write_byte(&writer, b'\r') < 0: + * raise + * if _write_byte(&writer, b'\n') < 0: # <<<<<<<<<<<<<< + * raise + * + */ + } + + /* "aiohttp/_http_writer.pyx":131 + * raise + * + * for key, val in headers.items(): # <<<<<<<<<<<<<< + * if _write_str(&writer, to_str(key)) < 0: + * raise + */ + __pyx_t_3 = 0; + if (unlikely(__pyx_v_headers == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 131, __pyx_L4_error) + } + __pyx_t_6 = __Pyx_dict_iterator(__pyx_v_headers, 0, __pyx_n_s_items, (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 131, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_2); + __pyx_t_2 = __pyx_t_6; + __pyx_t_6 = 0; + while (1) { + __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_4, &__pyx_t_3, &__pyx_t_6, &__pyx_t_7, NULL, __pyx_t_5); + if (unlikely(__pyx_t_8 == 0)) break; + if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 131, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_7); + __pyx_t_7 = 0; + + /* "aiohttp/_http_writer.pyx":132 + * + * for key, val in headers.items(): + * if _write_str(&writer, to_str(key)) < 0: # <<<<<<<<<<<<<< + * raise + * if _write_byte(&writer, b':') < 0: + */ + __pyx_t_7 = __pyx_f_7aiohttp_12_http_writer_to_str(__pyx_v_key); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 132, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_str((&__pyx_v_writer), ((PyObject*)__pyx_t_7)) < 0) != 0); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_http_writer.pyx":133 + * for key, val in headers.items(): + * if _write_str(&writer, to_str(key)) < 0: + * raise # <<<<<<<<<<<<<< + * if _write_byte(&writer, b':') < 0: + * raise + */ + __Pyx_ReraiseException(); __PYX_ERR(0, 133, __pyx_L4_error) + + /* "aiohttp/_http_writer.pyx":132 + * + * for key, val in headers.items(): + * if _write_str(&writer, to_str(key)) < 0: # <<<<<<<<<<<<<< + * raise + * if _write_byte(&writer, b':') < 0: + */ + } + + /* "aiohttp/_http_writer.pyx":134 + * if _write_str(&writer, to_str(key)) < 0: + * raise + * if _write_byte(&writer, b':') < 0: # <<<<<<<<<<<<<< + * raise + * if _write_byte(&writer, b' ') < 0: + */ + __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), ':') < 0) != 0); + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_http_writer.pyx":135 + * raise + * if _write_byte(&writer, b':') < 0: + * raise # <<<<<<<<<<<<<< + * if _write_byte(&writer, b' ') < 0: + * raise + */ + __Pyx_ReraiseException(); __PYX_ERR(0, 135, __pyx_L4_error) + + /* "aiohttp/_http_writer.pyx":134 + * if _write_str(&writer, to_str(key)) < 0: + * raise + * if _write_byte(&writer, b':') < 0: # <<<<<<<<<<<<<< + * raise + * if _write_byte(&writer, b' ') < 0: + */ + } + + /* "aiohttp/_http_writer.pyx":136 + * if _write_byte(&writer, b':') < 0: + * raise + * if _write_byte(&writer, b' ') < 0: # <<<<<<<<<<<<<< + * raise + * if _write_str(&writer, to_str(val)) < 0: + */ + __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), ' ') < 0) != 0); + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_http_writer.pyx":137 + * raise + * if _write_byte(&writer, b' ') < 0: + * raise # <<<<<<<<<<<<<< + * if _write_str(&writer, to_str(val)) < 0: + * raise + */ + __Pyx_ReraiseException(); __PYX_ERR(0, 137, __pyx_L4_error) + + /* "aiohttp/_http_writer.pyx":136 + * if _write_byte(&writer, b':') < 0: + * raise + * if _write_byte(&writer, b' ') < 0: # <<<<<<<<<<<<<< + * raise + * if _write_str(&writer, to_str(val)) < 0: + */ + } + + /* "aiohttp/_http_writer.pyx":138 + * if _write_byte(&writer, b' ') < 0: + * raise + * if _write_str(&writer, to_str(val)) < 0: # <<<<<<<<<<<<<< + * raise + * if _write_byte(&writer, b'\r') < 0: + */ + __pyx_t_7 = __pyx_f_7aiohttp_12_http_writer_to_str(__pyx_v_val); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 138, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_str((&__pyx_v_writer), ((PyObject*)__pyx_t_7)) < 0) != 0); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_http_writer.pyx":139 + * raise + * if _write_str(&writer, to_str(val)) < 0: + * raise # <<<<<<<<<<<<<< + * if _write_byte(&writer, b'\r') < 0: + * raise + */ + __Pyx_ReraiseException(); __PYX_ERR(0, 139, __pyx_L4_error) + + /* "aiohttp/_http_writer.pyx":138 + * if _write_byte(&writer, b' ') < 0: + * raise + * if _write_str(&writer, to_str(val)) < 0: # <<<<<<<<<<<<<< + * raise + * if _write_byte(&writer, b'\r') < 0: + */ + } + + /* "aiohttp/_http_writer.pyx":140 + * if _write_str(&writer, to_str(val)) < 0: + * raise + * if _write_byte(&writer, b'\r') < 0: # <<<<<<<<<<<<<< + * raise + * if _write_byte(&writer, b'\n') < 0: + */ + __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), '\r') < 0) != 0); + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_http_writer.pyx":141 + * raise + * if _write_byte(&writer, b'\r') < 0: + * raise # <<<<<<<<<<<<<< + * if _write_byte(&writer, b'\n') < 0: + * raise + */ + __Pyx_ReraiseException(); __PYX_ERR(0, 141, __pyx_L4_error) + + /* "aiohttp/_http_writer.pyx":140 + * if _write_str(&writer, to_str(val)) < 0: + * raise + * if _write_byte(&writer, b'\r') < 0: # <<<<<<<<<<<<<< + * raise + * if _write_byte(&writer, b'\n') < 0: + */ + } + + /* "aiohttp/_http_writer.pyx":142 + * if _write_byte(&writer, b'\r') < 0: + * raise + * if _write_byte(&writer, b'\n') < 0: # <<<<<<<<<<<<<< + * raise + * + */ + __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), '\n') < 0) != 0); + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_http_writer.pyx":143 + * raise + * if _write_byte(&writer, b'\n') < 0: + * raise # <<<<<<<<<<<<<< + * + * if _write_byte(&writer, b'\r') < 0: + */ + __Pyx_ReraiseException(); __PYX_ERR(0, 143, __pyx_L4_error) + + /* "aiohttp/_http_writer.pyx":142 + * if _write_byte(&writer, b'\r') < 0: + * raise + * if _write_byte(&writer, b'\n') < 0: # <<<<<<<<<<<<<< + * raise + * + */ + } + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_http_writer.pyx":145 + * raise + * + * if _write_byte(&writer, b'\r') < 0: # <<<<<<<<<<<<<< + * raise + * if _write_byte(&writer, b'\n') < 0: + */ + __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), '\r') < 0) != 0); + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_http_writer.pyx":146 + * + * if _write_byte(&writer, b'\r') < 0: + * raise # <<<<<<<<<<<<<< + * if _write_byte(&writer, b'\n') < 0: + * raise + */ + __Pyx_ReraiseException(); __PYX_ERR(0, 146, __pyx_L4_error) + + /* "aiohttp/_http_writer.pyx":145 + * raise + * + * if _write_byte(&writer, b'\r') < 0: # <<<<<<<<<<<<<< + * raise + * if _write_byte(&writer, b'\n') < 0: + */ + } + + /* "aiohttp/_http_writer.pyx":147 + * if _write_byte(&writer, b'\r') < 0: + * raise + * if _write_byte(&writer, b'\n') < 0: # <<<<<<<<<<<<<< + * raise + * + */ + __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), '\n') < 0) != 0); + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_http_writer.pyx":148 + * raise + * if _write_byte(&writer, b'\n') < 0: + * raise # <<<<<<<<<<<<<< + * + * return PyBytes_FromStringAndSize(writer.buf, writer.pos) + */ + __Pyx_ReraiseException(); __PYX_ERR(0, 148, __pyx_L4_error) + + /* "aiohttp/_http_writer.pyx":147 + * if _write_byte(&writer, b'\r') < 0: + * raise + * if _write_byte(&writer, b'\n') < 0: # <<<<<<<<<<<<<< + * raise + * + */ + } + + /* "aiohttp/_http_writer.pyx":150 + * raise + * + * return PyBytes_FromStringAndSize(writer.buf, writer.pos) # <<<<<<<<<<<<<< + * finally: + * _release_writer(&writer) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyBytes_FromStringAndSize(__pyx_v_writer.buf, __pyx_v_writer.pos); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 150, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L3_return; + } + + /* "aiohttp/_http_writer.pyx":152 + * return PyBytes_FromStringAndSize(writer.buf, writer.pos) + * finally: + * _release_writer(&writer) # <<<<<<<<<<<<<< + */ + /*finally:*/ { + __pyx_L4_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_14); + __Pyx_XGOTREF(__pyx_t_15); + __pyx_t_5 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename; + { + __pyx_f_7aiohttp_12_http_writer__release_writer((&__pyx_v_writer)); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_14); + __Pyx_XGIVEREF(__pyx_t_15); + __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); + } + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_12); + __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; + __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_8; __pyx_filename = __pyx_t_9; + goto __pyx_L1_error; + } + __pyx_L3_return: { + __pyx_t_15 = __pyx_r; + __pyx_r = 0; + __pyx_f_7aiohttp_12_http_writer__release_writer((&__pyx_v_writer)); + __pyx_r = __pyx_t_15; + __pyx_t_15 = 0; + goto __pyx_L0; + } + } + + /* "aiohttp/_http_writer.pyx":115 + * + * + * def _serialize_headers(str status_line, headers): # <<<<<<<<<<<<<< + * cdef Writer writer + * cdef object key + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("aiohttp._http_writer._serialize_headers", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_key); + __Pyx_XDECREF(__pyx_v_val); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec__http_writer(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec__http_writer}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "_http_writer", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_Cannot_serialize_non_str_key_r, __pyx_k_Cannot_serialize_non_str_key_r, sizeof(__pyx_k_Cannot_serialize_non_str_key_r), 0, 1, 0, 0}, + {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, + {&__pyx_n_s_aiohttp__http_writer, __pyx_k_aiohttp__http_writer, sizeof(__pyx_k_aiohttp__http_writer), 0, 0, 1, 1}, + {&__pyx_kp_s_aiohttp__http_writer_pyx, __pyx_k_aiohttp__http_writer_pyx, sizeof(__pyx_k_aiohttp__http_writer_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, + {&__pyx_n_s_headers, __pyx_k_headers, sizeof(__pyx_k_headers), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_istr, __pyx_k_istr, sizeof(__pyx_k_istr), 0, 0, 1, 1}, + {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1}, + {&__pyx_n_s_key, __pyx_k_key, sizeof(__pyx_k_key), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_multidict, __pyx_k_multidict, sizeof(__pyx_k_multidict), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_ret, __pyx_k_ret, sizeof(__pyx_k_ret), 0, 0, 1, 1}, + {&__pyx_n_s_serialize_headers, __pyx_k_serialize_headers, sizeof(__pyx_k_serialize_headers), 0, 0, 1, 1}, + {&__pyx_n_s_status_line, __pyx_k_status_line, sizeof(__pyx_k_status_line), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_val, __pyx_k_val, sizeof(__pyx_k_val), 0, 0, 1, 1}, + {&__pyx_n_s_writer, __pyx_k_writer, sizeof(__pyx_k_writer), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 110, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "aiohttp/_http_writer.pyx":115 + * + * + * def _serialize_headers(str status_line, headers): # <<<<<<<<<<<<<< + * cdef Writer writer + * cdef object key + */ + __pyx_tuple_ = PyTuple_Pack(6, __pyx_n_s_status_line, __pyx_n_s_headers, __pyx_n_s_writer, __pyx_n_s_key, __pyx_n_s_val, __pyx_n_s_ret); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 115, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple_, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_aiohttp__http_writer_pyx, __pyx_n_s_serialize_headers, 115, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) __PYX_ERR(0, 115, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __pyx_v_7aiohttp_12_http_writer__istr = Py_None; Py_INCREF(Py_None); + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", + #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 + sizeof(PyTypeObject), + #else + sizeof(PyHeapTypeObject), + #endif + __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION < 3 +#ifdef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC void +#else +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#endif +#else +#ifdef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC init_http_writer(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC init_http_writer(void) +#else +__Pyx_PyMODINIT_FUNC PyInit__http_writer(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit__http_writer(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { + result = PyDict_SetItemString(moddict, to_name, value); + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec__http_writer(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module '_http_writer' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit__http_writer(void)", 0); + if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("_http_writer", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_b); + __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_cython_runtime); + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_aiohttp___http_writer) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "aiohttp._http_writer")) { + if (unlikely(PyDict_SetItemString(modules, "aiohttp._http_writer", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) goto __pyx_L1_error; + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) goto __pyx_L1_error; + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + (void)__Pyx_modinit_type_init_code(); + if (unlikely(__Pyx_modinit_type_import_code() != 0)) goto __pyx_L1_error; + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "aiohttp/_http_writer.pyx":9 + * from cpython.object cimport PyObject_Str + * + * from multidict import istr # <<<<<<<<<<<<<< + * + * DEF BUF_SIZE = 16 * 1024 # 16KiB + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_istr); + __Pyx_GIVEREF(__pyx_n_s_istr); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_istr); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_multidict, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_istr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_istr, __pyx_t_1) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_http_writer.pyx":14 + * cdef char BUFFER[BUF_SIZE] + * + * cdef object _istr = istr # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_istr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_writer__istr); + __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_writer__istr, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + + /* "aiohttp/_http_writer.pyx":115 + * + * + * def _serialize_headers(str status_line, headers): # <<<<<<<<<<<<<< + * cdef Writer writer + * cdef object key + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7aiohttp_12_http_writer_1_serialize_headers, NULL, __pyx_n_s_aiohttp__http_writer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_serialize_headers, __pyx_t_2) < 0) __PYX_ERR(0, 115, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_http_writer.pyx":1 + * from libc.stdint cimport uint8_t, uint64_t # <<<<<<<<<<<<<< + * from libc.string cimport memcpy + * from cpython.exc cimport PyErr_NoMemory + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init aiohttp._http_writer", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init aiohttp._http_writer"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} +#endif + +/* WriteUnraisableException */ +static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno, + CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename, + int full_traceback, CYTHON_UNUSED int nogil) { + PyObject *old_exc, *old_val, *old_tb; + PyObject *ctx; + __Pyx_PyThreadState_declare +#ifdef WITH_THREAD + PyGILState_STATE state; + if (nogil) + state = PyGILState_Ensure(); +#ifdef _MSC_VER + else state = (PyGILState_STATE)-1; +#endif +#endif + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&old_exc, &old_val, &old_tb); + if (full_traceback) { + Py_XINCREF(old_exc); + Py_XINCREF(old_val); + Py_XINCREF(old_tb); + __Pyx_ErrRestore(old_exc, old_val, old_tb); + PyErr_PrintEx(1); + } + #if PY_MAJOR_VERSION < 3 + ctx = PyString_FromString(name); + #else + ctx = PyUnicode_FromString(name); + #endif + __Pyx_ErrRestore(old_exc, old_val, old_tb); + if (!ctx) { + PyErr_WriteUnraisable(Py_None); + } else { + PyErr_WriteUnraisable(ctx); + Py_DECREF(ctx); + } +#ifdef WITH_THREAD + if (nogil) + PyGILState_Release(state); +#endif +} + +/* unicode_iter */ +static CYTHON_INLINE int __Pyx_init_unicode_iteration( + PyObject* ustring, Py_ssize_t *length, void** data, int *kind) { +#if CYTHON_PEP393_ENABLED + if (unlikely(__Pyx_PyUnicode_READY(ustring) < 0)) return -1; + *kind = PyUnicode_KIND(ustring); + *length = PyUnicode_GET_LENGTH(ustring); + *data = PyUnicode_DATA(ustring); +#else + *kind = 0; + *length = PyUnicode_GET_SIZE(ustring); + *data = (void*)PyUnicode_AS_UNICODE(ustring); +#endif + return 0; +} + +/* PyCFunctionFastCall */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { + PyCFunctionObject *func = (PyCFunctionObject*)func_obj; + PyCFunction meth = PyCFunction_GET_FUNCTION(func); + PyObject *self = PyCFunction_GET_SELF(func); + int flags = PyCFunction_GET_FLAGS(func); + assert(PyCFunction_Check(func)); + assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + /* _PyCFunction_FastCallDict() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller loses its exception */ + assert(!PyErr_Occurred()); + if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { + return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + } else { + return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + } +} +#endif + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCall2Args */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args, *result = NULL; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyFunction_FastCall(function, args, 2); + } + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyCFunction_FastCall(function, args, 2); + } + #endif + args = PyTuple_New(2); + if (unlikely(!args)) goto done; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + Py_INCREF(function); + result = __Pyx_PyObject_Call(function, args, NULL); + Py_DECREF(args); + Py_DECREF(function); +done: + return result; +} + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallOneArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, &arg, 1); + } +#endif + if (likely(PyCFunction_Check(func))) { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); +#if CYTHON_FAST_PYCCALL + } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { + return __Pyx_PyCFunction_FastCall(func, &arg, 1); +#endif + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + __Pyx_PyThreadState_declare + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { +#if CYTHON_COMPILING_IN_PYPY + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#else + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", + name, type->tp_name, Py_TYPE(obj)->tp_name); + return 0; +} + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* ReRaiseException */ +static CYTHON_INLINE void __Pyx_ReraiseException(void) { + PyObject *type = NULL, *value = NULL, *tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = PyThreadState_GET(); + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + type = exc_info->exc_type; + value = exc_info->exc_value; + tb = exc_info->exc_traceback; + #else + type = tstate->exc_type; + value = tstate->exc_value; + tb = tstate->exc_traceback; + #endif +#else + PyErr_GetExcInfo(&type, &value, &tb); +#endif + if (!type || type == Py_None) { +#if !CYTHON_FAST_THREAD_STATE + Py_XDECREF(type); + Py_XDECREF(value); + Py_XDECREF(tb); +#endif + PyErr_SetString(PyExc_RuntimeError, + "No active exception to reraise"); + } else { +#if CYTHON_FAST_THREAD_STATE + Py_INCREF(type); + Py_XINCREF(value); + Py_XINCREF(tb); +#endif + PyErr_Restore(type, value, tb); + } +} + +/* IterFinish */ +static CYTHON_INLINE int __Pyx_IterFinish(void) { +#if CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* exc_type = tstate->curexc_type; + if (unlikely(exc_type)) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) { + PyObject *exc_value, *exc_tb; + exc_value = tstate->curexc_value; + exc_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + Py_DECREF(exc_type); + Py_XDECREF(exc_value); + Py_XDECREF(exc_tb); + return 0; + } else { + return -1; + } + } + return 0; +#else + if (unlikely(PyErr_Occurred())) { + if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { + PyErr_Clear(); + return 0; + } else { + return -1; + } + } + return 0; +#endif +} + +/* PyObjectCallNoArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, NULL, 0); + } +#endif +#ifdef __Pyx_CyFunction_USED + if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func))) +#else + if (likely(PyCFunction_Check(func))) +#endif + { + if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { + return __Pyx_PyObject_CallMethO(func, NULL); + } + } + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL); +} +#endif + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (descr != NULL) { + *method = descr; + return 0; + } + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(name)); +#endif + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod0 */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { + PyObject *method = NULL, *result = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_CallOneArg(method, obj); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) goto bad; + result = __Pyx_PyObject_CallNoArg(method); + Py_DECREF(method); +bad: + return result; +} + +/* RaiseNeedMoreValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* RaiseTooManyValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* UnpackItemEndCheck */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { + if (unlikely(retval)) { + Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(expected); + return -1; + } else { + return __Pyx_IterFinish(); + } + return 0; +} + +/* RaiseNoneIterError */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +/* UnpackTupleError */ +static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { + if (t == Py_None) { + __Pyx_RaiseNoneNotIterableError(); + } else if (PyTuple_GET_SIZE(t) < index) { + __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); + } else { + __Pyx_RaiseTooManyValuesError(index); + } +} + +/* UnpackTuple2 */ +static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( + PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) { + PyObject *value1 = NULL, *value2 = NULL; +#if CYTHON_COMPILING_IN_PYPY + value1 = PySequence_ITEM(tuple, 0); if (unlikely(!value1)) goto bad; + value2 = PySequence_ITEM(tuple, 1); if (unlikely(!value2)) goto bad; +#else + value1 = PyTuple_GET_ITEM(tuple, 0); Py_INCREF(value1); + value2 = PyTuple_GET_ITEM(tuple, 1); Py_INCREF(value2); +#endif + if (decref_tuple) { + Py_DECREF(tuple); + } + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +#if CYTHON_COMPILING_IN_PYPY +bad: + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; +#endif +} +static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, + int has_known_size, int decref_tuple) { + Py_ssize_t index; + PyObject *value1 = NULL, *value2 = NULL, *iter = NULL; + iternextfunc iternext; + iter = PyObject_GetIter(tuple); + if (unlikely(!iter)) goto bad; + if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } + iternext = Py_TYPE(iter)->tp_iternext; + value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } + value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } + if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; + Py_DECREF(iter); + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +unpacking_failed: + if (!has_known_size && __Pyx_IterFinish() == 0) + __Pyx_RaiseNeedMoreValuesError(index); +bad: + Py_XDECREF(iter); + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; +} + +/* dict_iter */ +static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name, + Py_ssize_t* p_orig_length, int* p_source_is_dict) { + is_dict = is_dict || likely(PyDict_CheckExact(iterable)); + *p_source_is_dict = is_dict; + if (is_dict) { +#if !CYTHON_COMPILING_IN_PYPY + *p_orig_length = PyDict_Size(iterable); + Py_INCREF(iterable); + return iterable; +#elif PY_MAJOR_VERSION >= 3 + static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL; + PyObject **pp = NULL; + if (method_name) { + const char *name = PyUnicode_AsUTF8(method_name); + if (strcmp(name, "iteritems") == 0) pp = &py_items; + else if (strcmp(name, "iterkeys") == 0) pp = &py_keys; + else if (strcmp(name, "itervalues") == 0) pp = &py_values; + if (pp) { + if (!*pp) { + *pp = PyUnicode_FromString(name + 4); + if (!*pp) + return NULL; + } + method_name = *pp; + } + } +#endif + } + *p_orig_length = 0; + if (method_name) { + PyObject* iter; + iterable = __Pyx_PyObject_CallMethod0(iterable, method_name); + if (!iterable) + return NULL; +#if !CYTHON_COMPILING_IN_PYPY + if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable)) + return iterable; +#endif + iter = PyObject_GetIter(iterable); + Py_DECREF(iterable); + return iter; + } + return PyObject_GetIter(iterable); +} +static CYTHON_INLINE int __Pyx_dict_iter_next( + PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) { + PyObject* next_item; +#if !CYTHON_COMPILING_IN_PYPY + if (source_is_dict) { + PyObject *key, *value; + if (unlikely(orig_length != PyDict_Size(iter_obj))) { + PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); + return -1; + } + if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) { + return 0; + } + if (pitem) { + PyObject* tuple = PyTuple_New(2); + if (unlikely(!tuple)) { + return -1; + } + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(tuple, 0, key); + PyTuple_SET_ITEM(tuple, 1, value); + *pitem = tuple; + } else { + if (pkey) { + Py_INCREF(key); + *pkey = key; + } + if (pvalue) { + Py_INCREF(value); + *pvalue = value; + } + } + return 1; + } else if (PyTuple_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyTuple_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else if (PyList_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyList_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else +#endif + { + next_item = PyIter_Next(iter_obj); + if (unlikely(!next_item)) { + return __Pyx_IterFinish(); + } + } + if (pitem) { + *pitem = next_item; + } else if (pkey && pvalue) { + if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1)) + return -1; + } else if (pkey) { + *pkey = next_item; + } else { + *pvalue = next_item; + } + return 1; +} + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type, *local_value, *local_tb; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = *type; + exc_info->exc_value = *value; + exc_info->exc_traceback = *tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = *type; + tstate->exc_value = *value; + tstate->exc_traceback = *tb; + #endif + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + #endif + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +#endif + +/* TypeImport */ +#ifndef __PYX_HAVE_RT_ImportType +#define __PYX_HAVE_RT_ImportType +static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, + size_t size, enum __Pyx_ImportType_CheckSize check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; +#ifdef Py_LIMITED_API + PyObject *py_basicsize; +#endif + result = PyObject_GetAttrString(module, class_name); + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%.200s.%.200s is not a type object", + module_name, class_name); + goto bad; + } +#ifndef Py_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; +#else + py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); + if (!py_basicsize) + goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; +#endif + if ((size_t)basicsize < size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + goto bad; + } + if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + goto bad; + } + else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(result); + return NULL; +} +#endif + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (!py_import) + goto bad; + #endif + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.')) { + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, 1); + if (!module) { + if (!PyErr_ExceptionMatches(PyExc_ImportError)) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, level); + #endif + } + } +bad: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* CLineInTraceback */ +#ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} + +/* AddTraceback */ +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +/* CIntFromPyVerify */ +#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntFromPy */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntFromPy */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + case -2: + if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; ip) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type %.200s). " + "The ability to return an instance of a strict subclass of int " + "is deprecated, and may be removed in a future version of Python.", + Py_TYPE(result)->tp_name)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_http_writer.cpython-36m-x86_64-linux-gnu.so b/venv-linux/lib/python3.6/site-packages/aiohttp/_http_writer.cpython-36m-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..189dd016b7e566a2afb8d91dc5a74cfcd3091db1 GIT binary patch literal 200464 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

    %C@1KZ)#q7IIcY?|))nf%_fWTt)pQ{5~`8h%M^2 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�Y&a(9Ys@X0}+)A`?qKcNY^O_iJM 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 DzpwV` literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_http_writer.pyx b/venv-linux/lib/python3.6/site-packages/aiohttp/_http_writer.pyx new file mode 100644 index 0000000..bc3cff0 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_http_writer.pyx @@ -0,0 +1,152 @@ +from libc.stdint cimport uint8_t, uint64_t +from libc.string cimport memcpy +from cpython.exc cimport PyErr_NoMemory +from cpython.mem cimport PyMem_Malloc, PyMem_Realloc, PyMem_Free + +from cpython.bytes cimport PyBytes_FromStringAndSize +from cpython.object cimport PyObject_Str + +from multidict import istr + +DEF BUF_SIZE = 16 * 1024 # 16KiB +cdef char BUFFER[BUF_SIZE] + +cdef object _istr = istr + + +# ----------------- writer --------------------------- + +cdef struct Writer: + char *buf + Py_ssize_t size + Py_ssize_t pos + + +cdef inline void _init_writer(Writer* writer): + writer.buf = &BUFFER[0] + writer.size = BUF_SIZE + writer.pos = 0 + + +cdef inline void _release_writer(Writer* writer): + if writer.buf != BUFFER: + PyMem_Free(writer.buf) + + +cdef inline int _write_byte(Writer* writer, uint8_t ch): + cdef char * buf + cdef Py_ssize_t size + + if writer.pos == writer.size: + # reallocate + size = writer.size + BUF_SIZE + if writer.buf == BUFFER: + buf = PyMem_Malloc(size) + if buf == NULL: + PyErr_NoMemory() + return -1 + memcpy(buf, writer.buf, writer.size) + else: + buf = PyMem_Realloc(writer.buf, size) + if buf == NULL: + PyErr_NoMemory() + return -1 + writer.buf = buf + writer.size = size + writer.buf[writer.pos] = ch + writer.pos += 1 + return 0 + + +cdef inline int _write_utf8(Writer* writer, Py_UCS4 symbol): + cdef uint64_t utf = symbol + + if utf < 0x80: + return _write_byte(writer, utf) + elif utf < 0x800: + if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: + return -1 + return _write_byte(writer, (0x80 | (utf & 0x3f))) + elif 0xD800 <= utf <= 0xDFFF: + # surogate pair, ignored + return 0 + elif utf < 0x10000: + if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: + return -1 + if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: + return -1 + return _write_byte(writer, (0x80 | (utf & 0x3f))) + elif utf > 0x10FFFF: + # symbol is too large + return 0 + else: + if _write_byte(writer, (0xf0 | (utf >> 18))) < 0: + return -1 + if _write_byte(writer, + (0x80 | ((utf >> 12) & 0x3f))) < 0: + return -1 + if _write_byte(writer, + (0x80 | ((utf >> 6) & 0x3f))) < 0: + return -1 + return _write_byte(writer, (0x80 | (utf & 0x3f))) + + +cdef inline int _write_str(Writer* writer, str s): + cdef Py_UCS4 ch + for ch in s: + if _write_utf8(writer, ch) < 0: + return -1 + + +# --------------- _serialize_headers ---------------------- + +cdef str to_str(object s): + typ = type(s) + if typ is str: + return s + elif typ is _istr: + return PyObject_Str(s) + elif not isinstance(s, str): + raise TypeError("Cannot serialize non-str key {!r}".format(s)) + else: + return str(s) + + +def _serialize_headers(str status_line, headers): + cdef Writer writer + cdef object key + cdef object val + cdef bytes ret + + _init_writer(&writer) + + try: + if _write_str(&writer, status_line) < 0: + raise + if _write_byte(&writer, b'\r') < 0: + raise + if _write_byte(&writer, b'\n') < 0: + raise + + for key, val in headers.items(): + if _write_str(&writer, to_str(key)) < 0: + raise + if _write_byte(&writer, b':') < 0: + raise + if _write_byte(&writer, b' ') < 0: + raise + if _write_str(&writer, to_str(val)) < 0: + raise + if _write_byte(&writer, b'\r') < 0: + raise + if _write_byte(&writer, b'\n') < 0: + raise + + if _write_byte(&writer, b'\r') < 0: + raise + if _write_byte(&writer, b'\n') < 0: + raise + + return PyBytes_FromStringAndSize(writer.buf, writer.pos) + finally: + _release_writer(&writer) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_websocket.c b/venv-linux/lib/python3.6/site-packages/aiohttp/_websocket.c new file mode 100644 index 0000000..c7213f9 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_websocket.c @@ -0,0 +1,3562 @@ +/* Generated by Cython 0.29.13 */ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.6+ or Python 3.3+. +#else +#define CYTHON_ABI "0_29_13" +#define CYTHON_HEX_VERSION 0x001D0DF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact + #define PyObject_Unicode PyObject_Str +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : (Py_INCREF(func), func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + + +#define __PYX_ERR(f_index, lineno, Ln_error) \ +{ \ + __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \ +} + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__aiohttp___websocket +#define __PYX_HAVE_API__aiohttp___websocket +/* Early includes */ +#include +#include +#include "pythread.h" +#include +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +static PyObject *__pyx_m = NULL; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_cython_runtime = NULL; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static PyObject *__pyx_empty_unicode; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + + +static const char *__pyx_f[] = { + "aiohttp/_websocket.pyx", + ".build-venv/lib/python3.6/site-packages/Cython/Includes/cpython/type.pxd", + ".build-venv/lib/python3.6/site-packages/Cython/Includes/cpython/bool.pxd", + ".build-venv/lib/python3.6/site-packages/Cython/Includes/cpython/complex.pxd", +}; + +/*--- Type declarations ---*/ + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +/* PyCFunctionFastCall.proto */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +#else +#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#else +#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* TypeImport.proto */ +#ifndef __PYX_HAVE_RT_ImportType_proto +#define __PYX_HAVE_RT_ImportType_proto +enum __Pyx_ImportType_CheckSize { + __Pyx_ImportType_CheckSize_Error = 0, + __Pyx_ImportType_CheckSize_Warn = 1, + __Pyx_ImportType_CheckSize_Ignore = 2 +}; +static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); +#endif + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + + +/* Module declarations from 'cpython.version' */ + +/* Module declarations from '__builtin__' */ + +/* Module declarations from 'cpython.type' */ +static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; + +/* Module declarations from 'libc.string' */ + +/* Module declarations from 'libc.stdio' */ + +/* Module declarations from 'cpython.object' */ + +/* Module declarations from 'cpython.ref' */ + +/* Module declarations from 'cpython.exc' */ + +/* Module declarations from 'cpython.module' */ + +/* Module declarations from 'cpython.mem' */ + +/* Module declarations from 'cpython.tuple' */ + +/* Module declarations from 'cpython.list' */ + +/* Module declarations from 'cpython.sequence' */ + +/* Module declarations from 'cpython.mapping' */ + +/* Module declarations from 'cpython.iterator' */ + +/* Module declarations from 'cpython.number' */ + +/* Module declarations from 'cpython.int' */ + +/* Module declarations from '__builtin__' */ + +/* Module declarations from 'cpython.bool' */ +static PyTypeObject *__pyx_ptype_7cpython_4bool_bool = 0; + +/* Module declarations from 'cpython.long' */ + +/* Module declarations from 'cpython.float' */ + +/* Module declarations from '__builtin__' */ + +/* Module declarations from 'cpython.complex' */ +static PyTypeObject *__pyx_ptype_7cpython_7complex_complex = 0; + +/* Module declarations from 'cpython.string' */ + +/* Module declarations from 'cpython.unicode' */ + +/* Module declarations from 'cpython.dict' */ + +/* Module declarations from 'cpython.instance' */ + +/* Module declarations from 'cpython.function' */ + +/* Module declarations from 'cpython.method' */ + +/* Module declarations from 'cpython.weakref' */ + +/* Module declarations from 'cpython.getargs' */ + +/* Module declarations from 'cpython.pythread' */ + +/* Module declarations from 'cpython.pystate' */ + +/* Module declarations from 'cpython.cobject' */ + +/* Module declarations from 'cpython.oldbuffer' */ + +/* Module declarations from 'cpython.set' */ + +/* Module declarations from 'cpython.buffer' */ + +/* Module declarations from 'cpython.bytes' */ + +/* Module declarations from 'cpython.pycapsule' */ + +/* Module declarations from 'cpython' */ + +/* Module declarations from 'libc.stdint' */ + +/* Module declarations from 'aiohttp._websocket' */ +#define __Pyx_MODULE_NAME "aiohttp._websocket" +extern int __pyx_module_is_main_aiohttp___websocket; +int __pyx_module_is_main_aiohttp___websocket = 0; + +/* Implementation of 'aiohttp._websocket' */ +static PyObject *__pyx_builtin_range; +static const char __pyx_k_i[] = "i"; +static const char __pyx_k_data[] = "data"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_mask[] = "mask"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_in_buf[] = "in_buf"; +static const char __pyx_k_data_len[] = "data_len"; +static const char __pyx_k_mask_buf[] = "mask_buf"; +static const char __pyx_k_uint32_msk[] = "uint32_msk"; +static const char __pyx_k_uint64_msk[] = "uint64_msk"; +static const char __pyx_k_aiohttp__websocket[] = "aiohttp._websocket"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_websocket_mask_cython[] = "_websocket_mask_cython"; +static const char __pyx_k_aiohttp__websocket_pyx[] = "aiohttp/_websocket.pyx"; +static PyObject *__pyx_n_s_aiohttp__websocket; +static PyObject *__pyx_kp_s_aiohttp__websocket_pyx; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_n_s_data; +static PyObject *__pyx_n_s_data_len; +static PyObject *__pyx_n_s_i; +static PyObject *__pyx_n_s_in_buf; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_mask; +static PyObject *__pyx_n_s_mask_buf; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_n_s_range; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_n_s_uint32_msk; +static PyObject *__pyx_n_s_uint64_msk; +static PyObject *__pyx_n_s_websocket_mask_cython; +static PyObject *__pyx_pf_7aiohttp_10_websocket__websocket_mask_cython(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_mask, PyObject *__pyx_v_data); /* proto */ +static PyObject *__pyx_tuple_; +static PyObject *__pyx_codeobj__2; +/* Late includes */ + +/* "aiohttp/_websocket.pyx":9 + * from libc.stdint cimport uint32_t, uint64_t, uintmax_t + * + * def _websocket_mask_cython(object mask, object data): # <<<<<<<<<<<<<< + * """Note, this function mutates its `data` argument + * """ + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_10_websocket_1_websocket_mask_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_7aiohttp_10_websocket__websocket_mask_cython[] = "Note, this function mutates its `data` argument\n "; +static PyMethodDef __pyx_mdef_7aiohttp_10_websocket_1_websocket_mask_cython = {"_websocket_mask_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_10_websocket_1_websocket_mask_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7aiohttp_10_websocket__websocket_mask_cython}; +static PyObject *__pyx_pw_7aiohttp_10_websocket_1_websocket_mask_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_mask = 0; + PyObject *__pyx_v_data = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_websocket_mask_cython (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mask,&__pyx_n_s_data,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mask)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_data)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("_websocket_mask_cython", 1, 2, 2, 1); __PYX_ERR(0, 9, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_websocket_mask_cython") < 0)) __PYX_ERR(0, 9, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_mask = values[0]; + __pyx_v_data = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_websocket_mask_cython", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 9, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._websocket._websocket_mask_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_7aiohttp_10_websocket__websocket_mask_cython(__pyx_self, __pyx_v_mask, __pyx_v_data); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_10_websocket__websocket_mask_cython(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_mask, PyObject *__pyx_v_data) { + Py_ssize_t __pyx_v_data_len; + Py_ssize_t __pyx_v_i; + unsigned char *__pyx_v_in_buf; + unsigned char const *__pyx_v_mask_buf; + uint32_t __pyx_v_uint32_msk; + uint64_t __pyx_v_uint64_msk; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + char *__pyx_t_5; + uint64_t *__pyx_t_6; + long __pyx_t_7; + uint32_t *__pyx_t_8; + Py_ssize_t __pyx_t_9; + Py_ssize_t __pyx_t_10; + Py_ssize_t __pyx_t_11; + __Pyx_RefNannySetupContext("_websocket_mask_cython", 0); + __Pyx_INCREF(__pyx_v_mask); + __Pyx_INCREF(__pyx_v_data); + + /* "aiohttp/_websocket.pyx":20 + * uint64_t uint64_msk + * + * assert len(mask) == 4 # <<<<<<<<<<<<<< + * + * if not isinstance(mask, bytes): + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(!Py_OptimizeFlag)) { + __pyx_t_1 = PyObject_Length(__pyx_v_mask); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 20, __pyx_L1_error) + if (unlikely(!((__pyx_t_1 == 4) != 0))) { + PyErr_SetNone(PyExc_AssertionError); + __PYX_ERR(0, 20, __pyx_L1_error) + } + } + #endif + + /* "aiohttp/_websocket.pyx":22 + * assert len(mask) == 4 + * + * if not isinstance(mask, bytes): # <<<<<<<<<<<<<< + * mask = bytes(mask) + * + */ + __pyx_t_2 = PyBytes_Check(__pyx_v_mask); + __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0); + if (__pyx_t_3) { + + /* "aiohttp/_websocket.pyx":23 + * + * if not isinstance(mask, bytes): + * mask = bytes(mask) # <<<<<<<<<<<<<< + * + * if isinstance(data, bytearray): + */ + __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_v_mask); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF_SET(__pyx_v_mask, __pyx_t_4); + __pyx_t_4 = 0; + + /* "aiohttp/_websocket.pyx":22 + * assert len(mask) == 4 + * + * if not isinstance(mask, bytes): # <<<<<<<<<<<<<< + * mask = bytes(mask) + * + */ + } + + /* "aiohttp/_websocket.pyx":25 + * mask = bytes(mask) + * + * if isinstance(data, bytearray): # <<<<<<<<<<<<<< + * data = data + * else: + */ + __pyx_t_3 = PyByteArray_Check(__pyx_v_data); + __pyx_t_2 = (__pyx_t_3 != 0); + if (__pyx_t_2) { + + /* "aiohttp/_websocket.pyx":26 + * + * if isinstance(data, bytearray): + * data = data # <<<<<<<<<<<<<< + * else: + * data = bytearray(data) + */ + __pyx_t_4 = __pyx_v_data; + __Pyx_INCREF(__pyx_t_4); + __Pyx_DECREF_SET(__pyx_v_data, __pyx_t_4); + __pyx_t_4 = 0; + + /* "aiohttp/_websocket.pyx":25 + * mask = bytes(mask) + * + * if isinstance(data, bytearray): # <<<<<<<<<<<<<< + * data = data + * else: + */ + goto __pyx_L4; + } + + /* "aiohttp/_websocket.pyx":28 + * data = data + * else: + * data = bytearray(data) # <<<<<<<<<<<<<< + * + * data_len = len(data) + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), __pyx_v_data); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF_SET(__pyx_v_data, __pyx_t_4); + __pyx_t_4 = 0; + } + __pyx_L4:; + + /* "aiohttp/_websocket.pyx":30 + * data = bytearray(data) + * + * data_len = len(data) # <<<<<<<<<<<<<< + * in_buf = PyByteArray_AsString(data) + * mask_buf = PyBytes_AsString(mask) + */ + __pyx_t_1 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 30, __pyx_L1_error) + __pyx_v_data_len = __pyx_t_1; + + /* "aiohttp/_websocket.pyx":31 + * + * data_len = len(data) + * in_buf = PyByteArray_AsString(data) # <<<<<<<<<<<<<< + * mask_buf = PyBytes_AsString(mask) + * uint32_msk = (mask_buf)[0] + */ + if (!(likely(PyByteArray_CheckExact(__pyx_v_data))||((__pyx_v_data) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytearray", Py_TYPE(__pyx_v_data)->tp_name), 0))) __PYX_ERR(0, 31, __pyx_L1_error) + __pyx_t_5 = PyByteArray_AsString(((PyObject*)__pyx_v_data)); if (unlikely(__pyx_t_5 == ((char *)NULL))) __PYX_ERR(0, 31, __pyx_L1_error) + __pyx_v_in_buf = ((unsigned char *)__pyx_t_5); + + /* "aiohttp/_websocket.pyx":32 + * data_len = len(data) + * in_buf = PyByteArray_AsString(data) + * mask_buf = PyBytes_AsString(mask) # <<<<<<<<<<<<<< + * uint32_msk = (mask_buf)[0] + * + */ + __pyx_t_5 = PyBytes_AsString(__pyx_v_mask); if (unlikely(__pyx_t_5 == ((char *)NULL))) __PYX_ERR(0, 32, __pyx_L1_error) + __pyx_v_mask_buf = ((unsigned char const *)__pyx_t_5); + + /* "aiohttp/_websocket.pyx":33 + * in_buf = PyByteArray_AsString(data) + * mask_buf = PyBytes_AsString(mask) + * uint32_msk = (mask_buf)[0] # <<<<<<<<<<<<<< + * + * # TODO: align in_data ptr to achieve even faster speeds + */ + __pyx_v_uint32_msk = (((uint32_t *)__pyx_v_mask_buf)[0]); + + /* "aiohttp/_websocket.pyx":38 + * # does it need in python ?! malloc() always aligns to sizeof(long) bytes + * + * if sizeof(size_t) >= 8: # <<<<<<<<<<<<<< + * uint64_msk = uint32_msk + * uint64_msk = (uint64_msk << 32) | uint32_msk + */ + __pyx_t_2 = (((sizeof(size_t)) >= 8) != 0); + if (__pyx_t_2) { + + /* "aiohttp/_websocket.pyx":39 + * + * if sizeof(size_t) >= 8: + * uint64_msk = uint32_msk # <<<<<<<<<<<<<< + * uint64_msk = (uint64_msk << 32) | uint32_msk + * + */ + __pyx_v_uint64_msk = __pyx_v_uint32_msk; + + /* "aiohttp/_websocket.pyx":40 + * if sizeof(size_t) >= 8: + * uint64_msk = uint32_msk + * uint64_msk = (uint64_msk << 32) | uint32_msk # <<<<<<<<<<<<<< + * + * while data_len >= 8: + */ + __pyx_v_uint64_msk = ((__pyx_v_uint64_msk << 32) | __pyx_v_uint32_msk); + + /* "aiohttp/_websocket.pyx":42 + * uint64_msk = (uint64_msk << 32) | uint32_msk + * + * while data_len >= 8: # <<<<<<<<<<<<<< + * (in_buf)[0] ^= uint64_msk + * in_buf += 8 + */ + while (1) { + __pyx_t_2 = ((__pyx_v_data_len >= 8) != 0); + if (!__pyx_t_2) break; + + /* "aiohttp/_websocket.pyx":43 + * + * while data_len >= 8: + * (in_buf)[0] ^= uint64_msk # <<<<<<<<<<<<<< + * in_buf += 8 + * data_len -= 8 + */ + __pyx_t_6 = ((uint64_t *)__pyx_v_in_buf); + __pyx_t_7 = 0; + (__pyx_t_6[__pyx_t_7]) = ((__pyx_t_6[__pyx_t_7]) ^ __pyx_v_uint64_msk); + + /* "aiohttp/_websocket.pyx":44 + * while data_len >= 8: + * (in_buf)[0] ^= uint64_msk + * in_buf += 8 # <<<<<<<<<<<<<< + * data_len -= 8 + * + */ + __pyx_v_in_buf = (__pyx_v_in_buf + 8); + + /* "aiohttp/_websocket.pyx":45 + * (in_buf)[0] ^= uint64_msk + * in_buf += 8 + * data_len -= 8 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_data_len = (__pyx_v_data_len - 8); + } + + /* "aiohttp/_websocket.pyx":38 + * # does it need in python ?! malloc() always aligns to sizeof(long) bytes + * + * if sizeof(size_t) >= 8: # <<<<<<<<<<<<<< + * uint64_msk = uint32_msk + * uint64_msk = (uint64_msk << 32) | uint32_msk + */ + } + + /* "aiohttp/_websocket.pyx":48 + * + * + * while data_len >= 4: # <<<<<<<<<<<<<< + * (in_buf)[0] ^= uint32_msk + * in_buf += 4 + */ + while (1) { + __pyx_t_2 = ((__pyx_v_data_len >= 4) != 0); + if (!__pyx_t_2) break; + + /* "aiohttp/_websocket.pyx":49 + * + * while data_len >= 4: + * (in_buf)[0] ^= uint32_msk # <<<<<<<<<<<<<< + * in_buf += 4 + * data_len -= 4 + */ + __pyx_t_8 = ((uint32_t *)__pyx_v_in_buf); + __pyx_t_7 = 0; + (__pyx_t_8[__pyx_t_7]) = ((__pyx_t_8[__pyx_t_7]) ^ __pyx_v_uint32_msk); + + /* "aiohttp/_websocket.pyx":50 + * while data_len >= 4: + * (in_buf)[0] ^= uint32_msk + * in_buf += 4 # <<<<<<<<<<<<<< + * data_len -= 4 + * + */ + __pyx_v_in_buf = (__pyx_v_in_buf + 4); + + /* "aiohttp/_websocket.pyx":51 + * (in_buf)[0] ^= uint32_msk + * in_buf += 4 + * data_len -= 4 # <<<<<<<<<<<<<< + * + * for i in range(0, data_len): + */ + __pyx_v_data_len = (__pyx_v_data_len - 4); + } + + /* "aiohttp/_websocket.pyx":53 + * data_len -= 4 + * + * for i in range(0, data_len): # <<<<<<<<<<<<<< + * in_buf[i] ^= mask_buf[i] + */ + __pyx_t_1 = __pyx_v_data_len; + __pyx_t_9 = __pyx_t_1; + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) { + __pyx_v_i = __pyx_t_10; + + /* "aiohttp/_websocket.pyx":54 + * + * for i in range(0, data_len): + * in_buf[i] ^= mask_buf[i] # <<<<<<<<<<<<<< + */ + __pyx_t_11 = __pyx_v_i; + (__pyx_v_in_buf[__pyx_t_11]) = ((__pyx_v_in_buf[__pyx_t_11]) ^ (__pyx_v_mask_buf[__pyx_v_i])); + } + + /* "aiohttp/_websocket.pyx":9 + * from libc.stdint cimport uint32_t, uint64_t, uintmax_t + * + * def _websocket_mask_cython(object mask, object data): # <<<<<<<<<<<<<< + * """Note, this function mutates its `data` argument + * """ + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("aiohttp._websocket._websocket_mask_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_mask); + __Pyx_XDECREF(__pyx_v_data); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec__websocket(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec__websocket}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "_websocket", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_n_s_aiohttp__websocket, __pyx_k_aiohttp__websocket, sizeof(__pyx_k_aiohttp__websocket), 0, 0, 1, 1}, + {&__pyx_kp_s_aiohttp__websocket_pyx, __pyx_k_aiohttp__websocket_pyx, sizeof(__pyx_k_aiohttp__websocket_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1}, + {&__pyx_n_s_data_len, __pyx_k_data_len, sizeof(__pyx_k_data_len), 0, 0, 1, 1}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_in_buf, __pyx_k_in_buf, sizeof(__pyx_k_in_buf), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_mask, __pyx_k_mask, sizeof(__pyx_k_mask), 0, 0, 1, 1}, + {&__pyx_n_s_mask_buf, __pyx_k_mask_buf, sizeof(__pyx_k_mask_buf), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_uint32_msk, __pyx_k_uint32_msk, sizeof(__pyx_k_uint32_msk), 0, 0, 1, 1}, + {&__pyx_n_s_uint64_msk, __pyx_k_uint64_msk, sizeof(__pyx_k_uint64_msk), 0, 0, 1, 1}, + {&__pyx_n_s_websocket_mask_cython, __pyx_k_websocket_mask_cython, sizeof(__pyx_k_websocket_mask_cython), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 53, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "aiohttp/_websocket.pyx":9 + * from libc.stdint cimport uint32_t, uint64_t, uintmax_t + * + * def _websocket_mask_cython(object mask, object data): # <<<<<<<<<<<<<< + * """Note, this function mutates its `data` argument + * """ + */ + __pyx_tuple_ = PyTuple_Pack(8, __pyx_n_s_mask, __pyx_n_s_data, __pyx_n_s_data_len, __pyx_n_s_i, __pyx_n_s_in_buf, __pyx_n_s_mask_buf, __pyx_n_s_uint32_msk, __pyx_n_s_uint64_msk); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple_, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_aiohttp__websocket_pyx, __pyx_n_s_websocket_mask_cython, 9, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", + #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 + sizeof(PyTypeObject), + #else + sizeof(PyHeapTypeObject), + #endif + __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_4bool_bool = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "bool", sizeof(PyBoolObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_7cpython_4bool_bool) __PYX_ERR(2, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_7complex_complex = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "complex", sizeof(PyComplexObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_7cpython_7complex_complex) __PYX_ERR(3, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION < 3 +#ifdef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC void +#else +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#endif +#else +#ifdef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC init_websocket(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC init_websocket(void) +#else +__Pyx_PyMODINIT_FUNC PyInit__websocket(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit__websocket(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { + result = PyDict_SetItemString(moddict, to_name, value); + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec__websocket(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module '_websocket' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit__websocket(void)", 0); + if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("_websocket", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_b); + __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_cython_runtime); + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_aiohttp___websocket) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "aiohttp._websocket")) { + if (unlikely(PyDict_SetItemString(modules, "aiohttp._websocket", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) goto __pyx_L1_error; + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) goto __pyx_L1_error; + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + (void)__Pyx_modinit_type_init_code(); + if (unlikely(__Pyx_modinit_type_import_code() != 0)) goto __pyx_L1_error; + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "aiohttp/_websocket.pyx":9 + * from libc.stdint cimport uint32_t, uint64_t, uintmax_t + * + * def _websocket_mask_cython(object mask, object data): # <<<<<<<<<<<<<< + * """Note, this function mutates its `data` argument + * """ + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7aiohttp_10_websocket_1_websocket_mask_cython, NULL, __pyx_n_s_aiohttp__websocket); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_websocket_mask_cython, __pyx_t_1) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_websocket.pyx":1 + * from cpython cimport PyBytes_AsString # <<<<<<<<<<<<<< + * + * #from cpython cimport PyByteArray_AsString # cython still not exports that + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init aiohttp._websocket", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init aiohttp._websocket"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +/* PyCFunctionFastCall */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { + PyCFunctionObject *func = (PyCFunctionObject*)func_obj; + PyCFunction meth = PyCFunction_GET_FUNCTION(func); + PyObject *self = PyCFunction_GET_SELF(func); + int flags = PyCFunction_GET_FLAGS(func); + assert(PyCFunction_Check(func)); + assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + /* _PyCFunction_FastCallDict() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller loses its exception */ + assert(!PyErr_Occurred()); + if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { + return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + } else { + return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + } +} +#endif + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallOneArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, &arg, 1); + } +#endif + if (likely(PyCFunction_Check(func))) { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); +#if CYTHON_FAST_PYCCALL + } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { + return __Pyx_PyCFunction_FastCall(func, &arg, 1); +#endif + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +/* TypeImport */ +#ifndef __PYX_HAVE_RT_ImportType +#define __PYX_HAVE_RT_ImportType +static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, + size_t size, enum __Pyx_ImportType_CheckSize check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; +#ifdef Py_LIMITED_API + PyObject *py_basicsize; +#endif + result = PyObject_GetAttrString(module, class_name); + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%.200s.%.200s is not a type object", + module_name, class_name); + goto bad; + } +#ifndef Py_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; +#else + py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); + if (!py_basicsize) + goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; +#endif + if ((size_t)basicsize < size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + goto bad; + } + if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + goto bad; + } + else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(result); + return NULL; +} +#endif + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} +#endif + +/* CLineInTraceback */ +#ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} + +/* AddTraceback */ +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +/* CIntFromPyVerify */ +#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntFromPy */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntFromPy */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + case -2: + if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; ip) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type %.200s). " + "The ability to return an instance of a strict subclass of int " + "is deprecated, and may be removed in a future version of Python.", + Py_TYPE(result)->tp_name)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_websocket.cpython-36m-x86_64-linux-gnu.so b/venv-linux/lib/python3.6/site-packages/aiohttp/_websocket.cpython-36m-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..e441d1b79262f888a96c33026490803f4906a22b GIT binary patch literal 102842 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_websocket.pyx b/venv-linux/lib/python3.6/site-packages/aiohttp/_websocket.pyx new file mode 100644 index 0000000..e4d992a --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_websocket.pyx @@ -0,0 +1,54 @@ +from cpython cimport PyBytes_AsString + +#from cpython cimport PyByteArray_AsString # cython still not exports that +cdef extern from "Python.h": + char* PyByteArray_AsString(bytearray ba) except NULL + +from libc.stdint cimport uint32_t, uint64_t, uintmax_t + +def _websocket_mask_cython(object mask, object data): + """Note, this function mutates its `data` argument + """ + cdef: + Py_ssize_t data_len, i + # bit operations on signed integers are implementation-specific + unsigned char * in_buf + const unsigned char * mask_buf + uint32_t uint32_msk + uint64_t uint64_msk + + assert len(mask) == 4 + + if not isinstance(mask, bytes): + mask = bytes(mask) + + if isinstance(data, bytearray): + data = data + else: + data = bytearray(data) + + data_len = len(data) + in_buf = PyByteArray_AsString(data) + mask_buf = PyBytes_AsString(mask) + uint32_msk = (mask_buf)[0] + + # TODO: align in_data ptr to achieve even faster speeds + # does it need in python ?! malloc() always aligns to sizeof(long) bytes + + if sizeof(size_t) >= 8: + uint64_msk = uint32_msk + uint64_msk = (uint64_msk << 32) | uint32_msk + + while data_len >= 8: + (in_buf)[0] ^= uint64_msk + in_buf += 8 + data_len -= 8 + + + while data_len >= 4: + (in_buf)[0] ^= uint32_msk + in_buf += 4 + data_len -= 4 + + for i in range(0, data_len): + in_buf[i] ^= mask_buf[i] diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/abc.py b/venv-linux/lib/python3.6/site-packages/aiohttp/abc.py new file mode 100644 index 0000000..58817c0 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/abc.py @@ -0,0 +1,208 @@ +import asyncio +import logging +from abc import ABC, abstractmethod +from collections.abc import Sized +from http.cookies import BaseCookie, Morsel # noqa +from typing import ( + TYPE_CHECKING, + Any, + Awaitable, + Callable, + Dict, + Generator, + Iterable, + List, + Optional, + Tuple, +) + +from multidict import CIMultiDict # noqa +from yarl import URL + +from .helpers import get_running_loop +from .typedefs import LooseCookies + +if TYPE_CHECKING: # pragma: no cover + from .web_request import BaseRequest, Request + from .web_response import StreamResponse + from .web_app import Application + from .web_exceptions import HTTPException +else: + BaseRequest = Request = Application = StreamResponse = None + HTTPException = None + + +class AbstractRouter(ABC): + + def __init__(self) -> None: + self._frozen = False + + def post_init(self, app: Application) -> None: + """Post init stage. + + Not an abstract method for sake of backward compatibility, + but if the router wants to be aware of the application + it can override this. + """ + + @property + def frozen(self) -> bool: + return self._frozen + + def freeze(self) -> None: + """Freeze router.""" + self._frozen = True + + @abstractmethod + async def resolve(self, request: Request) -> 'AbstractMatchInfo': + """Return MATCH_INFO for given request""" + + +class AbstractMatchInfo(ABC): + + @property # pragma: no branch + @abstractmethod + def handler(self) -> Callable[[Request], Awaitable[StreamResponse]]: + """Execute matched request handler""" + + @property + @abstractmethod + def expect_handler(self) -> Callable[[Request], Awaitable[None]]: + """Expect handler for 100-continue processing""" + + @property # pragma: no branch + @abstractmethod + def http_exception(self) -> Optional[HTTPException]: + """HTTPException instance raised on router's resolving, or None""" + + @abstractmethod # pragma: no branch + def get_info(self) -> Dict[str, Any]: + """Return a dict with additional info useful for introspection""" + + @property # pragma: no branch + @abstractmethod + def apps(self) -> Tuple[Application, ...]: + """Stack of nested applications. + + Top level application is left-most element. + + """ + + @abstractmethod + def add_app(self, app: Application) -> None: + """Add application to the nested apps stack.""" + + @abstractmethod + def freeze(self) -> None: + """Freeze the match info. + + The method is called after route resolution. + + After the call .add_app() is forbidden. + + """ + + +class AbstractView(ABC): + """Abstract class based view.""" + + def __init__(self, request: Request) -> None: + self._request = request + + @property + def request(self) -> Request: + """Request instance.""" + return self._request + + @abstractmethod + def __await__(self) -> Generator[Any, None, StreamResponse]: + """Execute the view handler.""" + + +class AbstractResolver(ABC): + """Abstract DNS resolver.""" + + @abstractmethod + async def resolve(self, host: str, + port: int, family: int) -> List[Dict[str, Any]]: + """Return IP address for given hostname""" + + @abstractmethod + async def close(self) -> None: + """Release resolver""" + + +if TYPE_CHECKING: # pragma: no cover + IterableBase = Iterable[Morsel[str]] +else: + IterableBase = Iterable + + +class AbstractCookieJar(Sized, IterableBase): + """Abstract Cookie Jar.""" + + def __init__(self, *, + loop: Optional[asyncio.AbstractEventLoop]=None) -> None: + self._loop = get_running_loop(loop) + + @abstractmethod + def clear(self) -> None: + """Clear all cookies.""" + + @abstractmethod + def update_cookies(self, + cookies: LooseCookies, + response_url: URL=URL()) -> None: + """Update cookies.""" + + @abstractmethod + def filter_cookies(self, request_url: URL) -> 'BaseCookie[str]': + """Return the jar's cookies filtered by their attributes.""" + + +class AbstractStreamWriter(ABC): + """Abstract stream writer.""" + + buffer_size = 0 + output_size = 0 + length = 0 # type: Optional[int] + + @abstractmethod + async def write(self, chunk: bytes) -> None: + """Write chunk into stream.""" + + @abstractmethod + async def write_eof(self, chunk: bytes=b'') -> None: + """Write last chunk.""" + + @abstractmethod + async def drain(self) -> None: + """Flush the write buffer.""" + + @abstractmethod + def enable_compression(self, encoding: str='deflate') -> None: + """Enable HTTP body compression""" + + @abstractmethod + def enable_chunking(self) -> None: + """Enable HTTP chunked mode""" + + @abstractmethod + async def write_headers(self, status_line: str, + headers: 'CIMultiDict[str]') -> None: + """Write HTTP headers""" + + +class AbstractAccessLogger(ABC): + """Abstract writer to access log.""" + + def __init__(self, logger: logging.Logger, log_format: str) -> None: + self.logger = logger + self.log_format = log_format + + @abstractmethod + def log(self, + request: BaseRequest, + response: StreamResponse, + time: float) -> None: + """Emit log to logger.""" diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/base_protocol.py b/venv-linux/lib/python3.6/site-packages/aiohttp/base_protocol.py new file mode 100644 index 0000000..331241d --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/base_protocol.py @@ -0,0 +1,81 @@ +import asyncio +from typing import Optional, cast + +from .tcp_helpers import tcp_nodelay + + +class BaseProtocol(asyncio.Protocol): + __slots__ = ('_loop', '_paused', '_drain_waiter', + '_connection_lost', '_reading_paused', 'transport') + + def __init__(self, loop: asyncio.AbstractEventLoop) -> None: + self._loop = loop # type: asyncio.AbstractEventLoop + self._paused = False + self._drain_waiter = None # type: Optional[asyncio.Future[None]] + self._connection_lost = False + self._reading_paused = False + + self.transport = None # type: Optional[asyncio.Transport] + + def pause_writing(self) -> None: + assert not self._paused + self._paused = True + + def resume_writing(self) -> None: + assert self._paused + self._paused = False + + waiter = self._drain_waiter + if waiter is not None: + self._drain_waiter = None + if not waiter.done(): + waiter.set_result(None) + + def pause_reading(self) -> None: + if not self._reading_paused and self.transport is not None: + try: + self.transport.pause_reading() + except (AttributeError, NotImplementedError, RuntimeError): + pass + self._reading_paused = True + + def resume_reading(self) -> None: + if self._reading_paused and self.transport is not None: + try: + self.transport.resume_reading() + except (AttributeError, NotImplementedError, RuntimeError): + pass + self._reading_paused = False + + def connection_made(self, transport: asyncio.BaseTransport) -> None: + tr = cast(asyncio.Transport, transport) + tcp_nodelay(tr, True) + self.transport = tr + + def connection_lost(self, exc: Optional[BaseException]) -> None: + self._connection_lost = True + # Wake up the writer if currently paused. + self.transport = None + if not self._paused: + return + waiter = self._drain_waiter + if waiter is None: + return + self._drain_waiter = None + if waiter.done(): + return + if exc is None: + waiter.set_result(None) + else: + waiter.set_exception(exc) + + async def _drain_helper(self) -> None: + if self._connection_lost: + raise ConnectionResetError('Connection lost') + if not self._paused: + return + waiter = self._drain_waiter + assert waiter is None or waiter.cancelled() + waiter = self._loop.create_future() + self._drain_waiter = waiter + await waiter diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/client.py b/venv-linux/lib/python3.6/site-packages/aiohttp/client.py new file mode 100644 index 0000000..6dcff5a --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/client.py @@ -0,0 +1,1151 @@ +"""HTTP Client for asyncio.""" + +import asyncio +import base64 +import hashlib +import json +import os +import sys +import traceback +import warnings +from types import SimpleNamespace, TracebackType +from typing import ( # noqa + Any, + Coroutine, + Generator, + Generic, + Iterable, + List, + Mapping, + Optional, + Set, + Tuple, + Type, + TypeVar, + Union, +) + +import attr +from multidict import CIMultiDict, MultiDict, MultiDictProxy, istr +from yarl import URL + +from . import hdrs, http, payload +from .abc import AbstractCookieJar +from .client_exceptions import ClientConnectionError as ClientConnectionError +from .client_exceptions import ( + ClientConnectorCertificateError as ClientConnectorCertificateError, +) +from .client_exceptions import ClientConnectorError as ClientConnectorError +from .client_exceptions import ( + ClientConnectorSSLError as ClientConnectorSSLError, +) +from .client_exceptions import ClientError as ClientError +from .client_exceptions import ClientHttpProxyError as ClientHttpProxyError +from .client_exceptions import ClientOSError as ClientOSError +from .client_exceptions import ClientPayloadError as ClientPayloadError +from .client_exceptions import ( + ClientProxyConnectionError as ClientProxyConnectionError, +) +from .client_exceptions import ClientResponseError as ClientResponseError +from .client_exceptions import ClientSSLError as ClientSSLError +from .client_exceptions import ContentTypeError as ContentTypeError +from .client_exceptions import InvalidURL as InvalidURL +from .client_exceptions import ServerConnectionError as ServerConnectionError +from .client_exceptions import ( + ServerDisconnectedError as ServerDisconnectedError, +) +from .client_exceptions import ( + ServerFingerprintMismatch as ServerFingerprintMismatch, +) +from .client_exceptions import ServerTimeoutError as ServerTimeoutError +from .client_exceptions import TooManyRedirects as TooManyRedirects +from .client_exceptions import WSServerHandshakeError as WSServerHandshakeError +from .client_reqrep import ClientRequest as ClientRequest +from .client_reqrep import ClientResponse as ClientResponse +from .client_reqrep import Fingerprint as Fingerprint +from .client_reqrep import RequestInfo as RequestInfo +from .client_reqrep import _merge_ssl_params +from .client_ws import ClientWebSocketResponse as ClientWebSocketResponse +from .connector import BaseConnector as BaseConnector +from .connector import NamedPipeConnector as NamedPipeConnector +from .connector import TCPConnector as TCPConnector +from .connector import UnixConnector as UnixConnector +from .cookiejar import CookieJar +from .helpers import ( + DEBUG, + PY_36, + BasicAuth, + CeilTimeout, + TimeoutHandle, + get_running_loop, + proxies_from_env, + sentinel, + strip_auth_from_url, +) +from .http import WS_KEY, HttpVersion, WebSocketReader, WebSocketWriter +from .http_websocket import ( # noqa + WSHandshakeError, + WSMessage, + ws_ext_gen, + ws_ext_parse, +) +from .streams import FlowControlDataQueue +from .tracing import Trace, TraceConfig +from .typedefs import JSONEncoder, LooseCookies, LooseHeaders, StrOrURL + +__all__ = ( + # client_exceptions + 'ClientConnectionError', + 'ClientConnectorCertificateError', + 'ClientConnectorError', + 'ClientConnectorSSLError', + 'ClientError', + 'ClientHttpProxyError', + 'ClientOSError', + 'ClientPayloadError', + 'ClientProxyConnectionError', + 'ClientResponseError', + 'ClientSSLError', + 'ContentTypeError', + 'InvalidURL', + 'ServerConnectionError', + 'ServerDisconnectedError', + 'ServerFingerprintMismatch', + 'ServerTimeoutError', + 'TooManyRedirects', + 'WSServerHandshakeError', + # client_reqrep + 'ClientRequest', + 'ClientResponse', + 'Fingerprint', + 'RequestInfo', + # connector + 'BaseConnector', + 'TCPConnector', + 'UnixConnector', + 'NamedPipeConnector', + # client_ws + 'ClientWebSocketResponse', + # client + 'ClientSession', + 'ClientTimeout', + 'request') + + +try: + from ssl import SSLContext +except ImportError: # pragma: no cover + SSLContext = object # type: ignore + + +@attr.s(frozen=True, slots=True) +class ClientTimeout: + total = attr.ib(type=Optional[float], default=None) + connect = attr.ib(type=Optional[float], default=None) + sock_read = attr.ib(type=Optional[float], default=None) + sock_connect = attr.ib(type=Optional[float], default=None) + + # pool_queue_timeout = attr.ib(type=float, default=None) + # dns_resolution_timeout = attr.ib(type=float, default=None) + # socket_connect_timeout = attr.ib(type=float, default=None) + # connection_acquiring_timeout = attr.ib(type=float, default=None) + # new_connection_timeout = attr.ib(type=float, default=None) + # http_header_timeout = attr.ib(type=float, default=None) + # response_body_timeout = attr.ib(type=float, default=None) + + # to create a timeout specific for a single request, either + # - create a completely new one to overwrite the default + # - or use http://www.attrs.org/en/stable/api.html#attr.evolve + # to overwrite the defaults + + +# 5 Minute default read timeout +DEFAULT_TIMEOUT = ClientTimeout(total=5*60) + +_RetType = TypeVar('_RetType') + + +class ClientSession: + """First-class interface for making HTTP requests.""" + + ATTRS = frozenset([ + '_source_traceback', '_connector', + 'requote_redirect_url', '_loop', '_cookie_jar', + '_connector_owner', '_default_auth', + '_version', '_json_serialize', + '_requote_redirect_url', + '_timeout', '_raise_for_status', '_auto_decompress', + '_trust_env', '_default_headers', '_skip_auto_headers', + '_request_class', '_response_class', + '_ws_response_class', '_trace_configs']) + + _source_traceback = None + + def __init__(self, *, connector: Optional[BaseConnector]=None, + loop: Optional[asyncio.AbstractEventLoop]=None, + cookies: Optional[LooseCookies]=None, + headers: Optional[LooseHeaders]=None, + skip_auto_headers: Optional[Iterable[str]]=None, + auth: Optional[BasicAuth]=None, + json_serialize: JSONEncoder=json.dumps, + request_class: Type[ClientRequest]=ClientRequest, + response_class: Type[ClientResponse]=ClientResponse, + ws_response_class: Type[ClientWebSocketResponse]=ClientWebSocketResponse, # noqa + version: HttpVersion=http.HttpVersion11, + cookie_jar: Optional[AbstractCookieJar]=None, + connector_owner: bool=True, + raise_for_status: bool=False, + read_timeout: Union[float, object]=sentinel, + conn_timeout: Optional[float]=None, + timeout: Union[object, ClientTimeout]=sentinel, + auto_decompress: bool=True, + trust_env: bool=False, + requote_redirect_url: bool=True, + trace_configs: Optional[List[TraceConfig]]=None) -> None: + + if loop is None: + if connector is not None: + loop = connector._loop + + loop = get_running_loop(loop) + + if connector is None: + connector = TCPConnector(loop=loop) + + if connector._loop is not loop: + raise RuntimeError( + "Session and connector has to use same event loop") + + self._loop = loop + + if loop.get_debug(): + self._source_traceback = traceback.extract_stack(sys._getframe(1)) + + if cookie_jar is None: + cookie_jar = CookieJar(loop=loop) + self._cookie_jar = cookie_jar + + if cookies is not None: + self._cookie_jar.update_cookies(cookies) + + self._connector = connector # type: Optional[BaseConnector] + self._connector_owner = connector_owner + self._default_auth = auth + self._version = version + self._json_serialize = json_serialize + if timeout is sentinel: + self._timeout = DEFAULT_TIMEOUT + if read_timeout is not sentinel: + warnings.warn("read_timeout is deprecated, " + "use timeout argument instead", + DeprecationWarning, + stacklevel=2) + self._timeout = attr.evolve(self._timeout, total=read_timeout) + if conn_timeout is not None: + self._timeout = attr.evolve(self._timeout, + connect=conn_timeout) + warnings.warn("conn_timeout is deprecated, " + "use timeout argument instead", + DeprecationWarning, + stacklevel=2) + else: + self._timeout = timeout # type: ignore + if read_timeout is not sentinel: + raise ValueError("read_timeout and timeout parameters " + "conflict, please setup " + "timeout.read") + if conn_timeout is not None: + raise ValueError("conn_timeout and timeout parameters " + "conflict, please setup " + "timeout.connect") + self._raise_for_status = raise_for_status + self._auto_decompress = auto_decompress + self._trust_env = trust_env + self._requote_redirect_url = requote_redirect_url + + # Convert to list of tuples + if headers: + real_headers = CIMultiDict(headers) # type: CIMultiDict[str] + else: + real_headers = CIMultiDict() + self._default_headers = real_headers # type: CIMultiDict[str] + if skip_auto_headers is not None: + self._skip_auto_headers = frozenset([istr(i) + for i in skip_auto_headers]) + else: + self._skip_auto_headers = frozenset() + + self._request_class = request_class + self._response_class = response_class + self._ws_response_class = ws_response_class + + self._trace_configs = trace_configs or [] + for trace_config in self._trace_configs: + trace_config.freeze() + + def __init_subclass__(cls: Type['ClientSession']) -> None: + warnings.warn("Inheritance class {} from ClientSession " + "is discouraged".format(cls.__name__), + DeprecationWarning, + stacklevel=2) + + if DEBUG: + def __setattr__(self, name: str, val: Any) -> None: + if name not in self.ATTRS: + warnings.warn("Setting custom ClientSession.{} attribute " + "is discouraged".format(name), + DeprecationWarning, + stacklevel=2) + super().__setattr__(name, val) + + def __del__(self, _warnings: Any=warnings) -> None: + if not self.closed: + if PY_36: + kwargs = {'source': self} + else: + kwargs = {} + _warnings.warn("Unclosed client session {!r}".format(self), + ResourceWarning, + **kwargs) + context = {'client_session': self, + 'message': 'Unclosed client session'} + if self._source_traceback is not None: + context['source_traceback'] = self._source_traceback + self._loop.call_exception_handler(context) + + def request(self, + method: str, + url: StrOrURL, + **kwargs: Any) -> '_RequestContextManager': + """Perform HTTP request.""" + return _RequestContextManager(self._request(method, url, **kwargs)) + + async def _request( + self, + method: str, + str_or_url: StrOrURL, *, + params: Optional[Mapping[str, str]]=None, + data: Any=None, + json: Any=None, + cookies: Optional[LooseCookies]=None, + headers: LooseHeaders=None, + skip_auto_headers: Optional[Iterable[str]]=None, + auth: Optional[BasicAuth]=None, + allow_redirects: bool=True, + max_redirects: int=10, + compress: Optional[str]=None, + chunked: Optional[bool]=None, + expect100: bool=False, + raise_for_status: Optional[bool]=None, + read_until_eof: bool=True, + proxy: Optional[StrOrURL]=None, + proxy_auth: Optional[BasicAuth]=None, + timeout: Union[ClientTimeout, object]=sentinel, + verify_ssl: Optional[bool]=None, + fingerprint: Optional[bytes]=None, + ssl_context: Optional[SSLContext]=None, + ssl: Optional[Union[SSLContext, bool, Fingerprint]]=None, + proxy_headers: Optional[LooseHeaders]=None, + trace_request_ctx: Optional[SimpleNamespace]=None + ) -> ClientResponse: + + # NOTE: timeout clamps existing connect and read timeouts. We cannot + # set the default to None because we need to detect if the user wants + # to use the existing timeouts by setting timeout to None. + + if self.closed: + raise RuntimeError('Session is closed') + + ssl = _merge_ssl_params(ssl, verify_ssl, ssl_context, fingerprint) + + if data is not None and json is not None: + raise ValueError( + 'data and json parameters can not be used at the same time') + elif json is not None: + data = payload.JsonPayload(json, dumps=self._json_serialize) + + if not isinstance(chunked, bool) and chunked is not None: + warnings.warn( + 'Chunk size is deprecated #1615', DeprecationWarning) + + redirects = 0 + history = [] + version = self._version + + # Merge with default headers and transform to CIMultiDict + headers = self._prepare_headers(headers) + proxy_headers = self._prepare_headers(proxy_headers) + + try: + url = URL(str_or_url) + except ValueError: + raise InvalidURL(str_or_url) + + skip_headers = set(self._skip_auto_headers) + if skip_auto_headers is not None: + for i in skip_auto_headers: + skip_headers.add(istr(i)) + + if proxy is not None: + try: + proxy = URL(proxy) + except ValueError: + raise InvalidURL(proxy) + + if timeout is sentinel: + real_timeout = self._timeout # type: ClientTimeout + else: + if not isinstance(timeout, ClientTimeout): + real_timeout = ClientTimeout(total=timeout) # type: ignore + else: + real_timeout = timeout + # timeout is cumulative for all request operations + # (request, redirects, responses, data consuming) + tm = TimeoutHandle(self._loop, real_timeout.total) + handle = tm.start() + + traces = [ + Trace( + self, + trace_config, + trace_config.trace_config_ctx( + trace_request_ctx=trace_request_ctx) + ) + for trace_config in self._trace_configs + ] + + for trace in traces: + await trace.send_request_start( + method, + url, + headers + ) + + timer = tm.timer() + try: + with timer: + while True: + url, auth_from_url = strip_auth_from_url(url) + if auth and auth_from_url: + raise ValueError("Cannot combine AUTH argument with " + "credentials encoded in URL") + + if auth is None: + auth = auth_from_url + if auth is None: + auth = self._default_auth + # It would be confusing if we support explicit + # Authorization header with auth argument + if (headers is not None and + auth is not None and + hdrs.AUTHORIZATION in headers): + raise ValueError("Cannot combine AUTHORIZATION header " + "with AUTH argument or credentials " + "encoded in URL") + + all_cookies = self._cookie_jar.filter_cookies(url) + + if cookies is not None: + tmp_cookie_jar = CookieJar() + tmp_cookie_jar.update_cookies(cookies) + req_cookies = tmp_cookie_jar.filter_cookies(url) + if req_cookies: + all_cookies.load(req_cookies) + + if proxy is not None: + proxy = URL(proxy) + elif self._trust_env: + for scheme, proxy_info in proxies_from_env().items(): + if scheme == url.scheme: + proxy = proxy_info.proxy + proxy_auth = proxy_info.proxy_auth + break + + req = self._request_class( + method, url, params=params, headers=headers, + skip_auto_headers=skip_headers, data=data, + cookies=all_cookies, auth=auth, version=version, + compress=compress, chunked=chunked, + expect100=expect100, loop=self._loop, + response_class=self._response_class, + proxy=proxy, proxy_auth=proxy_auth, timer=timer, + session=self, + ssl=ssl, proxy_headers=proxy_headers, traces=traces) + + # connection timeout + try: + with CeilTimeout(real_timeout.connect, + loop=self._loop): + assert self._connector is not None + conn = await self._connector.connect( + req, + traces=traces, + timeout=real_timeout + ) + except asyncio.TimeoutError as exc: + raise ServerTimeoutError( + 'Connection timeout ' + 'to host {0}'.format(url)) from exc + + assert conn.transport is not None + + assert conn.protocol is not None + conn.protocol.set_response_params( + timer=timer, + skip_payload=method.upper() == 'HEAD', + read_until_eof=read_until_eof, + auto_decompress=self._auto_decompress, + read_timeout=real_timeout.sock_read) + + try: + try: + resp = await req.send(conn) + try: + await resp.start(conn) + except BaseException: + resp.close() + raise + except BaseException: + conn.close() + raise + except ClientError: + raise + except OSError as exc: + raise ClientOSError(*exc.args) from exc + + self._cookie_jar.update_cookies(resp.cookies, resp.url) + + # redirects + if resp.status in ( + 301, 302, 303, 307, 308) and allow_redirects: + + for trace in traces: + await trace.send_request_redirect( + method, + url, + headers, + resp + ) + + redirects += 1 + history.append(resp) + if max_redirects and redirects >= max_redirects: + resp.close() + raise TooManyRedirects( + history[0].request_info, tuple(history)) + + # For 301 and 302, mimic IE, now changed in RFC + # https://github.com/kennethreitz/requests/pull/269 + if (resp.status == 303 and + resp.method != hdrs.METH_HEAD) \ + or (resp.status in (301, 302) and + resp.method == hdrs.METH_POST): + method = hdrs.METH_GET + data = None + if headers.get(hdrs.CONTENT_LENGTH): + headers.pop(hdrs.CONTENT_LENGTH) + + r_url = (resp.headers.get(hdrs.LOCATION) or + resp.headers.get(hdrs.URI)) + if r_url is None: + # see github.com/aio-libs/aiohttp/issues/2022 + break + else: + # reading from correct redirection + # response is forbidden + resp.release() + + try: + r_url = URL( + r_url, encoded=not self._requote_redirect_url) + + except ValueError: + raise InvalidURL(r_url) + + scheme = r_url.scheme + if scheme not in ('http', 'https', ''): + resp.close() + raise ValueError( + 'Can redirect only to http or https') + elif not scheme: + r_url = url.join(r_url) + + if url.origin() != r_url.origin(): + auth = None + headers.pop(hdrs.AUTHORIZATION, None) + + url = r_url + params = None + resp.release() + continue + + break + + # check response status + if raise_for_status is None: + raise_for_status = self._raise_for_status + if raise_for_status: + resp.raise_for_status() + + # register connection + if handle is not None: + if resp.connection is not None: + resp.connection.add_callback(handle.cancel) + else: + handle.cancel() + + resp._history = tuple(history) + + for trace in traces: + await trace.send_request_end( + method, + url, + headers, + resp + ) + return resp + + except BaseException as e: + # cleanup timer + tm.close() + if handle: + handle.cancel() + handle = None + + for trace in traces: + await trace.send_request_exception( + method, + url, + headers, + e + ) + raise + + def ws_connect( + self, + url: StrOrURL, *, + method: str=hdrs.METH_GET, + protocols: Iterable[str]=(), + timeout: float=10.0, + receive_timeout: Optional[float]=None, + autoclose: bool=True, + autoping: bool=True, + heartbeat: Optional[float]=None, + auth: Optional[BasicAuth]=None, + origin: Optional[str]=None, + headers: Optional[LooseHeaders]=None, + proxy: Optional[StrOrURL]=None, + proxy_auth: Optional[BasicAuth]=None, + ssl: Union[SSLContext, bool, None, Fingerprint]=None, + verify_ssl: Optional[bool]=None, + fingerprint: Optional[bytes]=None, + ssl_context: Optional[SSLContext]=None, + proxy_headers: Optional[LooseHeaders]=None, + compress: int=0, + max_msg_size: int=4*1024*1024) -> '_WSRequestContextManager': + """Initiate websocket connection.""" + return _WSRequestContextManager( + self._ws_connect(url, + method=method, + protocols=protocols, + timeout=timeout, + receive_timeout=receive_timeout, + autoclose=autoclose, + autoping=autoping, + heartbeat=heartbeat, + auth=auth, + origin=origin, + headers=headers, + proxy=proxy, + proxy_auth=proxy_auth, + ssl=ssl, + verify_ssl=verify_ssl, + fingerprint=fingerprint, + ssl_context=ssl_context, + proxy_headers=proxy_headers, + compress=compress, + max_msg_size=max_msg_size)) + + async def _ws_connect( + self, + url: StrOrURL, *, + method: str=hdrs.METH_GET, + protocols: Iterable[str]=(), + timeout: float=10.0, + receive_timeout: Optional[float]=None, + autoclose: bool=True, + autoping: bool=True, + heartbeat: Optional[float]=None, + auth: Optional[BasicAuth]=None, + origin: Optional[str]=None, + headers: Optional[LooseHeaders]=None, + proxy: Optional[StrOrURL]=None, + proxy_auth: Optional[BasicAuth]=None, + ssl: Union[SSLContext, bool, None, Fingerprint]=None, + verify_ssl: Optional[bool]=None, + fingerprint: Optional[bytes]=None, + ssl_context: Optional[SSLContext]=None, + proxy_headers: Optional[LooseHeaders]=None, + compress: int=0, + max_msg_size: int=4*1024*1024 + ) -> ClientWebSocketResponse: + + if headers is None: + real_headers = CIMultiDict() # type: CIMultiDict[str] + else: + real_headers = CIMultiDict(headers) + + default_headers = { + hdrs.UPGRADE: hdrs.WEBSOCKET, + hdrs.CONNECTION: hdrs.UPGRADE, + hdrs.SEC_WEBSOCKET_VERSION: '13', + } + + for key, value in default_headers.items(): + real_headers.setdefault(key, value) + + sec_key = base64.b64encode(os.urandom(16)) + real_headers[hdrs.SEC_WEBSOCKET_KEY] = sec_key.decode() + + if protocols: + real_headers[hdrs.SEC_WEBSOCKET_PROTOCOL] = ','.join(protocols) + if origin is not None: + real_headers[hdrs.ORIGIN] = origin + if compress: + extstr = ws_ext_gen(compress=compress) + real_headers[hdrs.SEC_WEBSOCKET_EXTENSIONS] = extstr + + ssl = _merge_ssl_params(ssl, verify_ssl, ssl_context, fingerprint) + + # send request + resp = await self.request(method, url, + headers=real_headers, + read_until_eof=False, + auth=auth, + proxy=proxy, + proxy_auth=proxy_auth, + ssl=ssl, + proxy_headers=proxy_headers) + + try: + # check handshake + if resp.status != 101: + raise WSServerHandshakeError( + resp.request_info, + resp.history, + message='Invalid response status', + status=resp.status, + headers=resp.headers) + + if resp.headers.get(hdrs.UPGRADE, '').lower() != 'websocket': + raise WSServerHandshakeError( + resp.request_info, + resp.history, + message='Invalid upgrade header', + status=resp.status, + headers=resp.headers) + + if resp.headers.get(hdrs.CONNECTION, '').lower() != 'upgrade': + raise WSServerHandshakeError( + resp.request_info, + resp.history, + message='Invalid connection header', + status=resp.status, + headers=resp.headers) + + # key calculation + key = resp.headers.get(hdrs.SEC_WEBSOCKET_ACCEPT, '') + match = base64.b64encode( + hashlib.sha1(sec_key + WS_KEY).digest()).decode() + if key != match: + raise WSServerHandshakeError( + resp.request_info, + resp.history, + message='Invalid challenge response', + status=resp.status, + headers=resp.headers) + + # websocket protocol + protocol = None + if protocols and hdrs.SEC_WEBSOCKET_PROTOCOL in resp.headers: + resp_protocols = [ + proto.strip() for proto in + resp.headers[hdrs.SEC_WEBSOCKET_PROTOCOL].split(',')] + + for proto in resp_protocols: + if proto in protocols: + protocol = proto + break + + # websocket compress + notakeover = False + if compress: + compress_hdrs = resp.headers.get(hdrs.SEC_WEBSOCKET_EXTENSIONS) + if compress_hdrs: + try: + compress, notakeover = ws_ext_parse(compress_hdrs) + except WSHandshakeError as exc: + raise WSServerHandshakeError( + resp.request_info, + resp.history, + message=exc.args[0], + status=resp.status, + headers=resp.headers) + else: + compress = 0 + notakeover = False + + conn = resp.connection + assert conn is not None + proto = conn.protocol + assert proto is not None + transport = conn.transport + assert transport is not None + reader = FlowControlDataQueue( + proto, limit=2 ** 16, loop=self._loop) # type: FlowControlDataQueue[WSMessage] # noqa + proto.set_parser(WebSocketReader(reader, max_msg_size), reader) + writer = WebSocketWriter( + proto, transport, use_mask=True, + compress=compress, notakeover=notakeover) + except BaseException: + resp.close() + raise + else: + return self._ws_response_class(reader, + writer, + protocol, + resp, + timeout, + autoclose, + autoping, + self._loop, + receive_timeout=receive_timeout, + heartbeat=heartbeat, + compress=compress, + client_notakeover=notakeover) + + def _prepare_headers( + self, + headers: Optional[LooseHeaders]) -> 'CIMultiDict[str]': + """ Add default headers and transform it to CIMultiDict + """ + # Convert headers to MultiDict + result = CIMultiDict(self._default_headers) + if headers: + if not isinstance(headers, (MultiDictProxy, MultiDict)): + headers = CIMultiDict(headers) + added_names = set() # type: Set[str] + for key, value in headers.items(): + if key in added_names: + result.add(key, value) + else: + result[key] = value + added_names.add(key) + return result + + def get(self, url: StrOrURL, *, allow_redirects: bool=True, + **kwargs: Any) -> '_RequestContextManager': + """Perform HTTP GET request.""" + return _RequestContextManager( + self._request(hdrs.METH_GET, url, + allow_redirects=allow_redirects, + **kwargs)) + + def options(self, url: StrOrURL, *, allow_redirects: bool=True, + **kwargs: Any) -> '_RequestContextManager': + """Perform HTTP OPTIONS request.""" + return _RequestContextManager( + self._request(hdrs.METH_OPTIONS, url, + allow_redirects=allow_redirects, + **kwargs)) + + def head(self, url: StrOrURL, *, allow_redirects: bool=False, + **kwargs: Any) -> '_RequestContextManager': + """Perform HTTP HEAD request.""" + return _RequestContextManager( + self._request(hdrs.METH_HEAD, url, + allow_redirects=allow_redirects, + **kwargs)) + + def post(self, url: StrOrURL, + *, data: Any=None, **kwargs: Any) -> '_RequestContextManager': + """Perform HTTP POST request.""" + return _RequestContextManager( + self._request(hdrs.METH_POST, url, + data=data, + **kwargs)) + + def put(self, url: StrOrURL, + *, data: Any=None, **kwargs: Any) -> '_RequestContextManager': + """Perform HTTP PUT request.""" + return _RequestContextManager( + self._request(hdrs.METH_PUT, url, + data=data, + **kwargs)) + + def patch(self, url: StrOrURL, + *, data: Any=None, **kwargs: Any) -> '_RequestContextManager': + """Perform HTTP PATCH request.""" + return _RequestContextManager( + self._request(hdrs.METH_PATCH, url, + data=data, + **kwargs)) + + def delete(self, url: StrOrURL, **kwargs: Any) -> '_RequestContextManager': + """Perform HTTP DELETE request.""" + return _RequestContextManager( + self._request(hdrs.METH_DELETE, url, + **kwargs)) + + async def close(self) -> None: + """Close underlying connector. + + Release all acquired resources. + """ + if not self.closed: + if self._connector is not None and self._connector_owner: + await self._connector.close() + self._connector = None + + @property + def closed(self) -> bool: + """Is client session closed. + + A readonly property. + """ + return self._connector is None or self._connector.closed + + @property + def connector(self) -> Optional[BaseConnector]: + """Connector instance used for the session.""" + return self._connector + + @property + def cookie_jar(self) -> AbstractCookieJar: + """The session cookies.""" + return self._cookie_jar + + @property + def version(self) -> Tuple[int, int]: + """The session HTTP protocol version.""" + return self._version + + @property + def requote_redirect_url(self) -> bool: + """Do URL requoting on redirection handling.""" + return self._requote_redirect_url + + @requote_redirect_url.setter + def requote_redirect_url(self, val: bool) -> None: + """Do URL requoting on redirection handling.""" + warnings.warn("session.requote_redirect_url modification " + "is deprecated #2778", + DeprecationWarning, + stacklevel=2) + self._requote_redirect_url = val + + @property + def loop(self) -> asyncio.AbstractEventLoop: + """Session's loop.""" + warnings.warn("client.loop property is deprecated", + DeprecationWarning, + stacklevel=2) + return self._loop + + def detach(self) -> None: + """Detach connector from session without closing the former. + + Session is switched to closed state anyway. + """ + self._connector = None + + def __enter__(self) -> None: + raise TypeError("Use async with instead") + + def __exit__(self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> None: + # __exit__ should exist in pair with __enter__ but never executed + pass # pragma: no cover + + async def __aenter__(self) -> 'ClientSession': + return self + + async def __aexit__(self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> None: + await self.close() + + +class _BaseRequestContextManager(Coroutine[Any, + Any, + _RetType], + Generic[_RetType]): + + __slots__ = ('_coro', '_resp') + + def __init__( + self, + coro: Coroutine['asyncio.Future[Any]', None, _RetType] + ) -> None: + self._coro = coro + + def send(self, arg: None) -> 'asyncio.Future[Any]': + return self._coro.send(arg) + + def throw(self, arg: BaseException) -> None: # type: ignore + self._coro.throw(arg) # type: ignore + + def close(self) -> None: + return self._coro.close() + + def __await__(self) -> Generator[Any, None, _RetType]: + ret = self._coro.__await__() + return ret + + def __iter__(self) -> Generator[Any, None, _RetType]: + return self.__await__() + + async def __aenter__(self) -> _RetType: + self._resp = await self._coro + return self._resp + + +class _RequestContextManager(_BaseRequestContextManager[ClientResponse]): + async def __aexit__(self, + exc_type: Optional[Type[BaseException]], + exc: Optional[BaseException], + tb: Optional[TracebackType]) -> None: + # We're basing behavior on the exception as it can be caused by + # user code unrelated to the status of the connection. If you + # would like to close a connection you must do that + # explicitly. Otherwise connection error handling should kick in + # and close/recycle the connection as required. + self._resp.release() + + +class _WSRequestContextManager(_BaseRequestContextManager[ + ClientWebSocketResponse]): + async def __aexit__(self, + exc_type: Optional[Type[BaseException]], + exc: Optional[BaseException], + tb: Optional[TracebackType]) -> None: + await self._resp.close() + + +class _SessionRequestContextManager: + + __slots__ = ('_coro', '_resp', '_session') + + def __init__(self, + coro: Coroutine['asyncio.Future[Any]', None, ClientResponse], + session: ClientSession) -> None: + self._coro = coro + self._resp = None # type: Optional[ClientResponse] + self._session = session + + async def __aenter__(self) -> ClientResponse: + try: + self._resp = await self._coro + except BaseException: + await self._session.close() + raise + else: + return self._resp + + async def __aexit__(self, + exc_type: Optional[Type[BaseException]], + exc: Optional[BaseException], + tb: Optional[TracebackType]) -> None: + assert self._resp is not None + self._resp.close() + await self._session.close() + + +def request( + method: str, + url: StrOrURL, *, + params: Optional[Mapping[str, str]]=None, + data: Any=None, + json: Any=None, + headers: LooseHeaders=None, + skip_auto_headers: Optional[Iterable[str]]=None, + auth: Optional[BasicAuth]=None, + allow_redirects: bool=True, + max_redirects: int=10, + compress: Optional[str]=None, + chunked: Optional[bool]=None, + expect100: bool=False, + raise_for_status: Optional[bool]=None, + read_until_eof: bool=True, + proxy: Optional[StrOrURL]=None, + proxy_auth: Optional[BasicAuth]=None, + timeout: Union[ClientTimeout, object]=sentinel, + cookies: Optional[LooseCookies]=None, + version: HttpVersion=http.HttpVersion11, + connector: Optional[BaseConnector]=None, + loop: Optional[asyncio.AbstractEventLoop]=None +) -> _SessionRequestContextManager: + """Constructs and sends a request. Returns response object. + method - HTTP method + url - request url + params - (optional) Dictionary or bytes to be sent in the query + string of the new request + data - (optional) Dictionary, bytes, or file-like object to + send in the body of the request + json - (optional) Any json compatible python object + headers - (optional) Dictionary of HTTP Headers to send with + the request + cookies - (optional) Dict object to send with the request + auth - (optional) BasicAuth named tuple represent HTTP Basic Auth + auth - aiohttp.helpers.BasicAuth + allow_redirects - (optional) If set to False, do not follow + redirects + version - Request HTTP version. + compress - Set to True if request has to be compressed + with deflate encoding. + chunked - Set to chunk size for chunked transfer encoding. + expect100 - Expect 100-continue response from server. + connector - BaseConnector sub-class instance to support + connection pooling. + read_until_eof - Read response until eof if response + does not have Content-Length header. + loop - Optional event loop. + timeout - Optional ClientTimeout settings structure, 5min + total timeout by default. + Usage:: + >>> import aiohttp + >>> resp = await aiohttp.request('GET', 'http://python.org/') + >>> resp + + >>> data = await resp.read() + """ + connector_owner = False + if connector is None: + connector_owner = True + connector = TCPConnector(loop=loop, force_close=True) + + session = ClientSession( + loop=loop, cookies=cookies, version=version, timeout=timeout, + connector=connector, connector_owner=connector_owner) + + return _SessionRequestContextManager( + session._request(method, url, + params=params, + data=data, + json=json, + headers=headers, + skip_auto_headers=skip_auto_headers, + auth=auth, + allow_redirects=allow_redirects, + max_redirects=max_redirects, + compress=compress, + chunked=chunked, + expect100=expect100, + raise_for_status=raise_for_status, + read_until_eof=read_until_eof, + proxy=proxy, + proxy_auth=proxy_auth,), + session) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/client_exceptions.py b/venv-linux/lib/python3.6/site-packages/aiohttp/client_exceptions.py new file mode 100644 index 0000000..a524f68 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/client_exceptions.py @@ -0,0 +1,292 @@ +"""HTTP related errors.""" + +import asyncio +import warnings +from typing import TYPE_CHECKING, Any, Optional, Tuple, Union + +from .typedefs import _CIMultiDict + +try: + import ssl + SSLContext = ssl.SSLContext +except ImportError: # pragma: no cover + ssl = SSLContext = None # type: ignore + + +if TYPE_CHECKING: # pragma: no cover + from .client_reqrep import (RequestInfo, ClientResponse, ConnectionKey, # noqa + Fingerprint) +else: + RequestInfo = ClientResponse = ConnectionKey = None + + +__all__ = ( + 'ClientError', + + 'ClientConnectionError', + 'ClientOSError', 'ClientConnectorError', 'ClientProxyConnectionError', + + 'ClientSSLError', + 'ClientConnectorSSLError', 'ClientConnectorCertificateError', + + 'ServerConnectionError', 'ServerTimeoutError', 'ServerDisconnectedError', + 'ServerFingerprintMismatch', + + 'ClientResponseError', 'ClientHttpProxyError', + 'WSServerHandshakeError', 'ContentTypeError', + + 'ClientPayloadError', 'InvalidURL') + + +class ClientError(Exception): + """Base class for client connection errors.""" + + +class ClientResponseError(ClientError): + """Connection error during reading response. + + request_info: instance of RequestInfo + """ + + def __init__(self, request_info: RequestInfo, + history: Tuple[ClientResponse, ...], *, + code: Optional[int]=None, + status: Optional[int]=None, + message: str='', + headers: Optional[_CIMultiDict]=None) -> None: + self.request_info = request_info + if code is not None: + if status is not None: + raise ValueError( + "Both code and status arguments are provided; " + "code is deprecated, use status instead") + warnings.warn("code argument is deprecated, use status instead", + DeprecationWarning, + stacklevel=2) + if status is not None: + self.status = status + elif code is not None: + self.status = code + else: + self.status = 0 + self.message = message + self.headers = headers + self.history = history + self.args = (request_info, history) + + def __str__(self) -> str: + return ("%s, message=%r, url=%r" % + (self.status, self.message, self.request_info.real_url)) + + def __repr__(self) -> str: + args = "%r, %r" % (self.request_info, self.history) + if self.status != 0: + args += ", status=%r" % (self.status,) + if self.message != '': + args += ", message=%r" % (self.message,) + if self.headers is not None: + args += ", headers=%r" % (self.headers,) + return "%s(%s)" % (type(self).__name__, args) + + @property + def code(self) -> int: + warnings.warn("code property is deprecated, use status instead", + DeprecationWarning, + stacklevel=2) + return self.status + + @code.setter + def code(self, value: int) -> None: + warnings.warn("code property is deprecated, use status instead", + DeprecationWarning, + stacklevel=2) + self.status = value + + +class ContentTypeError(ClientResponseError): + """ContentType found is not valid.""" + + +class WSServerHandshakeError(ClientResponseError): + """websocket server handshake error.""" + + +class ClientHttpProxyError(ClientResponseError): + """HTTP proxy error. + + Raised in :class:`aiohttp.connector.TCPConnector` if + proxy responds with status other than ``200 OK`` + on ``CONNECT`` request. + """ + + +class TooManyRedirects(ClientResponseError): + """Client was redirected too many times.""" + + +class ClientConnectionError(ClientError): + """Base class for client socket errors.""" + + +class ClientOSError(ClientConnectionError, OSError): + """OSError error.""" + + +class ClientConnectorError(ClientOSError): + """Client connector error. + + Raised in :class:`aiohttp.connector.TCPConnector` if + connection to proxy can not be established. + """ + def __init__(self, connection_key: ConnectionKey, + os_error: OSError) -> None: + self._conn_key = connection_key + self._os_error = os_error + super().__init__(os_error.errno, os_error.strerror) + self.args = (connection_key, os_error) + + @property + def os_error(self) -> OSError: + return self._os_error + + @property + def host(self) -> str: + return self._conn_key.host + + @property + def port(self) -> Optional[int]: + return self._conn_key.port + + @property + def ssl(self) -> Union[SSLContext, None, bool, 'Fingerprint']: + return self._conn_key.ssl + + def __str__(self) -> str: + return ('Cannot connect to host {0.host}:{0.port} ssl:{1} [{2}]' + .format(self, self.ssl if self.ssl is not None else 'default', + self.strerror)) + + # OSError.__reduce__ does too much black magick + __reduce__ = BaseException.__reduce__ + + +class ClientProxyConnectionError(ClientConnectorError): + """Proxy connection error. + + Raised in :class:`aiohttp.connector.TCPConnector` if + connection to proxy can not be established. + """ + + +class ServerConnectionError(ClientConnectionError): + """Server connection errors.""" + + +class ServerDisconnectedError(ServerConnectionError): + """Server disconnected.""" + + def __init__(self, message: Optional[str]=None) -> None: + self.message = message + if message is None: + self.args = () + else: + self.args = (message,) + + +class ServerTimeoutError(ServerConnectionError, asyncio.TimeoutError): + """Server timeout error.""" + + +class ServerFingerprintMismatch(ServerConnectionError): + """SSL certificate does not match expected fingerprint.""" + + def __init__(self, expected: bytes, got: bytes, + host: str, port: int) -> None: + self.expected = expected + self.got = got + self.host = host + self.port = port + self.args = (expected, got, host, port) + + def __repr__(self) -> str: + return '<{} expected={!r} got={!r} host={!r} port={!r}>'.format( + self.__class__.__name__, self.expected, self.got, + self.host, self.port) + + +class ClientPayloadError(ClientError): + """Response payload error.""" + + +class InvalidURL(ClientError, ValueError): + """Invalid URL. + + URL used for fetching is malformed, e.g. it doesn't contains host + part.""" + + # Derive from ValueError for backward compatibility + + def __init__(self, url: Any) -> None: + # The type of url is not yarl.URL because the exception can be raised + # on URL(url) call + super().__init__(url) + + @property + def url(self) -> Any: + return self.args[0] + + def __repr__(self) -> str: + return '<{} {}>'.format(self.__class__.__name__, self.url) + + +class ClientSSLError(ClientConnectorError): + """Base error for ssl.*Errors.""" + + +if ssl is not None: + cert_errors = (ssl.CertificateError,) + cert_errors_bases = (ClientSSLError, ssl.CertificateError,) + + ssl_errors = (ssl.SSLError,) + ssl_error_bases = (ClientSSLError, ssl.SSLError) +else: # pragma: no cover + cert_errors = tuple() + cert_errors_bases = (ClientSSLError, ValueError,) + + ssl_errors = tuple() + ssl_error_bases = (ClientSSLError,) + + +class ClientConnectorSSLError(*ssl_error_bases): # type: ignore + """Response ssl error.""" + + +class ClientConnectorCertificateError(*cert_errors_bases): # type: ignore + """Response certificate error.""" + + def __init__(self, connection_key: + ConnectionKey, certificate_error: Exception) -> None: + self._conn_key = connection_key + self._certificate_error = certificate_error + self.args = (connection_key, certificate_error) + + @property + def certificate_error(self) -> Exception: + return self._certificate_error + + @property + def host(self) -> str: + return self._conn_key.host + + @property + def port(self) -> Optional[int]: + return self._conn_key.port + + @property + def ssl(self) -> bool: + return self._conn_key.is_ssl + + def __str__(self) -> str: + return ('Cannot connect to host {0.host}:{0.port} ssl:{0.ssl} ' + '[{0.certificate_error.__class__.__name__}: ' + '{0.certificate_error.args}]'.format(self)) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/client_proto.py b/venv-linux/lib/python3.6/site-packages/aiohttp/client_proto.py new file mode 100644 index 0000000..a44e645 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/client_proto.py @@ -0,0 +1,239 @@ +import asyncio +from contextlib import suppress +from typing import Any, Optional, Tuple + +from .base_protocol import BaseProtocol +from .client_exceptions import ( + ClientOSError, + ClientPayloadError, + ServerDisconnectedError, + ServerTimeoutError, +) +from .helpers import BaseTimerContext +from .http import HttpResponseParser, RawResponseMessage +from .streams import EMPTY_PAYLOAD, DataQueue, StreamReader + + +class ResponseHandler(BaseProtocol, + DataQueue[Tuple[RawResponseMessage, StreamReader]]): + """Helper class to adapt between Protocol and StreamReader.""" + + def __init__(self, + loop: asyncio.AbstractEventLoop) -> None: + BaseProtocol.__init__(self, loop=loop) + DataQueue.__init__(self, loop) + + self._should_close = False + + self._payload = None + self._skip_payload = False + self._payload_parser = None + + self._timer = None + + self._tail = b'' + self._upgraded = False + self._parser = None # type: Optional[HttpResponseParser] + + self._read_timeout = None # type: Optional[float] + self._read_timeout_handle = None # type: Optional[asyncio.TimerHandle] + + @property + def upgraded(self) -> bool: + return self._upgraded + + @property + def should_close(self) -> bool: + if (self._payload is not None and + not self._payload.is_eof() or self._upgraded): + return True + + return (self._should_close or self._upgraded or + self.exception() is not None or + self._payload_parser is not None or + len(self) > 0 or bool(self._tail)) + + def force_close(self) -> None: + self._should_close = True + + def close(self) -> None: + transport = self.transport + if transport is not None: + transport.close() + self.transport = None + self._payload = None + self._drop_timeout() + + def is_connected(self) -> bool: + return self.transport is not None + + def connection_lost(self, exc: Optional[BaseException]) -> None: + self._drop_timeout() + + if self._payload_parser is not None: + with suppress(Exception): + self._payload_parser.feed_eof() + + uncompleted = None + if self._parser is not None: + try: + uncompleted = self._parser.feed_eof() + except Exception: + if self._payload is not None: + self._payload.set_exception( + ClientPayloadError( + 'Response payload is not completed')) + + if not self.is_eof(): + if isinstance(exc, OSError): + exc = ClientOSError(*exc.args) + if exc is None: + exc = ServerDisconnectedError(uncompleted) + # assigns self._should_close to True as side effect, + # we do it anyway below + self.set_exception(exc) + + self._should_close = True + self._parser = None + self._payload = None + self._payload_parser = None + self._reading_paused = False + + super().connection_lost(exc) + + def eof_received(self) -> None: + # should call parser.feed_eof() most likely + self._drop_timeout() + + def pause_reading(self) -> None: + super().pause_reading() + self._drop_timeout() + + def resume_reading(self) -> None: + super().resume_reading() + self._reschedule_timeout() + + def set_exception(self, exc: BaseException) -> None: + self._should_close = True + self._drop_timeout() + super().set_exception(exc) + + def set_parser(self, parser: Any, payload: Any) -> None: + # TODO: actual types are: + # parser: WebSocketReader + # payload: FlowControlDataQueue + # but they are not generi enough + # Need an ABC for both types + self._payload = payload + self._payload_parser = parser + + self._drop_timeout() + + if self._tail: + data, self._tail = self._tail, b'' + self.data_received(data) + + def set_response_params(self, *, timer: BaseTimerContext=None, + skip_payload: bool=False, + read_until_eof: bool=False, + auto_decompress: bool=True, + read_timeout: Optional[float]=None) -> None: + self._skip_payload = skip_payload + + self._read_timeout = read_timeout + self._reschedule_timeout() + + self._parser = HttpResponseParser( + self, self._loop, timer=timer, + payload_exception=ClientPayloadError, + read_until_eof=read_until_eof, + auto_decompress=auto_decompress) + + if self._tail: + data, self._tail = self._tail, b'' + self.data_received(data) + + def _drop_timeout(self) -> None: + if self._read_timeout_handle is not None: + self._read_timeout_handle.cancel() + self._read_timeout_handle = None + + def _reschedule_timeout(self) -> None: + timeout = self._read_timeout + if self._read_timeout_handle is not None: + self._read_timeout_handle.cancel() + + if timeout: + self._read_timeout_handle = self._loop.call_later( + timeout, self._on_read_timeout) + else: + self._read_timeout_handle = None + + def _on_read_timeout(self) -> None: + exc = ServerTimeoutError("Timeout on reading data from socket") + self.set_exception(exc) + if self._payload is not None: + self._payload.set_exception(exc) + + def data_received(self, data: bytes) -> None: + self._reschedule_timeout() + + if not data: + return + + # custom payload parser + if self._payload_parser is not None: + eof, tail = self._payload_parser.feed_data(data) + if eof: + self._payload = None + self._payload_parser = None + + if tail: + self.data_received(tail) + return + else: + if self._upgraded or self._parser is None: + # i.e. websocket connection, websocket parser is not set yet + self._tail += data + else: + # parse http messages + try: + messages, upgraded, tail = self._parser.feed_data(data) + except BaseException as exc: + if self.transport is not None: + # connection.release() could be called BEFORE + # data_received(), the transport is already + # closed in this case + self.transport.close() + # should_close is True after the call + self.set_exception(exc) + return + + self._upgraded = upgraded + + payload = None + for message, payload in messages: + if message.should_close: + self._should_close = True + + self._payload = payload + + if self._skip_payload or message.code in (204, 304): + self.feed_data((message, EMPTY_PAYLOAD), 0) # type: ignore # noqa + else: + self.feed_data((message, payload), 0) + if payload is not None: + # new message(s) was processed + # register timeout handler unsubscribing + # either on end-of-stream or immediately for + # EMPTY_PAYLOAD + if payload is not EMPTY_PAYLOAD: + payload.on_eof(self._drop_timeout) + else: + self._drop_timeout() + + if tail: + if upgraded: + self.data_received(tail) + else: + self._tail = tail diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/client_reqrep.py b/venv-linux/lib/python3.6/site-packages/aiohttp/client_reqrep.py new file mode 100644 index 0000000..1d64509 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/client_reqrep.py @@ -0,0 +1,1052 @@ +import asyncio +import codecs +import io +import re +import sys +import traceback +import warnings +from hashlib import md5, sha1, sha256 +from http.cookies import CookieError, Morsel, SimpleCookie +from types import MappingProxyType, TracebackType +from typing import ( # noqa + TYPE_CHECKING, + Any, + Dict, + Iterable, + List, + Mapping, + Optional, + Tuple, + Type, + Union, + cast, +) + +import attr +from multidict import CIMultiDict, CIMultiDictProxy, MultiDict, MultiDictProxy +from yarl import URL + +from . import hdrs, helpers, http, multipart, payload +from .abc import AbstractStreamWriter +from .client_exceptions import ( + ClientConnectionError, + ClientOSError, + ClientResponseError, + ContentTypeError, + InvalidURL, + ServerFingerprintMismatch, +) +from .formdata import FormData +from .helpers import ( # noqa + PY_36, + BaseTimerContext, + BasicAuth, + HeadersMixin, + TimerNoop, + noop, + reify, + set_result, +) +from .http import SERVER_SOFTWARE, HttpVersion10, HttpVersion11, StreamWriter +from .log import client_logger +from .streams import StreamReader # noqa +from .typedefs import ( + DEFAULT_JSON_DECODER, + JSONDecoder, + LooseCookies, + LooseHeaders, + RawHeaders, +) + +try: + import ssl + from ssl import SSLContext +except ImportError: # pragma: no cover + ssl = None # type: ignore + SSLContext = object # type: ignore + +try: + import cchardet as chardet +except ImportError: # pragma: no cover + import chardet + + +__all__ = ('ClientRequest', 'ClientResponse', 'RequestInfo', 'Fingerprint') + + +if TYPE_CHECKING: # pragma: no cover + from .client import ClientSession # noqa + from .connector import Connection # noqa + from .tracing import Trace # noqa + + +json_re = re.compile(r'^application/(?:[\w.+-]+?\+)?json') + + +@attr.s(frozen=True, slots=True) +class ContentDisposition: + type = attr.ib(type=str) # type: Optional[str] + parameters = attr.ib(type=MappingProxyType) # type: MappingProxyType[str, str] # noqa + filename = attr.ib(type=str) # type: Optional[str] + + +@attr.s(frozen=True, slots=True) +class RequestInfo: + url = attr.ib(type=URL) + method = attr.ib(type=str) + headers = attr.ib(type=CIMultiDictProxy) # type: CIMultiDictProxy[str] + real_url = attr.ib(type=URL) + + @real_url.default + def real_url_default(self) -> URL: + return self.url + + +class Fingerprint: + HASHFUNC_BY_DIGESTLEN = { + 16: md5, + 20: sha1, + 32: sha256, + } + + def __init__(self, fingerprint: bytes) -> None: + digestlen = len(fingerprint) + hashfunc = self.HASHFUNC_BY_DIGESTLEN.get(digestlen) + if not hashfunc: + raise ValueError('fingerprint has invalid length') + elif hashfunc is md5 or hashfunc is sha1: + raise ValueError('md5 and sha1 are insecure and ' + 'not supported. Use sha256.') + self._hashfunc = hashfunc + self._fingerprint = fingerprint + + @property + def fingerprint(self) -> bytes: + return self._fingerprint + + def check(self, transport: asyncio.Transport) -> None: + if not transport.get_extra_info('sslcontext'): + return + sslobj = transport.get_extra_info('ssl_object') + cert = sslobj.getpeercert(binary_form=True) + got = self._hashfunc(cert).digest() + if got != self._fingerprint: + host, port, *_ = transport.get_extra_info('peername') + raise ServerFingerprintMismatch(self._fingerprint, + got, host, port) + + +if ssl is not None: + SSL_ALLOWED_TYPES = (ssl.SSLContext, bool, Fingerprint, type(None)) +else: # pragma: no cover + SSL_ALLOWED_TYPES = type(None) + + +def _merge_ssl_params( + ssl: Union['SSLContext', bool, Fingerprint, None], + verify_ssl: Optional[bool], + ssl_context: Optional['SSLContext'], + fingerprint: Optional[bytes] +) -> Union['SSLContext', bool, Fingerprint, None]: + if verify_ssl is not None and not verify_ssl: + warnings.warn("verify_ssl is deprecated, use ssl=False instead", + DeprecationWarning, + stacklevel=3) + if ssl is not None: + raise ValueError("verify_ssl, ssl_context, fingerprint and ssl " + "parameters are mutually exclusive") + else: + ssl = False + if ssl_context is not None: + warnings.warn("ssl_context is deprecated, use ssl=context instead", + DeprecationWarning, + stacklevel=3) + if ssl is not None: + raise ValueError("verify_ssl, ssl_context, fingerprint and ssl " + "parameters are mutually exclusive") + else: + ssl = ssl_context + if fingerprint is not None: + warnings.warn("fingerprint is deprecated, " + "use ssl=Fingerprint(fingerprint) instead", + DeprecationWarning, + stacklevel=3) + if ssl is not None: + raise ValueError("verify_ssl, ssl_context, fingerprint and ssl " + "parameters are mutually exclusive") + else: + ssl = Fingerprint(fingerprint) + if not isinstance(ssl, SSL_ALLOWED_TYPES): + raise TypeError("ssl should be SSLContext, bool, Fingerprint or None, " + "got {!r} instead.".format(ssl)) + return ssl + + +@attr.s(slots=True, frozen=True) +class ConnectionKey: + # the key should contain an information about used proxy / TLS + # to prevent reusing wrong connections from a pool + host = attr.ib(type=str) + port = attr.ib(type=int) # type: Optional[int] + is_ssl = attr.ib(type=bool) + ssl = attr.ib() # type: Union[SSLContext, None, bool, Fingerprint] + proxy = attr.ib() # type: Optional[URL] + proxy_auth = attr.ib() # type: Optional[BasicAuth] + proxy_headers_hash = attr.ib(type=int) # type: Optional[int] # noqa # hash(CIMultiDict) + + +def _is_expected_content_type(response_content_type: str, + expected_content_type: str) -> bool: + if expected_content_type == 'application/json': + return json_re.match(response_content_type) is not None + return expected_content_type in response_content_type + + +class ClientRequest: + GET_METHODS = { + hdrs.METH_GET, + hdrs.METH_HEAD, + hdrs.METH_OPTIONS, + hdrs.METH_TRACE, + } + POST_METHODS = {hdrs.METH_PATCH, hdrs.METH_POST, hdrs.METH_PUT} + ALL_METHODS = GET_METHODS.union(POST_METHODS).union({hdrs.METH_DELETE}) + + DEFAULT_HEADERS = { + hdrs.ACCEPT: '*/*', + hdrs.ACCEPT_ENCODING: 'gzip, deflate', + } + + body = b'' + auth = None + response = None + + _writer = None # async task for streaming data + _continue = None # waiter future for '100 Continue' response + + # N.B. + # Adding __del__ method with self._writer closing doesn't make sense + # because _writer is instance method, thus it keeps a reference to self. + # Until writer has finished finalizer will not be called. + + def __init__(self, method: str, url: URL, *, + params: Optional[Mapping[str, str]]=None, + headers: Optional[LooseHeaders]=None, + skip_auto_headers: Iterable[str]=frozenset(), + data: Any=None, + cookies: Optional[LooseCookies]=None, + auth: Optional[BasicAuth]=None, + version: http.HttpVersion=http.HttpVersion11, + compress: Optional[str]=None, + chunked: Optional[bool]=None, + expect100: bool=False, + loop: Optional[asyncio.AbstractEventLoop]=None, + response_class: Optional[Type['ClientResponse']]=None, + proxy: Optional[URL]=None, + proxy_auth: Optional[BasicAuth]=None, + timer: Optional[BaseTimerContext]=None, + session: Optional['ClientSession']=None, + ssl: Union[SSLContext, bool, Fingerprint, None]=None, + proxy_headers: Optional[LooseHeaders]=None, + traces: Optional[List['Trace']]=None): + + if loop is None: + loop = asyncio.get_event_loop() + + assert isinstance(url, URL), url + assert isinstance(proxy, (URL, type(None))), proxy + # FIXME: session is None in tests only, need to fix tests + # assert session is not None + self._session = cast('ClientSession', session) + if params: + q = MultiDict(url.query) + url2 = url.with_query(params) + q.extend(url2.query) + url = url.with_query(q) + self.original_url = url + self.url = url.with_fragment(None) + self.method = method.upper() + self.chunked = chunked + self.compress = compress + self.loop = loop + self.length = None + if response_class is None: + real_response_class = ClientResponse + else: + real_response_class = response_class + self.response_class = real_response_class # type: Type[ClientResponse] + self._timer = timer if timer is not None else TimerNoop() + self._ssl = ssl + + if loop.get_debug(): + self._source_traceback = traceback.extract_stack(sys._getframe(1)) + + self.update_version(version) + self.update_host(url) + self.update_headers(headers) + self.update_auto_headers(skip_auto_headers) + self.update_cookies(cookies) + self.update_content_encoding(data) + self.update_auth(auth) + self.update_proxy(proxy, proxy_auth, proxy_headers) + + self.update_body_from_data(data) + if data or self.method not in self.GET_METHODS: + self.update_transfer_encoding() + self.update_expect_continue(expect100) + if traces is None: + traces = [] + self._traces = traces + + def is_ssl(self) -> bool: + return self.url.scheme in ('https', 'wss') + + @property + def ssl(self) -> Union['SSLContext', None, bool, Fingerprint]: + return self._ssl + + @property + def connection_key(self) -> ConnectionKey: + proxy_headers = self.proxy_headers + if proxy_headers: + h = hash(tuple((k, v) for k, v in proxy_headers.items())) # type: Optional[int] # noqa + else: + h = None + return ConnectionKey(self.host, self.port, self.is_ssl(), + self.ssl, + self.proxy, self.proxy_auth, h) + + @property + def host(self) -> str: + ret = self.url.host + assert ret is not None + return ret + + @property + def port(self) -> Optional[int]: + return self.url.port + + @property + def request_info(self) -> RequestInfo: + headers = CIMultiDictProxy(self.headers) # type: CIMultiDictProxy[str] + return RequestInfo(self.url, self.method, + headers, self.original_url) + + def update_host(self, url: URL) -> None: + """Update destination host, port and connection type (ssl).""" + # get host/port + if not url.host: + raise InvalidURL(url) + + # basic auth info + username, password = url.user, url.password + if username: + self.auth = helpers.BasicAuth(username, password or '') + + def update_version(self, version: Union[http.HttpVersion, str]) -> None: + """Convert request version to two elements tuple. + + parser HTTP version '1.1' => (1, 1) + """ + if isinstance(version, str): + v = [l.strip() for l in version.split('.', 1)] + try: + version = http.HttpVersion(int(v[0]), int(v[1])) + except ValueError: + raise ValueError( + 'Can not parse http version number: {}' + .format(version)) from None + self.version = version + + def update_headers(self, headers: Optional[LooseHeaders]) -> None: + """Update request headers.""" + self.headers = CIMultiDict() # type: CIMultiDict[str] + + # add host + netloc = cast(str, self.url.raw_host) + if helpers.is_ipv6_address(netloc): + netloc = '[{}]'.format(netloc) + if self.url.port is not None and not self.url.is_default_port(): + netloc += ':' + str(self.url.port) + self.headers[hdrs.HOST] = netloc + + if headers: + if isinstance(headers, (dict, MultiDictProxy, MultiDict)): + headers = headers.items() # type: ignore + + for key, value in headers: + # A special case for Host header + if key.lower() == 'host': + self.headers[key] = value + else: + self.headers.add(key, value) + + def update_auto_headers(self, skip_auto_headers: Iterable[str]) -> None: + self.skip_auto_headers = CIMultiDict( + (hdr, None) for hdr in sorted(skip_auto_headers)) + used_headers = self.headers.copy() + used_headers.extend(self.skip_auto_headers) # type: ignore + + for hdr, val in self.DEFAULT_HEADERS.items(): + if hdr not in used_headers: + self.headers.add(hdr, val) + + if hdrs.USER_AGENT not in used_headers: + self.headers[hdrs.USER_AGENT] = SERVER_SOFTWARE + + def update_cookies(self, cookies: Optional[LooseCookies]) -> None: + """Update request cookies header.""" + if not cookies: + return + + c = SimpleCookie() + if hdrs.COOKIE in self.headers: + c.load(self.headers.get(hdrs.COOKIE, '')) + del self.headers[hdrs.COOKIE] + + if isinstance(cookies, Mapping): + iter_cookies = cookies.items() + else: + iter_cookies = cookies # type: ignore + for name, value in iter_cookies: + if isinstance(value, Morsel): + # Preserve coded_value + mrsl_val = value.get(value.key, Morsel()) + mrsl_val.set(value.key, value.value, value.coded_value) + c[name] = mrsl_val + else: + c[name] = value # type: ignore + + self.headers[hdrs.COOKIE] = c.output(header='', sep=';').strip() + + def update_content_encoding(self, data: Any) -> None: + """Set request content encoding.""" + if not data: + return + + enc = self.headers.get(hdrs.CONTENT_ENCODING, '').lower() + if enc: + if self.compress: + raise ValueError( + 'compress can not be set ' + 'if Content-Encoding header is set') + elif self.compress: + if not isinstance(self.compress, str): + self.compress = 'deflate' + self.headers[hdrs.CONTENT_ENCODING] = self.compress + self.chunked = True # enable chunked, no need to deal with length + + def update_transfer_encoding(self) -> None: + """Analyze transfer-encoding header.""" + te = self.headers.get(hdrs.TRANSFER_ENCODING, '').lower() + + if 'chunked' in te: + if self.chunked: + raise ValueError( + 'chunked can not be set ' + 'if "Transfer-Encoding: chunked" header is set') + + elif self.chunked: + if hdrs.CONTENT_LENGTH in self.headers: + raise ValueError( + 'chunked can not be set ' + 'if Content-Length header is set') + + self.headers[hdrs.TRANSFER_ENCODING] = 'chunked' + else: + if hdrs.CONTENT_LENGTH not in self.headers: + self.headers[hdrs.CONTENT_LENGTH] = str(len(self.body)) + + def update_auth(self, auth: Optional[BasicAuth]) -> None: + """Set basic auth.""" + if auth is None: + auth = self.auth + if auth is None: + return + + if not isinstance(auth, helpers.BasicAuth): + raise TypeError('BasicAuth() tuple is required instead') + + self.headers[hdrs.AUTHORIZATION] = auth.encode() + + def update_body_from_data(self, body: Any) -> None: + if not body: + return + + # FormData + if isinstance(body, FormData): + body = body() + + try: + body = payload.PAYLOAD_REGISTRY.get(body, disposition=None) + except payload.LookupError: + body = FormData(body)() + + self.body = body + + # enable chunked encoding if needed + if not self.chunked: + if hdrs.CONTENT_LENGTH not in self.headers: + size = body.size + if size is None: + self.chunked = True + else: + if hdrs.CONTENT_LENGTH not in self.headers: + self.headers[hdrs.CONTENT_LENGTH] = str(size) + + # copy payload headers + assert body.headers + for (key, value) in body.headers.items(): + if key in self.headers: + continue + if key in self.skip_auto_headers: + continue + self.headers[key] = value + + def update_expect_continue(self, expect: bool=False) -> None: + if expect: + self.headers[hdrs.EXPECT] = '100-continue' + elif self.headers.get(hdrs.EXPECT, '').lower() == '100-continue': + expect = True + + if expect: + self._continue = self.loop.create_future() + + def update_proxy(self, proxy: Optional[URL], + proxy_auth: Optional[BasicAuth], + proxy_headers: Optional[LooseHeaders]) -> None: + if proxy and not proxy.scheme == 'http': + raise ValueError("Only http proxies are supported") + if proxy_auth and not isinstance(proxy_auth, helpers.BasicAuth): + raise ValueError("proxy_auth must be None or BasicAuth() tuple") + self.proxy = proxy + self.proxy_auth = proxy_auth + self.proxy_headers = proxy_headers + + def keep_alive(self) -> bool: + if self.version < HttpVersion10: + # keep alive not supported at all + return False + if self.version == HttpVersion10: + if self.headers.get(hdrs.CONNECTION) == 'keep-alive': + return True + else: # no headers means we close for Http 1.0 + return False + elif self.headers.get(hdrs.CONNECTION) == 'close': + return False + + return True + + async def write_bytes(self, writer: AbstractStreamWriter, + conn: 'Connection') -> None: + """Support coroutines that yields bytes objects.""" + # 100 response + if self._continue is not None: + await writer.drain() + await self._continue + + protocol = conn.protocol + assert protocol is not None + try: + if isinstance(self.body, payload.Payload): + await self.body.write(writer) + else: + if isinstance(self.body, (bytes, bytearray)): + self.body = (self.body,) # type: ignore + + for chunk in self.body: + await writer.write(chunk) # type: ignore + + await writer.write_eof() + except OSError as exc: + new_exc = ClientOSError( + exc.errno, + 'Can not write request body for %s' % self.url) + new_exc.__context__ = exc + new_exc.__cause__ = exc + protocol.set_exception(new_exc) + except asyncio.CancelledError as exc: + if not conn.closed: + protocol.set_exception(exc) + except Exception as exc: + protocol.set_exception(exc) + finally: + self._writer = None + + async def send(self, conn: 'Connection') -> 'ClientResponse': + # Specify request target: + # - CONNECT request must send authority form URI + # - not CONNECT proxy must send absolute form URI + # - most common is origin form URI + if self.method == hdrs.METH_CONNECT: + connect_host = self.url.raw_host + assert connect_host is not None + if helpers.is_ipv6_address(connect_host): + connect_host = '[{}]'.format(connect_host) + path = '{}:{}'.format(connect_host, self.url.port) + elif self.proxy and not self.is_ssl(): + path = str(self.url) + else: + path = self.url.raw_path + if self.url.raw_query_string: + path += '?' + self.url.raw_query_string + + protocol = conn.protocol + assert protocol is not None + writer = StreamWriter( + protocol, self.loop, + on_chunk_sent=self._on_chunk_request_sent + ) + + if self.compress: + writer.enable_compression(self.compress) + + if self.chunked is not None: + writer.enable_chunking() + + # set default content-type + if (self.method in self.POST_METHODS and + hdrs.CONTENT_TYPE not in self.skip_auto_headers and + hdrs.CONTENT_TYPE not in self.headers): + self.headers[hdrs.CONTENT_TYPE] = 'application/octet-stream' + + # set the connection header + connection = self.headers.get(hdrs.CONNECTION) + if not connection: + if self.keep_alive(): + if self.version == HttpVersion10: + connection = 'keep-alive' + else: + if self.version == HttpVersion11: + connection = 'close' + + if connection is not None: + self.headers[hdrs.CONNECTION] = connection + + # status + headers + status_line = '{0} {1} HTTP/{2[0]}.{2[1]}'.format( + self.method, path, self.version) + await writer.write_headers(status_line, self.headers) + + self._writer = self.loop.create_task(self.write_bytes(writer, conn)) + + response_class = self.response_class + assert response_class is not None + self.response = response_class( + self.method, self.original_url, + writer=self._writer, continue100=self._continue, timer=self._timer, + request_info=self.request_info, + traces=self._traces, + loop=self.loop, + session=self._session + ) + return self.response + + async def close(self) -> None: + if self._writer is not None: + try: + await self._writer + finally: + self._writer = None + + def terminate(self) -> None: + if self._writer is not None: + if not self.loop.is_closed(): + self._writer.cancel() + self._writer = None + + async def _on_chunk_request_sent(self, chunk: bytes) -> None: + for trace in self._traces: + await trace.send_request_chunk_sent(chunk) + + +class ClientResponse(HeadersMixin): + + # from the Status-Line of the response + version = None # HTTP-Version + status = None # type: int # Status-Code + reason = None # Reason-Phrase + + content = None # type: StreamReader # Payload stream + _headers = None # type: CIMultiDictProxy[str] # Response headers + _raw_headers = None # type: RawHeaders # Response raw headers + + _connection = None # current connection + _source_traceback = None + # setted up by ClientRequest after ClientResponse object creation + # post-init stage allows to not change ctor signature + _closed = True # to allow __del__ for non-initialized properly response + _released = False + + def __init__(self, method: str, url: URL, *, + writer: 'asyncio.Task[None]', + continue100: Optional['asyncio.Future[bool]'], + timer: BaseTimerContext, + request_info: RequestInfo, + traces: List['Trace'], + loop: asyncio.AbstractEventLoop, + session: 'ClientSession') -> None: + assert isinstance(url, URL) + + self.method = method + self.cookies = SimpleCookie() + + self._real_url = url + self._url = url.with_fragment(None) + self._body = None # type: Any + self._writer = writer # type: Optional[asyncio.Task[None]] + self._continue = continue100 # None by default + self._closed = True + self._history = () # type: Tuple[ClientResponse, ...] + self._request_info = request_info + self._timer = timer if timer is not None else TimerNoop() + self._cache = {} # type: Dict[str, Any] + self._traces = traces + self._loop = loop + # store a reference to session #1985 + self._session = session # type: Optional[ClientSession] + if loop.get_debug(): + self._source_traceback = traceback.extract_stack(sys._getframe(1)) + + @reify + def url(self) -> URL: + return self._url + + @reify + def url_obj(self) -> URL: + warnings.warn( + "Deprecated, use .url #1654", DeprecationWarning, stacklevel=2) + return self._url + + @reify + def real_url(self) -> URL: + return self._real_url + + @reify + def host(self) -> str: + assert self._url.host is not None + return self._url.host + + @reify + def headers(self) -> 'CIMultiDictProxy[str]': + return self._headers + + @reify + def raw_headers(self) -> RawHeaders: + return self._raw_headers + + @reify + def request_info(self) -> RequestInfo: + return self._request_info + + @reify + def content_disposition(self) -> Optional[ContentDisposition]: + raw = self._headers.get(hdrs.CONTENT_DISPOSITION) + if raw is None: + return None + disposition_type, params_dct = multipart.parse_content_disposition(raw) + params = MappingProxyType(params_dct) + filename = multipart.content_disposition_filename(params) + return ContentDisposition(disposition_type, params, filename) + + def __del__(self, _warnings: Any=warnings) -> None: + if self._closed: + return + + if self._connection is not None: + self._connection.release() + self._cleanup_writer() + + if self._loop.get_debug(): + if PY_36: + kwargs = {'source': self} + else: + kwargs = {} + _warnings.warn("Unclosed response {!r}".format(self), + ResourceWarning, + **kwargs) + context = {'client_response': self, + 'message': 'Unclosed response'} + if self._source_traceback: + context['source_traceback'] = self._source_traceback + self._loop.call_exception_handler(context) + + def __repr__(self) -> str: + out = io.StringIO() + ascii_encodable_url = str(self.url) + if self.reason: + ascii_encodable_reason = self.reason.encode('ascii', + 'backslashreplace') \ + .decode('ascii') + else: + ascii_encodable_reason = self.reason + print(''.format( + ascii_encodable_url, self.status, ascii_encodable_reason), + file=out) + print(self.headers, file=out) + return out.getvalue() + + @property + def connection(self) -> Optional['Connection']: + return self._connection + + @reify + def history(self) -> Tuple['ClientResponse', ...]: + """A sequence of of responses, if redirects occurred.""" + return self._history + + @reify + def links(self) -> 'MultiDictProxy[MultiDictProxy[Union[str, URL]]]': + links_str = ", ".join(self.headers.getall("link", [])) + + if not links_str: + return MultiDictProxy(MultiDict()) + + links = MultiDict() # type: MultiDict[MultiDictProxy[Union[str, URL]]] + + for val in re.split(r",(?=\s*<)", links_str): + match = re.match(r"\s*<(.*)>(.*)", val) + if match is None: # pragma: no cover + # the check exists to suppress mypy error + continue + url, params_str = match.groups() + params = params_str.split(";")[1:] + + link = MultiDict() # type: MultiDict[Union[str, URL]] + + for param in params: + match = re.match( + r"^\s*(\S*)\s*=\s*(['\"]?)(.*?)(\2)\s*$", + param, re.M + ) + if match is None: # pragma: no cover + # the check exists to suppress mypy error + continue + key, _, value, _ = match.groups() + + link.add(key, value) + + key = link.get("rel", url) # type: ignore + + link.add("url", self.url.join(URL(url))) + + links.add(key, MultiDictProxy(link)) + + return MultiDictProxy(links) + + async def start(self, connection: 'Connection') -> 'ClientResponse': + """Start response processing.""" + self._closed = False + self._protocol = connection.protocol + self._connection = connection + + with self._timer: + while True: + # read response + try: + message, payload = await self._protocol.read() # type: ignore # noqa + except http.HttpProcessingError as exc: + raise ClientResponseError( + self.request_info, self.history, + status=exc.code, + message=exc.message, headers=exc.headers) from exc + + if (message.code < 100 or + message.code > 199 or message.code == 101): + break + + if self._continue is not None: + set_result(self._continue, True) + self._continue = None + + # payload eof handler + payload.on_eof(self._response_eof) + + # response status + self.version = message.version + self.status = message.code + self.reason = message.reason + + # headers + self._headers = message.headers # type is CIMultiDictProxy + self._raw_headers = message.raw_headers # type is Tuple[bytes, bytes] + + # payload + self.content = payload + + # cookies + for hdr in self.headers.getall(hdrs.SET_COOKIE, ()): + try: + self.cookies.load(hdr) + except CookieError as exc: + client_logger.warning( + 'Can not load response cookies: %s', exc) + return self + + def _response_eof(self) -> None: + if self._closed: + return + + if self._connection is not None: + # websocket, protocol could be None because + # connection could be detached + if (self._connection.protocol is not None and + self._connection.protocol.upgraded): + return + + self._connection.release() + self._connection = None + + self._closed = True + self._cleanup_writer() + + @property + def closed(self) -> bool: + return self._closed + + def close(self) -> None: + if not self._released: + self._notify_content() + if self._closed: + return + + self._closed = True + if self._loop is None or self._loop.is_closed(): + return + + if self._connection is not None: + self._connection.close() + self._connection = None + self._cleanup_writer() + + def release(self) -> Any: + if not self._released: + self._notify_content() + if self._closed: + return noop() + + self._closed = True + if self._connection is not None: + self._connection.release() + self._connection = None + + self._cleanup_writer() + return noop() + + def raise_for_status(self) -> None: + if 400 <= self.status: + # reason should always be not None for a started response + assert self.reason is not None + self.release() + raise ClientResponseError( + self.request_info, + self.history, + status=self.status, + message=self.reason, + headers=self.headers) + + def _cleanup_writer(self) -> None: + if self._writer is not None: + self._writer.cancel() + self._writer = None + self._session = None + + def _notify_content(self) -> None: + content = self.content + if content and content.exception() is None: + content.set_exception( + ClientConnectionError('Connection closed')) + self._released = True + + async def wait_for_close(self) -> None: + if self._writer is not None: + try: + await self._writer + finally: + self._writer = None + self.release() + + async def read(self) -> bytes: + """Read response payload.""" + if self._body is None: + try: + self._body = await self.content.read() + for trace in self._traces: + await trace.send_response_chunk_received(self._body) + except BaseException: + self.close() + raise + elif self._released: + raise ClientConnectionError('Connection closed') + + return self._body + + def get_encoding(self) -> str: + ctype = self.headers.get(hdrs.CONTENT_TYPE, '').lower() + mimetype = helpers.parse_mimetype(ctype) + + encoding = mimetype.parameters.get('charset') + if encoding: + try: + codecs.lookup(encoding) + except LookupError: + encoding = None + if not encoding: + if mimetype.type == 'application' and mimetype.subtype == 'json': + # RFC 7159 states that the default encoding is UTF-8. + encoding = 'utf-8' + else: + encoding = chardet.detect(self._body)['encoding'] + if not encoding: + encoding = 'utf-8' + + return encoding + + async def text(self, + encoding: Optional[str]=None, errors: str='strict') -> str: + """Read response payload and decode.""" + if self._body is None: + await self.read() + + if encoding is None: + encoding = self.get_encoding() + + return self._body.decode(encoding, errors=errors) # type: ignore + + async def json(self, *, encoding: str=None, + loads: JSONDecoder=DEFAULT_JSON_DECODER, + content_type: Optional[str]='application/json') -> Any: + """Read and decodes JSON response.""" + if self._body is None: + await self.read() + + if content_type: + ctype = self.headers.get(hdrs.CONTENT_TYPE, '').lower() + if not _is_expected_content_type(ctype, content_type): + raise ContentTypeError( + self.request_info, + self.history, + message=('Attempt to decode JSON with ' + 'unexpected mimetype: %s' % ctype), + headers=self.headers) + + stripped = self._body.strip() # type: ignore + if not stripped: + return None + + if encoding is None: + encoding = self.get_encoding() + + return loads(stripped.decode(encoding)) + + async def __aenter__(self) -> 'ClientResponse': + return self + + async def __aexit__(self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> None: + # similar to _RequestContextManager, we do not need to check + # for exceptions, response object can closes connection + # is state is broken + self.release() diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/client_ws.py b/venv-linux/lib/python3.6/site-packages/aiohttp/client_ws.py new file mode 100644 index 0000000..e5fd126 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/client_ws.py @@ -0,0 +1,301 @@ +"""WebSocket client for asyncio.""" + +import asyncio +from typing import Any, Optional + +import async_timeout + +from .client_exceptions import ClientError +from .client_reqrep import ClientResponse +from .helpers import call_later, set_result +from .http import ( + WS_CLOSED_MESSAGE, + WS_CLOSING_MESSAGE, + WebSocketError, + WSMessage, + WSMsgType, +) +from .http_websocket import WebSocketWriter # WSMessage +from .streams import EofStream, FlowControlDataQueue # noqa +from .typedefs import ( + DEFAULT_JSON_DECODER, + DEFAULT_JSON_ENCODER, + JSONDecoder, + JSONEncoder, +) + + +class ClientWebSocketResponse: + + def __init__(self, + reader: 'FlowControlDataQueue[WSMessage]', + writer: WebSocketWriter, + protocol: Optional[str], + response: ClientResponse, + timeout: float, + autoclose: bool, + autoping: bool, + loop: asyncio.AbstractEventLoop, + *, + receive_timeout: Optional[float]=None, + heartbeat: Optional[float]=None, + compress: int=0, + client_notakeover: bool=False) -> None: + self._response = response + self._conn = response.connection + + self._writer = writer + self._reader = reader + self._protocol = protocol + self._closed = False + self._closing = False + self._close_code = None # type: Optional[int] + self._timeout = timeout + self._receive_timeout = receive_timeout + self._autoclose = autoclose + self._autoping = autoping + self._heartbeat = heartbeat + self._heartbeat_cb = None + if heartbeat is not None: + self._pong_heartbeat = heartbeat / 2.0 + self._pong_response_cb = None + self._loop = loop + self._waiting = None # type: Optional[asyncio.Future[bool]] + self._exception = None # type: Optional[BaseException] + self._compress = compress + self._client_notakeover = client_notakeover + + self._reset_heartbeat() + + def _cancel_heartbeat(self) -> None: + if self._pong_response_cb is not None: + self._pong_response_cb.cancel() + self._pong_response_cb = None + + if self._heartbeat_cb is not None: + self._heartbeat_cb.cancel() + self._heartbeat_cb = None + + def _reset_heartbeat(self) -> None: + self._cancel_heartbeat() + + if self._heartbeat is not None: + self._heartbeat_cb = call_later( + self._send_heartbeat, self._heartbeat, self._loop) + + def _send_heartbeat(self) -> None: + if self._heartbeat is not None and not self._closed: + # fire-and-forget a task is not perfect but maybe ok for + # sending ping. Otherwise we need a long-living heartbeat + # task in the class. + self._loop.create_task(self._writer.ping()) + + if self._pong_response_cb is not None: + self._pong_response_cb.cancel() + self._pong_response_cb = call_later( + self._pong_not_received, self._pong_heartbeat, self._loop) + + def _pong_not_received(self) -> None: + if not self._closed: + self._closed = True + self._close_code = 1006 + self._exception = asyncio.TimeoutError() + self._response.close() + + @property + def closed(self) -> bool: + return self._closed + + @property + def close_code(self) -> Optional[int]: + return self._close_code + + @property + def protocol(self) -> Optional[str]: + return self._protocol + + @property + def compress(self) -> int: + return self._compress + + @property + def client_notakeover(self) -> bool: + return self._client_notakeover + + def get_extra_info(self, name: str, default: Any=None) -> Any: + """extra info from connection transport""" + conn = self._response.connection + if conn is None: + return default + transport = conn.transport + if transport is None: + return default + return transport.get_extra_info(name, default) + + def exception(self) -> Optional[BaseException]: + return self._exception + + async def ping(self, message: bytes=b'') -> None: + await self._writer.ping(message) + + async def pong(self, message: bytes=b'') -> None: + await self._writer.pong(message) + + async def send_str(self, data: str, + compress: Optional[int]=None) -> None: + if not isinstance(data, str): + raise TypeError('data argument must be str (%r)' % type(data)) + await self._writer.send(data, binary=False, compress=compress) + + async def send_bytes(self, data: bytes, + compress: Optional[int]=None) -> None: + if not isinstance(data, (bytes, bytearray, memoryview)): + raise TypeError('data argument must be byte-ish (%r)' % + type(data)) + await self._writer.send(data, binary=True, compress=compress) + + async def send_json(self, data: Any, + compress: Optional[int]=None, + *, dumps: JSONEncoder=DEFAULT_JSON_ENCODER) -> None: + await self.send_str(dumps(data), compress=compress) + + async def close(self, *, code: int=1000, message: bytes=b'') -> bool: + # we need to break `receive()` cycle first, + # `close()` may be called from different task + if self._waiting is not None and not self._closed: + self._reader.feed_data(WS_CLOSING_MESSAGE, 0) + await self._waiting + + if not self._closed: + self._cancel_heartbeat() + self._closed = True + try: + await self._writer.close(code, message) + except asyncio.CancelledError: + self._close_code = 1006 + self._response.close() + raise + except Exception as exc: + self._close_code = 1006 + self._exception = exc + self._response.close() + return True + + if self._closing: + self._response.close() + return True + + while True: + try: + with async_timeout.timeout(self._timeout, loop=self._loop): + msg = await self._reader.read() + except asyncio.CancelledError: + self._close_code = 1006 + self._response.close() + raise + except Exception as exc: + self._close_code = 1006 + self._exception = exc + self._response.close() + return True + + if msg.type == WSMsgType.CLOSE: + self._close_code = msg.data + self._response.close() + return True + else: + return False + + async def receive(self, timeout: Optional[float]=None) -> WSMessage: + while True: + if self._waiting is not None: + raise RuntimeError( + 'Concurrent call to receive() is not allowed') + + if self._closed: + return WS_CLOSED_MESSAGE + elif self._closing: + await self.close() + return WS_CLOSED_MESSAGE + + try: + self._waiting = self._loop.create_future() + try: + with async_timeout.timeout( + timeout or self._receive_timeout, + loop=self._loop): + msg = await self._reader.read() + self._reset_heartbeat() + finally: + waiter = self._waiting + self._waiting = None + set_result(waiter, True) + except (asyncio.CancelledError, asyncio.TimeoutError): + self._close_code = 1006 + raise + except EofStream: + self._close_code = 1000 + await self.close() + return WSMessage(WSMsgType.CLOSED, None, None) + except ClientError: + self._closed = True + self._close_code = 1006 + return WS_CLOSED_MESSAGE + except WebSocketError as exc: + self._close_code = exc.code + await self.close(code=exc.code) + return WSMessage(WSMsgType.ERROR, exc, None) + except Exception as exc: + self._exception = exc + self._closing = True + self._close_code = 1006 + await self.close() + return WSMessage(WSMsgType.ERROR, exc, None) + + if msg.type == WSMsgType.CLOSE: + self._closing = True + self._close_code = msg.data + if not self._closed and self._autoclose: + await self.close() + elif msg.type == WSMsgType.CLOSING: + self._closing = True + elif msg.type == WSMsgType.PING and self._autoping: + await self.pong(msg.data) + continue + elif msg.type == WSMsgType.PONG and self._autoping: + continue + + return msg + + async def receive_str(self, *, timeout: Optional[float]=None) -> str: + msg = await self.receive(timeout) + if msg.type != WSMsgType.TEXT: + raise TypeError( + "Received message {}:{!r} is not str".format(msg.type, + msg.data)) + return msg.data + + async def receive_bytes(self, *, timeout: Optional[float]=None) -> bytes: + msg = await self.receive(timeout) + if msg.type != WSMsgType.BINARY: + raise TypeError( + "Received message {}:{!r} is not bytes".format(msg.type, + msg.data)) + return msg.data + + async def receive_json(self, + *, loads: JSONDecoder=DEFAULT_JSON_DECODER, + timeout: Optional[float]=None) -> Any: + data = await self.receive_str(timeout=timeout) + return loads(data) + + def __aiter__(self) -> 'ClientWebSocketResponse': + return self + + async def __anext__(self) -> WSMessage: + msg = await self.receive() + if msg.type in (WSMsgType.CLOSE, + WSMsgType.CLOSING, + WSMsgType.CLOSED): + raise StopAsyncIteration # NOQA + return msg diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/connector.py b/venv-linux/lib/python3.6/site-packages/aiohttp/connector.py new file mode 100644 index 0000000..da37e0d --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/connector.py @@ -0,0 +1,1193 @@ +import asyncio +import functools +import random +import sys +import traceback +import warnings +from collections import defaultdict, deque +from contextlib import suppress +from http.cookies import SimpleCookie +from itertools import cycle, islice +from time import monotonic +from types import TracebackType +from typing import ( # noqa + TYPE_CHECKING, + Any, + Awaitable, + Callable, + DefaultDict, + Dict, + Iterator, + List, + Optional, + Set, + Tuple, + Type, + Union, + cast, +) + +import attr + +from . import hdrs, helpers +from .abc import AbstractResolver +from .client_exceptions import ( + ClientConnectionError, + ClientConnectorCertificateError, + ClientConnectorError, + ClientConnectorSSLError, + ClientHttpProxyError, + ClientProxyConnectionError, + ServerFingerprintMismatch, + cert_errors, + ssl_errors, +) +from .client_proto import ResponseHandler +from .client_reqrep import ClientRequest, Fingerprint, _merge_ssl_params +from .helpers import ( + PY_36, + CeilTimeout, + get_running_loop, + is_ip_address, + noop2, + sentinel, +) +from .http import RESPONSES +from .locks import EventResultOrError +from .resolver import DefaultResolver + +try: + import ssl + SSLContext = ssl.SSLContext +except ImportError: # pragma: no cover + ssl = None # type: ignore + SSLContext = object # type: ignore + + +__all__ = ('BaseConnector', 'TCPConnector', 'UnixConnector', + 'NamedPipeConnector') + + +if TYPE_CHECKING: # pragma: no cover + from .client import ClientTimeout # noqa + from .client_reqrep import ConnectionKey # noqa + from .tracing import Trace # noqa + + +class _DeprecationWaiter: + __slots__ = ('_awaitable', '_awaited') + + def __init__(self, awaitable: Awaitable[Any]) -> None: + self._awaitable = awaitable + self._awaited = False + + def __await__(self) -> Any: + self._awaited = True + return self._awaitable.__await__() + + def __del__(self) -> None: + if not self._awaited: + warnings.warn("Connector.close() is a coroutine, " + "please use await connector.close()", + DeprecationWarning) + + +class Connection: + + _source_traceback = None + _transport = None + + def __init__(self, connector: 'BaseConnector', + key: 'ConnectionKey', + protocol: ResponseHandler, + loop: asyncio.AbstractEventLoop) -> None: + self._key = key + self._connector = connector + self._loop = loop + self._protocol = protocol # type: Optional[ResponseHandler] + self._callbacks = [] # type: List[Callable[[], None]] + + if loop.get_debug(): + self._source_traceback = traceback.extract_stack(sys._getframe(1)) + + def __repr__(self) -> str: + return 'Connection<{}>'.format(self._key) + + def __del__(self, _warnings: Any=warnings) -> None: + if self._protocol is not None: + if PY_36: + kwargs = {'source': self} + else: + kwargs = {} + _warnings.warn('Unclosed connection {!r}'.format(self), + ResourceWarning, + **kwargs) + if self._loop.is_closed(): + return + + self._connector._release( + self._key, self._protocol, should_close=True) + + context = {'client_connection': self, + 'message': 'Unclosed connection'} + if self._source_traceback is not None: + context['source_traceback'] = self._source_traceback + self._loop.call_exception_handler(context) + + @property + def loop(self) -> asyncio.AbstractEventLoop: + warnings.warn("connector.loop property is deprecated", + DeprecationWarning, + stacklevel=2) + return self._loop + + @property + def transport(self) -> Optional[asyncio.Transport]: + if self._protocol is None: + return None + return self._protocol.transport + + @property + def protocol(self) -> Optional[ResponseHandler]: + return self._protocol + + def add_callback(self, callback: Callable[[], None]) -> None: + if callback is not None: + self._callbacks.append(callback) + + def _notify_release(self) -> None: + callbacks, self._callbacks = self._callbacks[:], [] + + for cb in callbacks: + with suppress(Exception): + cb() + + def close(self) -> None: + self._notify_release() + + if self._protocol is not None: + self._connector._release( + self._key, self._protocol, should_close=True) + self._protocol = None + + def release(self) -> None: + self._notify_release() + + if self._protocol is not None: + self._connector._release( + self._key, self._protocol, + should_close=self._protocol.should_close) + self._protocol = None + + @property + def closed(self) -> bool: + return self._protocol is None or not self._protocol.is_connected() + + +class _TransportPlaceholder: + """ placeholder for BaseConnector.connect function """ + + def close(self) -> None: + pass + + +class BaseConnector: + """Base connector class. + + keepalive_timeout - (optional) Keep-alive timeout. + force_close - Set to True to force close and do reconnect + after each request (and between redirects). + limit - The total number of simultaneous connections. + limit_per_host - Number of simultaneous connections to one host. + enable_cleanup_closed - Enables clean-up closed ssl transports. + Disabled by default. + loop - Optional event loop. + """ + + _closed = True # prevent AttributeError in __del__ if ctor was failed + _source_traceback = None + + # abort transport after 2 seconds (cleanup broken connections) + _cleanup_closed_period = 2.0 + + def __init__(self, *, + keepalive_timeout: Union[object, None, float]=sentinel, + force_close: bool=False, + limit: int=100, limit_per_host: int=0, + enable_cleanup_closed: bool=False, + loop: Optional[asyncio.AbstractEventLoop]=None) -> None: + + if force_close: + if keepalive_timeout is not None and \ + keepalive_timeout is not sentinel: + raise ValueError('keepalive_timeout cannot ' + 'be set if force_close is True') + else: + if keepalive_timeout is sentinel: + keepalive_timeout = 15.0 + + loop = get_running_loop(loop) + + self._closed = False + if loop.get_debug(): + self._source_traceback = traceback.extract_stack(sys._getframe(1)) + + self._conns = {} # type: Dict[ConnectionKey, List[Tuple[ResponseHandler, float]]] # noqa + self._limit = limit + self._limit_per_host = limit_per_host + self._acquired = set() # type: Set[ResponseHandler] + self._acquired_per_host = defaultdict(set) # type: DefaultDict[ConnectionKey, Set[ResponseHandler]] # noqa + self._keepalive_timeout = cast(float, keepalive_timeout) + self._force_close = force_close + + # {host_key: FIFO list of waiters} + self._waiters = defaultdict(deque) # type: ignore + + self._loop = loop + self._factory = functools.partial(ResponseHandler, loop=loop) + + self.cookies = SimpleCookie() + + # start keep-alive connection cleanup task + self._cleanup_handle = None + + # start cleanup closed transports task + self._cleanup_closed_handle = None + self._cleanup_closed_disabled = not enable_cleanup_closed + self._cleanup_closed_transports = [] # type: List[Optional[asyncio.Transport]] # noqa + self._cleanup_closed() + + def __del__(self, _warnings: Any=warnings) -> None: + if self._closed: + return + if not self._conns: + return + + conns = [repr(c) for c in self._conns.values()] + + self._close() + + if PY_36: + kwargs = {'source': self} + else: + kwargs = {} + _warnings.warn("Unclosed connector {!r}".format(self), + ResourceWarning, + **kwargs) + context = {'connector': self, + 'connections': conns, + 'message': 'Unclosed connector'} + if self._source_traceback is not None: + context['source_traceback'] = self._source_traceback + self._loop.call_exception_handler(context) + + def __enter__(self) -> 'BaseConnector': + warnings.warn('"witn Connector():" is deprecated, ' + 'use "async with Connector():" instead', + DeprecationWarning) + return self + + def __exit__(self, *exc: Any) -> None: + self.close() + + async def __aenter__(self) -> 'BaseConnector': + return self + + async def __aexit__(self, + exc_type: Optional[Type[BaseException]]=None, + exc_value: Optional[BaseException]=None, + exc_traceback: Optional[TracebackType]=None + ) -> None: + await self.close() + + @property + def force_close(self) -> bool: + """Ultimately close connection on releasing if True.""" + return self._force_close + + @property + def limit(self) -> int: + """The total number for simultaneous connections. + + If limit is 0 the connector has no limit. + The default limit size is 100. + """ + return self._limit + + @property + def limit_per_host(self) -> int: + """The limit_per_host for simultaneous connections + to the same endpoint. + + Endpoints are the same if they are have equal + (host, port, is_ssl) triple. + + """ + return self._limit_per_host + + def _cleanup(self) -> None: + """Cleanup unused transports.""" + if self._cleanup_handle: + self._cleanup_handle.cancel() + + now = self._loop.time() + timeout = self._keepalive_timeout + + if self._conns: + connections = {} + deadline = now - timeout + for key, conns in self._conns.items(): + alive = [] + for proto, use_time in conns: + if proto.is_connected(): + if use_time - deadline < 0: + transport = proto.transport + proto.close() + if (key.is_ssl and + not self._cleanup_closed_disabled): + self._cleanup_closed_transports.append( + transport) + else: + alive.append((proto, use_time)) + + if alive: + connections[key] = alive + + self._conns = connections + + if self._conns: + self._cleanup_handle = helpers.weakref_handle( + self, '_cleanup', timeout, self._loop) + + def _drop_acquired_per_host(self, key: 'ConnectionKey', + val: ResponseHandler) -> None: + acquired_per_host = self._acquired_per_host + if key not in acquired_per_host: + return + conns = acquired_per_host[key] + conns.remove(val) + if not conns: + del self._acquired_per_host[key] + + def _cleanup_closed(self) -> None: + """Double confirmation for transport close. + Some broken ssl servers may leave socket open without proper close. + """ + if self._cleanup_closed_handle: + self._cleanup_closed_handle.cancel() + + for transport in self._cleanup_closed_transports: + if transport is not None: + transport.abort() + + self._cleanup_closed_transports = [] + + if not self._cleanup_closed_disabled: + self._cleanup_closed_handle = helpers.weakref_handle( + self, '_cleanup_closed', + self._cleanup_closed_period, self._loop) + + def close(self) -> Awaitable[None]: + """Close all opened transports.""" + self._close() + return _DeprecationWaiter(noop2()) + + def _close(self) -> None: + if self._closed: + return + + self._closed = True + + try: + if self._loop.is_closed(): + return + + # cancel cleanup task + if self._cleanup_handle: + self._cleanup_handle.cancel() + + # cancel cleanup close task + if self._cleanup_closed_handle: + self._cleanup_closed_handle.cancel() + + for data in self._conns.values(): + for proto, t0 in data: + proto.close() + + for proto in self._acquired: + proto.close() + + for transport in self._cleanup_closed_transports: + if transport is not None: + transport.abort() + + finally: + self._conns.clear() + self._acquired.clear() + self._waiters.clear() + self._cleanup_handle = None + self._cleanup_closed_transports.clear() + self._cleanup_closed_handle = None + + @property + def closed(self) -> bool: + """Is connector closed. + + A readonly property. + """ + return self._closed + + def _available_connections(self, key: 'ConnectionKey') -> int: + """ + Return number of available connections taking into account + the limit, limit_per_host and the connection key. + + If it returns less than 1 means that there is no connections + availables. + """ + + if self._limit: + # total calc available connections + available = self._limit - len(self._acquired) + + # check limit per host + if (self._limit_per_host and available > 0 and + key in self._acquired_per_host): + acquired = self._acquired_per_host.get(key) + assert acquired is not None + available = self._limit_per_host - len(acquired) + + elif self._limit_per_host and key in self._acquired_per_host: + # check limit per host + acquired = self._acquired_per_host.get(key) + assert acquired is not None + available = self._limit_per_host - len(acquired) + else: + available = 1 + + return available + + async def connect(self, req: 'ClientRequest', + traces: List['Trace'], + timeout: 'ClientTimeout') -> Connection: + """Get from pool or create new connection.""" + key = req.connection_key + available = self._available_connections(key) + + # Wait if there are no available connections. + if available <= 0: + fut = self._loop.create_future() + + # This connection will now count towards the limit. + waiters = self._waiters[key] + waiters.append(fut) + + if traces: + for trace in traces: + await trace.send_connection_queued_start() + + try: + await fut + except BaseException as e: + # remove a waiter even if it was cancelled, normally it's + # removed when it's notified + try: + waiters.remove(fut) + except ValueError: # fut may no longer be in list + pass + + raise e + finally: + if not waiters: + try: + del self._waiters[key] + except KeyError: + # the key was evicted before. + pass + + if traces: + for trace in traces: + await trace.send_connection_queued_end() + + proto = self._get(key) + if proto is None: + placeholder = cast(ResponseHandler, _TransportPlaceholder()) + self._acquired.add(placeholder) + self._acquired_per_host[key].add(placeholder) + + if traces: + for trace in traces: + await trace.send_connection_create_start() + + try: + proto = await self._create_connection(req, traces, timeout) + if self._closed: + proto.close() + raise ClientConnectionError("Connector is closed.") + except BaseException: + if not self._closed: + self._acquired.remove(placeholder) + self._drop_acquired_per_host(key, placeholder) + self._release_waiter() + raise + else: + if not self._closed: + self._acquired.remove(placeholder) + self._drop_acquired_per_host(key, placeholder) + + if traces: + for trace in traces: + await trace.send_connection_create_end() + else: + if traces: + for trace in traces: + await trace.send_connection_reuseconn() + + self._acquired.add(proto) + self._acquired_per_host[key].add(proto) + return Connection(self, key, proto, self._loop) + + def _get(self, key: 'ConnectionKey') -> Optional[ResponseHandler]: + try: + conns = self._conns[key] + except KeyError: + return None + + t1 = self._loop.time() + while conns: + proto, t0 = conns.pop() + if proto.is_connected(): + if t1 - t0 > self._keepalive_timeout: + transport = proto.transport + proto.close() + # only for SSL transports + if key.is_ssl and not self._cleanup_closed_disabled: + self._cleanup_closed_transports.append(transport) + else: + if not conns: + # The very last connection was reclaimed: drop the key + del self._conns[key] + return proto + + # No more connections: drop the key + del self._conns[key] + return None + + def _release_waiter(self) -> None: + """ + Iterates over all waiters till found one that is not finsihed and + belongs to a host that has available connections. + """ + if not self._waiters: + return + + # Having the dict keys ordered this avoids to iterate + # at the same order at each call. + queues = list(self._waiters.keys()) + random.shuffle(queues) + + for key in queues: + if self._available_connections(key) < 1: + continue + + waiters = self._waiters[key] + while waiters: + waiter = waiters.popleft() + if not waiter.done(): + waiter.set_result(None) + return + + def _release_acquired(self, key: 'ConnectionKey', + proto: ResponseHandler) -> None: + if self._closed: + # acquired connection is already released on connector closing + return + + try: + self._acquired.remove(proto) + self._drop_acquired_per_host(key, proto) + except KeyError: # pragma: no cover + # this may be result of undetermenistic order of objects + # finalization due garbage collection. + pass + else: + self._release_waiter() + + def _release(self, key: 'ConnectionKey', protocol: ResponseHandler, + *, should_close: bool=False) -> None: + if self._closed: + # acquired connection is already released on connector closing + return + + self._release_acquired(key, protocol) + + if self._force_close: + should_close = True + + if should_close or protocol.should_close: + transport = protocol.transport + protocol.close() + + if key.is_ssl and not self._cleanup_closed_disabled: + self._cleanup_closed_transports.append(transport) + else: + conns = self._conns.get(key) + if conns is None: + conns = self._conns[key] = [] + conns.append((protocol, self._loop.time())) + + if self._cleanup_handle is None: + self._cleanup_handle = helpers.weakref_handle( + self, '_cleanup', self._keepalive_timeout, self._loop) + + async def _create_connection(self, req: 'ClientRequest', + traces: List['Trace'], + timeout: 'ClientTimeout') -> ResponseHandler: + raise NotImplementedError() + + +class _DNSCacheTable: + + def __init__(self, ttl: Optional[float]=None) -> None: + self._addrs_rr = {} # type: Dict[Tuple[str, int], Tuple[Iterator[Dict[str, Any]], int]] # noqa + self._timestamps = {} # type: Dict[Tuple[str, int], float] + self._ttl = ttl + + def __contains__(self, host: object) -> bool: + return host in self._addrs_rr + + def add(self, key: Tuple[str, int], addrs: List[Dict[str, Any]]) -> None: + self._addrs_rr[key] = (cycle(addrs), len(addrs)) + + if self._ttl: + self._timestamps[key] = monotonic() + + def remove(self, key: Tuple[str, int]) -> None: + self._addrs_rr.pop(key, None) + + if self._ttl: + self._timestamps.pop(key, None) + + def clear(self) -> None: + self._addrs_rr.clear() + self._timestamps.clear() + + def next_addrs(self, key: Tuple[str, int]) -> List[Dict[str, Any]]: + loop, length = self._addrs_rr[key] + addrs = list(islice(loop, length)) + # Consume one more element to shift internal state of `cycle` + next(loop) + return addrs + + def expired(self, key: Tuple[str, int]) -> bool: + if self._ttl is None: + return False + + return self._timestamps[key] + self._ttl < monotonic() + + +class TCPConnector(BaseConnector): + """TCP connector. + + verify_ssl - Set to True to check ssl certifications. + fingerprint - Pass the binary sha256 + digest of the expected certificate in DER format to verify + that the certificate the server presents matches. See also + https://en.wikipedia.org/wiki/Transport_Layer_Security#Certificate_pinning + resolver - Enable DNS lookups and use this + resolver + use_dns_cache - Use memory cache for DNS lookups. + ttl_dns_cache - Max seconds having cached a DNS entry, None forever. + family - socket address family + local_addr - local tuple of (host, port) to bind socket to + + keepalive_timeout - (optional) Keep-alive timeout. + force_close - Set to True to force close and do reconnect + after each request (and between redirects). + limit - The total number of simultaneous connections. + limit_per_host - Number of simultaneous connections to one host. + enable_cleanup_closed - Enables clean-up closed ssl transports. + Disabled by default. + loop - Optional event loop. + """ + + def __init__(self, *, verify_ssl: bool=True, + fingerprint: Optional[bytes]=None, + use_dns_cache: bool=True, ttl_dns_cache: int=10, + family: int=0, + ssl_context: Optional[SSLContext]=None, + ssl: Union[None, bool, Fingerprint, SSLContext]=None, + local_addr: Optional[Tuple[str, int]]=None, + resolver: Optional[AbstractResolver]=None, + keepalive_timeout: Union[None, float, object]=sentinel, + force_close: bool=False, + limit: int=100, limit_per_host: int=0, + enable_cleanup_closed: bool=False, + loop: Optional[asyncio.AbstractEventLoop]=None): + super().__init__(keepalive_timeout=keepalive_timeout, + force_close=force_close, + limit=limit, limit_per_host=limit_per_host, + enable_cleanup_closed=enable_cleanup_closed, + loop=loop) + + self._ssl = _merge_ssl_params(ssl, verify_ssl, ssl_context, + fingerprint) + if resolver is None: + resolver = DefaultResolver(loop=self._loop) + self._resolver = resolver + + self._use_dns_cache = use_dns_cache + self._cached_hosts = _DNSCacheTable(ttl=ttl_dns_cache) + self._throttle_dns_events = {} # type: Dict[Tuple[str, int], EventResultOrError] # noqa + self._family = family + self._local_addr = local_addr + + def close(self) -> Awaitable[None]: + """Close all ongoing DNS calls.""" + for ev in self._throttle_dns_events.values(): + ev.cancel() + + return super().close() + + @property + def family(self) -> int: + """Socket family like AF_INET.""" + return self._family + + @property + def use_dns_cache(self) -> bool: + """True if local DNS caching is enabled.""" + return self._use_dns_cache + + def clear_dns_cache(self, + host: Optional[str]=None, + port: Optional[int]=None) -> None: + """Remove specified host/port or clear all dns local cache.""" + if host is not None and port is not None: + self._cached_hosts.remove((host, port)) + elif host is not None or port is not None: + raise ValueError("either both host and port " + "or none of them are allowed") + else: + self._cached_hosts.clear() + + async def _resolve_host(self, + host: str, port: int, + traces: Optional[List['Trace']]=None + ) -> List[Dict[str, Any]]: + if is_ip_address(host): + return [{'hostname': host, 'host': host, 'port': port, + 'family': self._family, 'proto': 0, 'flags': 0}] + + if not self._use_dns_cache: + + if traces: + for trace in traces: + await trace.send_dns_resolvehost_start(host) + + res = (await self._resolver.resolve( + host, port, family=self._family)) + + if traces: + for trace in traces: + await trace.send_dns_resolvehost_end(host) + + return res + + key = (host, port) + + if (key in self._cached_hosts) and \ + (not self._cached_hosts.expired(key)): + # get result early, before any await (#4014) + result = self._cached_hosts.next_addrs(key) + + if traces: + for trace in traces: + await trace.send_dns_cache_hit(host) + return result + + if key in self._throttle_dns_events: + # get event early, before any await (#4014) + event = self._throttle_dns_events[key] + if traces: + for trace in traces: + await trace.send_dns_cache_hit(host) + await event.wait() + else: + # update dict early, before any await (#4014) + self._throttle_dns_events[key] = \ + EventResultOrError(self._loop) + if traces: + for trace in traces: + await trace.send_dns_cache_miss(host) + try: + + if traces: + for trace in traces: + await trace.send_dns_resolvehost_start(host) + + addrs = await \ + self._resolver.resolve(host, port, family=self._family) + if traces: + for trace in traces: + await trace.send_dns_resolvehost_end(host) + + self._cached_hosts.add(key, addrs) + self._throttle_dns_events[key].set() + except BaseException as e: + # any DNS exception, independently of the implementation + # is set for the waiters to raise the same exception. + self._throttle_dns_events[key].set(exc=e) + raise + finally: + self._throttle_dns_events.pop(key) + + return self._cached_hosts.next_addrs(key) + + async def _create_connection(self, req: 'ClientRequest', + traces: List['Trace'], + timeout: 'ClientTimeout') -> ResponseHandler: + """Create connection. + + Has same keyword arguments as BaseEventLoop.create_connection. + """ + if req.proxy: + _, proto = await self._create_proxy_connection( + req, traces, timeout) + else: + _, proto = await self._create_direct_connection( + req, traces, timeout) + + return proto + + @staticmethod + @functools.lru_cache(None) + def _make_ssl_context(verified: bool) -> SSLContext: + if verified: + return ssl.create_default_context() + else: + sslcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + sslcontext.options |= ssl.OP_NO_SSLv2 + sslcontext.options |= ssl.OP_NO_SSLv3 + try: + sslcontext.options |= ssl.OP_NO_COMPRESSION + except AttributeError as attr_err: + warnings.warn( + '{!s}: The Python interpreter is compiled ' + 'against OpenSSL < 1.0.0. Ref: ' + 'https://docs.python.org/3/library/ssl.html' + '#ssl.OP_NO_COMPRESSION'. + format(attr_err), + ) + sslcontext.set_default_verify_paths() + return sslcontext + + def _get_ssl_context(self, req: 'ClientRequest') -> Optional[SSLContext]: + """Logic to get the correct SSL context + + 0. if req.ssl is false, return None + + 1. if ssl_context is specified in req, use it + 2. if _ssl_context is specified in self, use it + 3. otherwise: + 1. if verify_ssl is not specified in req, use self.ssl_context + (will generate a default context according to self.verify_ssl) + 2. if verify_ssl is True in req, generate a default SSL context + 3. if verify_ssl is False in req, generate a SSL context that + won't verify + """ + if req.is_ssl(): + if ssl is None: # pragma: no cover + raise RuntimeError('SSL is not supported.') + sslcontext = req.ssl + if isinstance(sslcontext, ssl.SSLContext): + return sslcontext + if sslcontext is not None: + # not verified or fingerprinted + return self._make_ssl_context(False) + sslcontext = self._ssl + if isinstance(sslcontext, ssl.SSLContext): + return sslcontext + if sslcontext is not None: + # not verified or fingerprinted + return self._make_ssl_context(False) + return self._make_ssl_context(True) + else: + return None + + def _get_fingerprint(self, + req: 'ClientRequest') -> Optional['Fingerprint']: + ret = req.ssl + if isinstance(ret, Fingerprint): + return ret + ret = self._ssl + if isinstance(ret, Fingerprint): + return ret + return None + + async def _wrap_create_connection( + self, *args: Any, + req: 'ClientRequest', + timeout: 'ClientTimeout', + client_error: Type[Exception]=ClientConnectorError, + **kwargs: Any) -> Tuple[asyncio.Transport, ResponseHandler]: + try: + with CeilTimeout(timeout.sock_connect): + return await self._loop.create_connection(*args, **kwargs) # type: ignore # noqa + except cert_errors as exc: + raise ClientConnectorCertificateError( + req.connection_key, exc) from exc + except ssl_errors as exc: + raise ClientConnectorSSLError(req.connection_key, exc) from exc + except OSError as exc: + raise client_error(req.connection_key, exc) from exc + + async def _create_direct_connection( + self, + req: 'ClientRequest', + traces: List['Trace'], + timeout: 'ClientTimeout', + *, + client_error: Type[Exception]=ClientConnectorError + ) -> Tuple[asyncio.Transport, ResponseHandler]: + sslcontext = self._get_ssl_context(req) + fingerprint = self._get_fingerprint(req) + + try: + # Cancelling this lookup should not cancel the underlying lookup + # or else the cancel event will get broadcast to all the waiters + # across all connections. + host = req.url.raw_host + assert host is not None + port = req.port + assert port is not None + hosts = await asyncio.shield(self._resolve_host( + host, + port, + traces=traces), loop=self._loop) + except OSError as exc: + # in case of proxy it is not ClientProxyConnectionError + # it is problem of resolving proxy ip itself + raise ClientConnectorError(req.connection_key, exc) from exc + + last_exc = None # type: Optional[Exception] + + for hinfo in hosts: + host = hinfo['host'] + port = hinfo['port'] + + try: + transp, proto = await self._wrap_create_connection( + self._factory, host, port, timeout=timeout, + ssl=sslcontext, family=hinfo['family'], + proto=hinfo['proto'], flags=hinfo['flags'], + server_hostname=hinfo['hostname'] if sslcontext else None, + local_addr=self._local_addr, + req=req, client_error=client_error) + except ClientConnectorError as exc: + last_exc = exc + continue + + if req.is_ssl() and fingerprint: + try: + fingerprint.check(transp) + except ServerFingerprintMismatch as exc: + transp.close() + if not self._cleanup_closed_disabled: + self._cleanup_closed_transports.append(transp) + last_exc = exc + continue + + return transp, proto + else: + assert last_exc is not None + raise last_exc + + async def _create_proxy_connection( + self, + req: 'ClientRequest', + traces: List['Trace'], + timeout: 'ClientTimeout' + ) -> Tuple[asyncio.Transport, ResponseHandler]: + headers = {} # type: Dict[str, str] + if req.proxy_headers is not None: + headers = req.proxy_headers # type: ignore + headers[hdrs.HOST] = req.headers[hdrs.HOST] + + url = req.proxy + assert url is not None + proxy_req = ClientRequest( + hdrs.METH_GET, url, + headers=headers, + auth=req.proxy_auth, + loop=self._loop, + ssl=req.ssl) + + # create connection to proxy server + transport, proto = await self._create_direct_connection( + proxy_req, [], timeout, client_error=ClientProxyConnectionError) + + # Many HTTP proxies has buggy keepalive support. Let's not + # reuse connection but close it after processing every + # response. + proto.force_close() + + auth = proxy_req.headers.pop(hdrs.AUTHORIZATION, None) + if auth is not None: + if not req.is_ssl(): + req.headers[hdrs.PROXY_AUTHORIZATION] = auth + else: + proxy_req.headers[hdrs.PROXY_AUTHORIZATION] = auth + + if req.is_ssl(): + sslcontext = self._get_ssl_context(req) + # For HTTPS requests over HTTP proxy + # we must notify proxy to tunnel connection + # so we send CONNECT command: + # CONNECT www.python.org:443 HTTP/1.1 + # Host: www.python.org + # + # next we must do TLS handshake and so on + # to do this we must wrap raw socket into secure one + # asyncio handles this perfectly + proxy_req.method = hdrs.METH_CONNECT + proxy_req.url = req.url + key = attr.evolve(req.connection_key, + proxy=None, + proxy_auth=None, + proxy_headers_hash=None) + conn = Connection(self, key, proto, self._loop) + proxy_resp = await proxy_req.send(conn) + try: + protocol = conn._protocol + assert protocol is not None + protocol.set_response_params() + resp = await proxy_resp.start(conn) + except BaseException: + proxy_resp.close() + conn.close() + raise + else: + conn._protocol = None + conn._transport = None + try: + if resp.status != 200: + message = resp.reason + if message is None: + message = RESPONSES[resp.status][0] + raise ClientHttpProxyError( + proxy_resp.request_info, + resp.history, + status=resp.status, + message=message, + headers=resp.headers) + rawsock = transport.get_extra_info('socket', default=None) + if rawsock is None: + raise RuntimeError( + "Transport does not expose socket instance") + # Duplicate the socket, so now we can close proxy transport + rawsock = rawsock.dup() + finally: + transport.close() + + transport, proto = await self._wrap_create_connection( + self._factory, timeout=timeout, + ssl=sslcontext, sock=rawsock, + server_hostname=req.host, + req=req) + finally: + proxy_resp.close() + + return transport, proto + + +class UnixConnector(BaseConnector): + """Unix socket connector. + + path - Unix socket path. + keepalive_timeout - (optional) Keep-alive timeout. + force_close - Set to True to force close and do reconnect + after each request (and between redirects). + limit - The total number of simultaneous connections. + limit_per_host - Number of simultaneous connections to one host. + loop - Optional event loop. + """ + + def __init__(self, path: str, force_close: bool=False, + keepalive_timeout: Union[object, float, None]=sentinel, + limit: int=100, limit_per_host: int=0, + loop: Optional[asyncio.AbstractEventLoop]=None) -> None: + super().__init__(force_close=force_close, + keepalive_timeout=keepalive_timeout, + limit=limit, limit_per_host=limit_per_host, loop=loop) + self._path = path + + @property + def path(self) -> str: + """Path to unix socket.""" + return self._path + + async def _create_connection(self, req: 'ClientRequest', + traces: List['Trace'], + timeout: 'ClientTimeout') -> ResponseHandler: + try: + with CeilTimeout(timeout.sock_connect): + _, proto = await self._loop.create_unix_connection( + self._factory, self._path) + except OSError as exc: + raise ClientConnectorError(req.connection_key, exc) from exc + + return cast(ResponseHandler, proto) + + +class NamedPipeConnector(BaseConnector): + """Named pipe connector. + + Only supported by the proactor event loop. + See also: https://docs.python.org/3.7/library/asyncio-eventloop.html + + path - Windows named pipe path. + keepalive_timeout - (optional) Keep-alive timeout. + force_close - Set to True to force close and do reconnect + after each request (and between redirects). + limit - The total number of simultaneous connections. + limit_per_host - Number of simultaneous connections to one host. + loop - Optional event loop. + """ + + def __init__(self, path: str, force_close: bool=False, + keepalive_timeout: Union[object, float, None]=sentinel, + limit: int=100, limit_per_host: int=0, + loop: Optional[asyncio.AbstractEventLoop]=None) -> None: + super().__init__(force_close=force_close, + keepalive_timeout=keepalive_timeout, + limit=limit, limit_per_host=limit_per_host, loop=loop) + if not isinstance(self._loop, asyncio.ProactorEventLoop): # type: ignore # noqa + raise RuntimeError("Named Pipes only available in proactor " + "loop under windows") + self._path = path + + @property + def path(self) -> str: + """Path to the named pipe.""" + return self._path + + async def _create_connection(self, req: 'ClientRequest', + traces: List['Trace'], + timeout: 'ClientTimeout') -> ResponseHandler: + try: + with CeilTimeout(timeout.sock_connect): + _, proto = await self._loop.create_pipe_connection( # type: ignore # noqa + self._factory, self._path + ) + # the drain is required so that the connection_made is called + # and transport is set otherwise it is not set before the + # `assert conn.transport is not None` + # in client.py's _request method + await asyncio.sleep(0) + # other option is to manually set transport like + # `proto.transport = trans` + except OSError as exc: + raise ClientConnectorError(req.connection_key, exc) from exc + + return cast(ResponseHandler, proto) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/cookiejar.py b/venv-linux/lib/python3.6/site-packages/aiohttp/cookiejar.py new file mode 100644 index 0000000..160fa22 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/cookiejar.py @@ -0,0 +1,368 @@ +import asyncio +import datetime +import os # noqa +import pathlib +import pickle +import re +from collections import defaultdict +from http.cookies import BaseCookie, Morsel, SimpleCookie # noqa +from typing import ( # noqa + DefaultDict, + Dict, + Iterable, + Iterator, + Mapping, + Optional, + Set, + Tuple, + Union, + cast, +) + +from yarl import URL + +from .abc import AbstractCookieJar +from .helpers import is_ip_address, next_whole_second +from .typedefs import LooseCookies, PathLike + +__all__ = ('CookieJar', 'DummyCookieJar') + + +CookieItem = Union[str, 'Morsel[str]'] + + +class CookieJar(AbstractCookieJar): + """Implements cookie storage adhering to RFC 6265.""" + + DATE_TOKENS_RE = re.compile( + r"[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]*" + r"(?P[\x00-\x08\x0A-\x1F\d:a-zA-Z\x7F-\xFF]+)") + + DATE_HMS_TIME_RE = re.compile(r"(\d{1,2}):(\d{1,2}):(\d{1,2})") + + DATE_DAY_OF_MONTH_RE = re.compile(r"(\d{1,2})") + + DATE_MONTH_RE = re.compile("(jan)|(feb)|(mar)|(apr)|(may)|(jun)|(jul)|" + "(aug)|(sep)|(oct)|(nov)|(dec)", re.I) + + DATE_YEAR_RE = re.compile(r"(\d{2,4})") + + MAX_TIME = datetime.datetime.max.replace( + tzinfo=datetime.timezone.utc) + + def __init__(self, *, unsafe: bool=False, + loop: Optional[asyncio.AbstractEventLoop]=None) -> None: + super().__init__(loop=loop) + self._cookies = defaultdict(SimpleCookie) #type: DefaultDict[str, SimpleCookie] # noqa + self._host_only_cookies = set() # type: Set[Tuple[str, str]] + self._unsafe = unsafe + self._next_expiration = next_whole_second() + self._expirations = {} # type: Dict[Tuple[str, str], datetime.datetime] # noqa: E501 + + def save(self, file_path: PathLike) -> None: + file_path = pathlib.Path(file_path) + with file_path.open(mode='wb') as f: + pickle.dump(self._cookies, f, pickle.HIGHEST_PROTOCOL) + + def load(self, file_path: PathLike) -> None: + file_path = pathlib.Path(file_path) + with file_path.open(mode='rb') as f: + self._cookies = pickle.load(f) + + def clear(self) -> None: + self._cookies.clear() + self._host_only_cookies.clear() + self._next_expiration = next_whole_second() + self._expirations.clear() + + def __iter__(self) -> 'Iterator[Morsel[str]]': + self._do_expiration() + for val in self._cookies.values(): + yield from val.values() + + def __len__(self) -> int: + return sum(1 for i in self) + + def _do_expiration(self) -> None: + now = datetime.datetime.now(datetime.timezone.utc) + if self._next_expiration > now: + return + if not self._expirations: + return + next_expiration = self.MAX_TIME + to_del = [] + cookies = self._cookies + expirations = self._expirations + for (domain, name), when in expirations.items(): + if when <= now: + cookies[domain].pop(name, None) + to_del.append((domain, name)) + self._host_only_cookies.discard((domain, name)) + else: + next_expiration = min(next_expiration, when) + for key in to_del: + del expirations[key] + + try: + self._next_expiration = (next_expiration.replace(microsecond=0) + + datetime.timedelta(seconds=1)) + except OverflowError: + self._next_expiration = self.MAX_TIME + + def _expire_cookie(self, when: datetime.datetime, domain: str, name: str + ) -> None: + self._next_expiration = min(self._next_expiration, when) + self._expirations[(domain, name)] = when + + def update_cookies(self, + cookies: LooseCookies, + response_url: URL=URL()) -> None: + """Update cookies.""" + hostname = response_url.raw_host + + if not self._unsafe and is_ip_address(hostname): + # Don't accept cookies from IPs + return + + if isinstance(cookies, Mapping): + cookies = cookies.items() # type: ignore + + for name, cookie in cookies: + if not isinstance(cookie, Morsel): + tmp = SimpleCookie() + tmp[name] = cookie # type: ignore + cookie = tmp[name] + + domain = cookie["domain"] + + # ignore domains with trailing dots + if domain.endswith('.'): + domain = "" + del cookie["domain"] + + if not domain and hostname is not None: + # Set the cookie's domain to the response hostname + # and set its host-only-flag + self._host_only_cookies.add((hostname, name)) + domain = cookie["domain"] = hostname + + if domain.startswith("."): + # Remove leading dot + domain = domain[1:] + cookie["domain"] = domain + + if hostname and not self._is_domain_match(domain, hostname): + # Setting cookies for different domains is not allowed + continue + + path = cookie["path"] + if not path or not path.startswith("/"): + # Set the cookie's path to the response path + path = response_url.path + if not path.startswith("/"): + path = "/" + else: + # Cut everything from the last slash to the end + path = "/" + path[1:path.rfind("/")] + cookie["path"] = path + + max_age = cookie["max-age"] + if max_age: + try: + delta_seconds = int(max_age) + try: + max_age_expiration = ( + datetime.datetime.now(datetime.timezone.utc) + + datetime.timedelta(seconds=delta_seconds)) + except OverflowError: + max_age_expiration = self.MAX_TIME + self._expire_cookie(max_age_expiration, + domain, name) + except ValueError: + cookie["max-age"] = "" + + else: + expires = cookie["expires"] + if expires: + expire_time = self._parse_date(expires) + if expire_time: + self._expire_cookie(expire_time, + domain, name) + else: + cookie["expires"] = "" + + self._cookies[domain][name] = cookie + + self._do_expiration() + + def filter_cookies(self, request_url: URL=URL()) -> 'BaseCookie[str]': + """Returns this jar's cookies filtered by their attributes.""" + self._do_expiration() + request_url = URL(request_url) + filtered = SimpleCookie() + hostname = request_url.raw_host or "" + is_not_secure = request_url.scheme not in ("https", "wss") + + for cookie in self: + name = cookie.key + domain = cookie["domain"] + + # Send shared cookies + if not domain: + filtered[name] = cookie.value + continue + + if not self._unsafe and is_ip_address(hostname): + continue + + if (domain, name) in self._host_only_cookies: + if domain != hostname: + continue + elif not self._is_domain_match(domain, hostname): + continue + + if not self._is_path_match(request_url.path, cookie["path"]): + continue + + if is_not_secure and cookie["secure"]: + continue + + # It's critical we use the Morsel so the coded_value + # (based on cookie version) is preserved + mrsl_val = cast('Morsel[str]', cookie.get(cookie.key, Morsel())) + mrsl_val.set(cookie.key, cookie.value, cookie.coded_value) + filtered[name] = mrsl_val + + return filtered + + @staticmethod + def _is_domain_match(domain: str, hostname: str) -> bool: + """Implements domain matching adhering to RFC 6265.""" + if hostname == domain: + return True + + if not hostname.endswith(domain): + return False + + non_matching = hostname[:-len(domain)] + + if not non_matching.endswith("."): + return False + + return not is_ip_address(hostname) + + @staticmethod + def _is_path_match(req_path: str, cookie_path: str) -> bool: + """Implements path matching adhering to RFC 6265.""" + if not req_path.startswith("/"): + req_path = "/" + + if req_path == cookie_path: + return True + + if not req_path.startswith(cookie_path): + return False + + if cookie_path.endswith("/"): + return True + + non_matching = req_path[len(cookie_path):] + + return non_matching.startswith("/") + + @classmethod + def _parse_date(cls, date_str: str) -> Optional[datetime.datetime]: + """Implements date string parsing adhering to RFC 6265.""" + if not date_str: + return None + + found_time = False + found_day = False + found_month = False + found_year = False + + hour = minute = second = 0 + day = 0 + month = 0 + year = 0 + + for token_match in cls.DATE_TOKENS_RE.finditer(date_str): + + token = token_match.group("token") + + if not found_time: + time_match = cls.DATE_HMS_TIME_RE.match(token) + if time_match: + found_time = True + hour, minute, second = [ + int(s) for s in time_match.groups()] + continue + + if not found_day: + day_match = cls.DATE_DAY_OF_MONTH_RE.match(token) + if day_match: + found_day = True + day = int(day_match.group()) + continue + + if not found_month: + month_match = cls.DATE_MONTH_RE.match(token) + if month_match: + found_month = True + assert month_match.lastindex is not None + month = month_match.lastindex + continue + + if not found_year: + year_match = cls.DATE_YEAR_RE.match(token) + if year_match: + found_year = True + year = int(year_match.group()) + + if 70 <= year <= 99: + year += 1900 + elif 0 <= year <= 69: + year += 2000 + + if False in (found_day, found_month, found_year, found_time): + return None + + if not 1 <= day <= 31: + return None + + if year < 1601 or hour > 23 or minute > 59 or second > 59: + return None + + return datetime.datetime(year, month, day, + hour, minute, second, + tzinfo=datetime.timezone.utc) + + +class DummyCookieJar(AbstractCookieJar): + """Implements a dummy cookie storage. + + It can be used with the ClientSession when no cookie processing is needed. + + """ + + def __init__(self, *, + loop: Optional[asyncio.AbstractEventLoop]=None) -> None: + super().__init__(loop=loop) + + def __iter__(self) -> 'Iterator[Morsel[str]]': + while False: + yield None + + def __len__(self) -> int: + return 0 + + def clear(self) -> None: + pass + + def update_cookies(self, + cookies: LooseCookies, + response_url: URL=URL()) -> None: + pass + + def filter_cookies(self, request_url: URL) -> 'BaseCookie[str]': + return SimpleCookie() diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/formdata.py b/venv-linux/lib/python3.6/site-packages/aiohttp/formdata.py new file mode 100644 index 0000000..b4ffa04 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/formdata.py @@ -0,0 +1,150 @@ +import io +from typing import Any, Iterable, List, Optional # noqa +from urllib.parse import urlencode + +from multidict import MultiDict, MultiDictProxy + +from . import hdrs, multipart, payload +from .helpers import guess_filename +from .payload import Payload + +__all__ = ('FormData',) + + +class FormData: + """Helper class for multipart/form-data and + application/x-www-form-urlencoded body generation.""" + + def __init__(self, fields: + Iterable[Any]=(), + quote_fields: bool=True, + charset: Optional[str]=None) -> None: + self._writer = multipart.MultipartWriter('form-data') + self._fields = [] # type: List[Any] + self._is_multipart = False + self._quote_fields = quote_fields + self._charset = charset + + if isinstance(fields, dict): + fields = list(fields.items()) + elif not isinstance(fields, (list, tuple)): + fields = (fields,) + self.add_fields(*fields) + + @property + def is_multipart(self) -> bool: + return self._is_multipart + + def add_field(self, name: str, value: Any, *, + content_type: Optional[str]=None, + filename: Optional[str]=None, + content_transfer_encoding: Optional[str]=None) -> None: + + if isinstance(value, io.IOBase): + self._is_multipart = True + elif isinstance(value, (bytes, bytearray, memoryview)): + if filename is None and content_transfer_encoding is None: + filename = name + + type_options = MultiDict({'name': name}) + if filename is not None and not isinstance(filename, str): + raise TypeError('filename must be an instance of str. ' + 'Got: %s' % filename) + if filename is None and isinstance(value, io.IOBase): + filename = guess_filename(value, name) + if filename is not None: + type_options['filename'] = filename + self._is_multipart = True + + headers = {} + if content_type is not None: + if not isinstance(content_type, str): + raise TypeError('content_type must be an instance of str. ' + 'Got: %s' % content_type) + headers[hdrs.CONTENT_TYPE] = content_type + self._is_multipart = True + if content_transfer_encoding is not None: + if not isinstance(content_transfer_encoding, str): + raise TypeError('content_transfer_encoding must be an instance' + ' of str. Got: %s' % content_transfer_encoding) + headers[hdrs.CONTENT_TRANSFER_ENCODING] = content_transfer_encoding + self._is_multipart = True + + self._fields.append((type_options, headers, value)) + + def add_fields(self, *fields: Any) -> None: + to_add = list(fields) + + while to_add: + rec = to_add.pop(0) + + if isinstance(rec, io.IOBase): + k = guess_filename(rec, 'unknown') + self.add_field(k, rec) # type: ignore + + elif isinstance(rec, (MultiDictProxy, MultiDict)): + to_add.extend(rec.items()) + + elif isinstance(rec, (list, tuple)) and len(rec) == 2: + k, fp = rec + self.add_field(k, fp) # type: ignore + + else: + raise TypeError('Only io.IOBase, multidict and (name, file) ' + 'pairs allowed, use .add_field() for passing ' + 'more complex parameters, got {!r}' + .format(rec)) + + def _gen_form_urlencoded(self) -> payload.BytesPayload: + # form data (x-www-form-urlencoded) + data = [] + for type_options, _, value in self._fields: + data.append((type_options['name'], value)) + + charset = self._charset if self._charset is not None else 'utf-8' + + if charset == 'utf-8': + content_type = 'application/x-www-form-urlencoded' + else: + content_type = ('application/x-www-form-urlencoded; ' + 'charset=%s' % charset) + + return payload.BytesPayload( + urlencode(data, doseq=True, encoding=charset).encode(), + content_type=content_type) + + def _gen_form_data(self) -> multipart.MultipartWriter: + """Encode a list of fields using the multipart/form-data MIME format""" + for dispparams, headers, value in self._fields: + try: + if hdrs.CONTENT_TYPE in headers: + part = payload.get_payload( + value, content_type=headers[hdrs.CONTENT_TYPE], + headers=headers, encoding=self._charset) + else: + part = payload.get_payload( + value, headers=headers, encoding=self._charset) + except Exception as exc: + raise TypeError( + 'Can not serialize value type: %r\n ' + 'headers: %r\n value: %r' % ( + type(value), headers, value)) from exc + + if dispparams: + part.set_content_disposition( + 'form-data', quote_fields=self._quote_fields, **dispparams + ) + # FIXME cgi.FieldStorage doesn't likes body parts with + # Content-Length which were sent via chunked transfer encoding + assert part.headers is not None + part.headers.popall(hdrs.CONTENT_LENGTH, None) + + self._writer.append_payload(part) + + return self._writer + + def __call__(self) -> Payload: + if self._is_multipart: + return self._gen_form_data() + else: + return self._gen_form_urlencoded() diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/frozenlist.py b/venv-linux/lib/python3.6/site-packages/aiohttp/frozenlist.py new file mode 100644 index 0000000..2aaea64 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/frozenlist.py @@ -0,0 +1,72 @@ +from collections.abc import MutableSequence +from functools import total_ordering + +from .helpers import NO_EXTENSIONS + + +@total_ordering +class FrozenList(MutableSequence): + + __slots__ = ('_frozen', '_items') + + def __init__(self, items=None): + self._frozen = False + if items is not None: + items = list(items) + else: + items = [] + self._items = items + + @property + def frozen(self): + return self._frozen + + def freeze(self): + self._frozen = True + + def __getitem__(self, index): + return self._items[index] + + def __setitem__(self, index, value): + if self._frozen: + raise RuntimeError("Cannot modify frozen list.") + self._items[index] = value + + def __delitem__(self, index): + if self._frozen: + raise RuntimeError("Cannot modify frozen list.") + del self._items[index] + + def __len__(self): + return self._items.__len__() + + def __iter__(self): + return self._items.__iter__() + + def __reversed__(self): + return self._items.__reversed__() + + def __eq__(self, other): + return list(self) == other + + def __le__(self, other): + return list(self) <= other + + def insert(self, pos, item): + if self._frozen: + raise RuntimeError("Cannot modify frozen list.") + self._items.insert(pos, item) + + def __repr__(self): + return ''.format(self._frozen, + self._items) + + +PyFrozenList = FrozenList + +try: + from aiohttp._frozenlist import FrozenList as CFrozenList # type: ignore + if not NO_EXTENSIONS: + FrozenList = CFrozenList # type: ignore +except ImportError: # pragma: no cover + pass diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/frozenlist.pyi b/venv-linux/lib/python3.6/site-packages/aiohttp/frozenlist.pyi new file mode 100644 index 0000000..81ca25c --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/frozenlist.pyi @@ -0,0 +1,63 @@ +from typing import ( + Generic, + Iterable, + Iterator, + List, + MutableSequence, + Optional, + TypeVar, + Union, + overload, +) + +_T = TypeVar('_T') +_Arg = Union[List[_T], Iterable[_T]] + + +class FrozenList(MutableSequence[_T], Generic[_T]): + + def __init__(self, items: Optional[_Arg[_T]]=...) -> None: ... + + @property + def frozen(self) -> bool: ... + + def freeze(self) -> None: ... + + @overload + def __getitem__(self, i: int) -> _T: ... + + @overload + def __getitem__(self, s: slice) -> FrozenList[_T]: ... + + @overload + def __setitem__(self, i: int, o: _T) -> None: ... + + @overload + def __setitem__(self, s: slice, o: Iterable[_T]) -> None: ... + + @overload + def __delitem__(self, i: int) -> None: ... + + @overload + def __delitem__(self, i: slice) -> None: ... + + def __len__(self) -> int: ... + + def __iter__(self) -> Iterator[_T]: ... + + def __reversed__(self) -> Iterator[_T]: ... + + def __eq__(self, other: object) -> bool: ... + def __le__(self, other: FrozenList[_T]) -> bool: ... + def __ne__(self, other: object) -> bool: ... + def __lt__(self, other: FrozenList[_T]) -> bool: ... + def __ge__(self, other: FrozenList[_T]) -> bool: ... + def __gt__(self, other: FrozenList[_T]) -> bool: ... + + def insert(self, pos: int, item: _T) -> None: ... + + def __repr__(self) -> str: ... + + +# types for C accelerators are the same +CFrozenList = PyFrozenList = FrozenList diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/hdrs.py b/venv-linux/lib/python3.6/site-packages/aiohttp/hdrs.py new file mode 100644 index 0000000..c11a9d3 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/hdrs.py @@ -0,0 +1,100 @@ +"""HTTP Headers constants.""" + +# After changing the file content call ./tools/gen.py +# to regenerate the headers parser + +from multidict import istr + +METH_ANY = '*' +METH_CONNECT = 'CONNECT' +METH_HEAD = 'HEAD' +METH_GET = 'GET' +METH_DELETE = 'DELETE' +METH_OPTIONS = 'OPTIONS' +METH_PATCH = 'PATCH' +METH_POST = 'POST' +METH_PUT = 'PUT' +METH_TRACE = 'TRACE' + +METH_ALL = {METH_CONNECT, METH_HEAD, METH_GET, METH_DELETE, + METH_OPTIONS, METH_PATCH, METH_POST, METH_PUT, METH_TRACE} + + +ACCEPT = istr('Accept') +ACCEPT_CHARSET = istr('Accept-Charset') +ACCEPT_ENCODING = istr('Accept-Encoding') +ACCEPT_LANGUAGE = istr('Accept-Language') +ACCEPT_RANGES = istr('Accept-Ranges') +ACCESS_CONTROL_MAX_AGE = istr('Access-Control-Max-Age') +ACCESS_CONTROL_ALLOW_CREDENTIALS = istr('Access-Control-Allow-Credentials') +ACCESS_CONTROL_ALLOW_HEADERS = istr('Access-Control-Allow-Headers') +ACCESS_CONTROL_ALLOW_METHODS = istr('Access-Control-Allow-Methods') +ACCESS_CONTROL_ALLOW_ORIGIN = istr('Access-Control-Allow-Origin') +ACCESS_CONTROL_EXPOSE_HEADERS = istr('Access-Control-Expose-Headers') +ACCESS_CONTROL_REQUEST_HEADERS = istr('Access-Control-Request-Headers') +ACCESS_CONTROL_REQUEST_METHOD = istr('Access-Control-Request-Method') +AGE = istr('Age') +ALLOW = istr('Allow') +AUTHORIZATION = istr('Authorization') +CACHE_CONTROL = istr('Cache-Control') +CONNECTION = istr('Connection') +CONTENT_DISPOSITION = istr('Content-Disposition') +CONTENT_ENCODING = istr('Content-Encoding') +CONTENT_LANGUAGE = istr('Content-Language') +CONTENT_LENGTH = istr('Content-Length') +CONTENT_LOCATION = istr('Content-Location') +CONTENT_MD5 = istr('Content-MD5') +CONTENT_RANGE = istr('Content-Range') +CONTENT_TRANSFER_ENCODING = istr('Content-Transfer-Encoding') +CONTENT_TYPE = istr('Content-Type') +COOKIE = istr('Cookie') +DATE = istr('Date') +DESTINATION = istr('Destination') +DIGEST = istr('Digest') +ETAG = istr('Etag') +EXPECT = istr('Expect') +EXPIRES = istr('Expires') +FORWARDED = istr('Forwarded') +FROM = istr('From') +HOST = istr('Host') +IF_MATCH = istr('If-Match') +IF_MODIFIED_SINCE = istr('If-Modified-Since') +IF_NONE_MATCH = istr('If-None-Match') +IF_RANGE = istr('If-Range') +IF_UNMODIFIED_SINCE = istr('If-Unmodified-Since') +KEEP_ALIVE = istr('Keep-Alive') +LAST_EVENT_ID = istr('Last-Event-ID') +LAST_MODIFIED = istr('Last-Modified') +LINK = istr('Link') +LOCATION = istr('Location') +MAX_FORWARDS = istr('Max-Forwards') +ORIGIN = istr('Origin') +PRAGMA = istr('Pragma') +PROXY_AUTHENTICATE = istr('Proxy-Authenticate') +PROXY_AUTHORIZATION = istr('Proxy-Authorization') +RANGE = istr('Range') +REFERER = istr('Referer') +RETRY_AFTER = istr('Retry-After') +SEC_WEBSOCKET_ACCEPT = istr('Sec-WebSocket-Accept') +SEC_WEBSOCKET_VERSION = istr('Sec-WebSocket-Version') +SEC_WEBSOCKET_PROTOCOL = istr('Sec-WebSocket-Protocol') +SEC_WEBSOCKET_EXTENSIONS = istr('Sec-WebSocket-Extensions') +SEC_WEBSOCKET_KEY = istr('Sec-WebSocket-Key') +SEC_WEBSOCKET_KEY1 = istr('Sec-WebSocket-Key1') +SERVER = istr('Server') +SET_COOKIE = istr('Set-Cookie') +TE = istr('TE') +TRAILER = istr('Trailer') +TRANSFER_ENCODING = istr('Transfer-Encoding') +UPGRADE = istr('Upgrade') +WEBSOCKET = istr('WebSocket') +URI = istr('URI') +USER_AGENT = istr('User-Agent') +VARY = istr('Vary') +VIA = istr('Via') +WANT_DIGEST = istr('Want-Digest') +WARNING = istr('Warning') +WWW_AUTHENTICATE = istr('WWW-Authenticate') +X_FORWARDED_FOR = istr('X-Forwarded-For') +X_FORWARDED_HOST = istr('X-Forwarded-Host') +X_FORWARDED_PROTO = istr('X-Forwarded-Proto') diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/helpers.py b/venv-linux/lib/python3.6/site-packages/aiohttp/helpers.py new file mode 100644 index 0000000..5277f52 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/helpers.py @@ -0,0 +1,715 @@ +"""Various helper functions""" + +import asyncio +import base64 +import binascii +import cgi +import datetime +import functools +import inspect +import netrc +import os +import platform +import re +import sys +import time +import warnings +import weakref +from collections import namedtuple +from contextlib import suppress +from math import ceil +from pathlib import Path +from types import TracebackType +from typing import ( # noqa + Any, + Callable, + Dict, + Iterable, + Iterator, + List, + Mapping, + Optional, + Pattern, + Set, + Tuple, + Type, + TypeVar, + Union, + cast, +) +from urllib.parse import quote +from urllib.request import getproxies + +import async_timeout +import attr +from multidict import MultiDict, MultiDictProxy +from yarl import URL + +from . import hdrs +from .log import client_logger, internal_logger +from .typedefs import PathLike # noqa + +__all__ = ('BasicAuth', 'ChainMapProxy') + +PY_36 = sys.version_info >= (3, 6) +PY_37 = sys.version_info >= (3, 7) +PY_38 = sys.version_info >= (3, 8) + +if not PY_37: + import idna_ssl + idna_ssl.patch_match_hostname() + +try: + from typing import ContextManager +except ImportError: + from typing_extensions import ContextManager + + +def all_tasks( + loop: Optional[asyncio.AbstractEventLoop] = None +) -> Set['asyncio.Task[Any]']: + tasks = list(asyncio.Task.all_tasks(loop)) + return {t for t in tasks if not t.done()} + + +if PY_37: + all_tasks = getattr(asyncio, 'all_tasks') # noqa + + +_T = TypeVar('_T') + + +sentinel = object() # type: Any +NO_EXTENSIONS = bool(os.environ.get('AIOHTTP_NO_EXTENSIONS')) # type: bool + +# N.B. sys.flags.dev_mode is available on Python 3.7+, use getattr +# for compatibility with older versions +DEBUG = (getattr(sys.flags, 'dev_mode', False) or + (not sys.flags.ignore_environment and + bool(os.environ.get('PYTHONASYNCIODEBUG')))) # type: bool + + +CHAR = set(chr(i) for i in range(0, 128)) +CTL = set(chr(i) for i in range(0, 32)) | {chr(127), } +SEPARATORS = {'(', ')', '<', '>', '@', ',', ';', ':', '\\', '"', '/', '[', ']', + '?', '=', '{', '}', ' ', chr(9)} +TOKEN = CHAR ^ CTL ^ SEPARATORS + + +coroutines = asyncio.coroutines +old_debug = coroutines._DEBUG # type: ignore + +# prevent "coroutine noop was never awaited" warning. +coroutines._DEBUG = False # type: ignore + + +@asyncio.coroutine +def noop(*args, **kwargs): # type: ignore + return # type: ignore + + +async def noop2(*args: Any, **kwargs: Any) -> None: + return + + +coroutines._DEBUG = old_debug # type: ignore + + +class BasicAuth(namedtuple('BasicAuth', ['login', 'password', 'encoding'])): + """Http basic authentication helper.""" + + def __new__(cls, login: str, + password: str='', + encoding: str='latin1') -> 'BasicAuth': + if login is None: + raise ValueError('None is not allowed as login value') + + if password is None: + raise ValueError('None is not allowed as password value') + + if ':' in login: + raise ValueError( + 'A ":" is not allowed in login (RFC 1945#section-11.1)') + + return super().__new__(cls, login, password, encoding) + + @classmethod + def decode(cls, auth_header: str, encoding: str='latin1') -> 'BasicAuth': + """Create a BasicAuth object from an Authorization HTTP header.""" + try: + auth_type, encoded_credentials = auth_header.split(' ', 1) + except ValueError: + raise ValueError('Could not parse authorization header.') + + if auth_type.lower() != 'basic': + raise ValueError('Unknown authorization method %s' % auth_type) + + try: + decoded = base64.b64decode( + encoded_credentials.encode('ascii'), validate=True + ).decode(encoding) + except binascii.Error: + raise ValueError('Invalid base64 encoding.') + + try: + # RFC 2617 HTTP Authentication + # https://www.ietf.org/rfc/rfc2617.txt + # the colon must be present, but the username and password may be + # otherwise blank. + username, password = decoded.split(':', 1) + except ValueError: + raise ValueError('Invalid credentials.') + + return cls(username, password, encoding=encoding) + + @classmethod + def from_url(cls, url: URL, + *, encoding: str='latin1') -> Optional['BasicAuth']: + """Create BasicAuth from url.""" + if not isinstance(url, URL): + raise TypeError("url should be yarl.URL instance") + if url.user is None: + return None + return cls(url.user, url.password or '', encoding=encoding) + + def encode(self) -> str: + """Encode credentials.""" + creds = ('%s:%s' % (self.login, self.password)).encode(self.encoding) + return 'Basic %s' % base64.b64encode(creds).decode(self.encoding) + + +def strip_auth_from_url(url: URL) -> Tuple[URL, Optional[BasicAuth]]: + auth = BasicAuth.from_url(url) + if auth is None: + return url, None + else: + return url.with_user(None), auth + + +def netrc_from_env() -> Optional[netrc.netrc]: + """Attempt to load the netrc file from the path specified by the env-var + NETRC or in the default location in the user's home directory. + + Returns None if it couldn't be found or fails to parse. + """ + netrc_env = os.environ.get('NETRC') + + if netrc_env is not None: + netrc_path = Path(netrc_env) + else: + try: + home_dir = Path.home() + except RuntimeError as e: # pragma: no cover + # if pathlib can't resolve home, it may raise a RuntimeError + client_logger.debug('Could not resolve home directory when ' + 'trying to look for .netrc file: %s', e) + return None + + netrc_path = home_dir / ( + '_netrc' if platform.system() == 'Windows' else '.netrc') + + try: + return netrc.netrc(str(netrc_path)) + except netrc.NetrcParseError as e: + client_logger.warning('Could not parse .netrc file: %s', e) + except OSError as e: + # we couldn't read the file (doesn't exist, permissions, etc.) + if netrc_env or netrc_path.is_file(): + # only warn if the environment wanted us to load it, + # or it appears like the default file does actually exist + client_logger.warning('Could not read .netrc file: %s', e) + + return None + + +@attr.s(frozen=True, slots=True) +class ProxyInfo: + proxy = attr.ib(type=URL) + proxy_auth = attr.ib(type=Optional[BasicAuth]) + + +def proxies_from_env() -> Dict[str, ProxyInfo]: + proxy_urls = {k: URL(v) for k, v in getproxies().items() + if k in ('http', 'https')} + netrc_obj = netrc_from_env() + stripped = {k: strip_auth_from_url(v) for k, v in proxy_urls.items()} + ret = {} + for proto, val in stripped.items(): + proxy, auth = val + if proxy.scheme == 'https': + client_logger.warning( + "HTTPS proxies %s are not supported, ignoring", proxy) + continue + if netrc_obj and auth is None: + auth_from_netrc = None + if proxy.host is not None: + auth_from_netrc = netrc_obj.authenticators(proxy.host) + if auth_from_netrc is not None: + # auth_from_netrc is a (`user`, `account`, `password`) tuple, + # `user` and `account` both can be username, + # if `user` is None, use `account` + *logins, password = auth_from_netrc + login = logins[0] if logins[0] else logins[-1] + auth = BasicAuth(cast(str, login), cast(str, password)) + ret[proto] = ProxyInfo(proxy, auth) + return ret + + +def current_task(loop: Optional[asyncio.AbstractEventLoop]=None) -> asyncio.Task: # type: ignore # noqa # Return type is intentionally Generic here + if PY_37: + return asyncio.current_task(loop=loop) # type: ignore + else: + return asyncio.Task.current_task(loop=loop) + + +def get_running_loop( + loop: Optional[asyncio.AbstractEventLoop]=None +) -> asyncio.AbstractEventLoop: + if loop is None: + loop = asyncio.get_event_loop() + if not loop.is_running(): + warnings.warn("The object should be created from async function", + DeprecationWarning, stacklevel=3) + if loop.get_debug(): + internal_logger.warning( + "The object should be created from async function", + stack_info=True) + return loop + + +def isasyncgenfunction(obj: Any) -> bool: + func = getattr(inspect, 'isasyncgenfunction', None) + if func is not None: + return func(obj) + else: + return False + + +@attr.s(frozen=True, slots=True) +class MimeType: + type = attr.ib(type=str) + subtype = attr.ib(type=str) + suffix = attr.ib(type=str) + parameters = attr.ib(type=MultiDictProxy) # type: MultiDictProxy[str] + + +@functools.lru_cache(maxsize=56) +def parse_mimetype(mimetype: str) -> MimeType: + """Parses a MIME type into its components. + + mimetype is a MIME type string. + + Returns a MimeType object. + + Example: + + >>> parse_mimetype('text/html; charset=utf-8') + MimeType(type='text', subtype='html', suffix='', + parameters={'charset': 'utf-8'}) + + """ + if not mimetype: + return MimeType(type='', subtype='', suffix='', + parameters=MultiDictProxy(MultiDict())) + + parts = mimetype.split(';') + params = MultiDict() # type: MultiDict[str] + for item in parts[1:]: + if not item: + continue + key, value = cast(Tuple[str, str], + item.split('=', 1) if '=' in item else (item, '')) + params.add(key.lower().strip(), value.strip(' "')) + + fulltype = parts[0].strip().lower() + if fulltype == '*': + fulltype = '*/*' + + mtype, stype = (cast(Tuple[str, str], fulltype.split('/', 1)) + if '/' in fulltype else (fulltype, '')) + stype, suffix = (cast(Tuple[str, str], stype.split('+', 1)) + if '+' in stype else (stype, '')) + + return MimeType(type=mtype, subtype=stype, suffix=suffix, + parameters=MultiDictProxy(params)) + + +def guess_filename(obj: Any, default: Optional[str]=None) -> Optional[str]: + name = getattr(obj, 'name', None) + if name and isinstance(name, str) and name[0] != '<' and name[-1] != '>': + return Path(name).name + return default + + +def content_disposition_header(disptype: str, + quote_fields: bool=True, + **params: str) -> str: + """Sets ``Content-Disposition`` header. + + disptype is a disposition type: inline, attachment, form-data. + Should be valid extension token (see RFC 2183) + + params is a dict with disposition params. + """ + if not disptype or not (TOKEN > set(disptype)): + raise ValueError('bad content disposition type {!r}' + ''.format(disptype)) + + value = disptype + if params: + lparams = [] + for key, val in params.items(): + if not key or not (TOKEN > set(key)): + raise ValueError('bad content disposition parameter' + ' {!r}={!r}'.format(key, val)) + qval = quote(val, '') if quote_fields else val + lparams.append((key, '"%s"' % qval)) + if key == 'filename': + lparams.append(('filename*', "utf-8''" + qval)) + sparams = '; '.join('='.join(pair) for pair in lparams) + value = '; '.join((value, sparams)) + return value + + +class reify: + """Use as a class method decorator. It operates almost exactly like + the Python `@property` decorator, but it puts the result of the + method it decorates into the instance dict after the first call, + effectively replacing the function it decorates with an instance + variable. It is, in Python parlance, a data descriptor. + + """ + + def __init__(self, wrapped: Callable[..., Any]) -> None: + self.wrapped = wrapped + self.__doc__ = wrapped.__doc__ + self.name = wrapped.__name__ + + def __get__(self, inst: Any, owner: Any) -> Any: + try: + try: + return inst._cache[self.name] + except KeyError: + val = self.wrapped(inst) + inst._cache[self.name] = val + return val + except AttributeError: + if inst is None: + return self + raise + + def __set__(self, inst: Any, value: Any) -> None: + raise AttributeError("reified property is read-only") + + +reify_py = reify + +try: + from ._helpers import reify as reify_c + if not NO_EXTENSIONS: + reify = reify_c # type: ignore +except ImportError: + pass + +_ipv4_pattern = (r'^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}' + r'(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$') +_ipv6_pattern = ( + r'^(?:(?:(?:[A-F0-9]{1,4}:){6}|(?=(?:[A-F0-9]{0,4}:){0,6}' + r'(?:[0-9]{1,3}\.){3}[0-9]{1,3}$)(([0-9A-F]{1,4}:){0,5}|:)' + r'((:[0-9A-F]{1,4}){1,5}:|:)|::(?:[A-F0-9]{1,4}:){5})' + r'(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}' + r'(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])|(?:[A-F0-9]{1,4}:){7}' + r'[A-F0-9]{1,4}|(?=(?:[A-F0-9]{0,4}:){0,7}[A-F0-9]{0,4}$)' + r'(([0-9A-F]{1,4}:){1,7}|:)((:[0-9A-F]{1,4}){1,7}|:)|(?:[A-F0-9]{1,4}:){7}' + r':|:(:[A-F0-9]{1,4}){7})$') +_ipv4_regex = re.compile(_ipv4_pattern) +_ipv6_regex = re.compile(_ipv6_pattern, flags=re.IGNORECASE) +_ipv4_regexb = re.compile(_ipv4_pattern.encode('ascii')) +_ipv6_regexb = re.compile(_ipv6_pattern.encode('ascii'), flags=re.IGNORECASE) + + +def _is_ip_address( + regex: Pattern[str], regexb: Pattern[bytes], + host: Optional[Union[str, bytes]]) -> bool: + if host is None: + return False + if isinstance(host, str): + return bool(regex.match(host)) + elif isinstance(host, (bytes, bytearray, memoryview)): + return bool(regexb.match(host)) + else: + raise TypeError("{} [{}] is not a str or bytes" + .format(host, type(host))) + + +is_ipv4_address = functools.partial(_is_ip_address, _ipv4_regex, _ipv4_regexb) +is_ipv6_address = functools.partial(_is_ip_address, _ipv6_regex, _ipv6_regexb) + + +def is_ip_address( + host: Optional[Union[str, bytes, bytearray, memoryview]]) -> bool: + return is_ipv4_address(host) or is_ipv6_address(host) + + +def next_whole_second() -> datetime.datetime: + """Return current time rounded up to the next whole second.""" + return ( + datetime.datetime.now( + datetime.timezone.utc).replace(microsecond=0) + + datetime.timedelta(seconds=0) + ) + + +_cached_current_datetime = None # type: Optional[int] +_cached_formatted_datetime = "" + + +def rfc822_formatted_time() -> str: + global _cached_current_datetime + global _cached_formatted_datetime + + now = int(time.time()) + if now != _cached_current_datetime: + # Weekday and month names for HTTP date/time formatting; + # always English! + # Tuples are constants stored in codeobject! + _weekdayname = ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun") + _monthname = ("", # Dummy so we can use 1-based month numbers + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") + + year, month, day, hh, mm, ss, wd, *tail = time.gmtime(now) + _cached_formatted_datetime = "%s, %02d %3s %4d %02d:%02d:%02d GMT" % ( + _weekdayname[wd], day, _monthname[month], year, hh, mm, ss + ) + _cached_current_datetime = now + return _cached_formatted_datetime + + +def _weakref_handle(info): # type: ignore + ref, name = info + ob = ref() + if ob is not None: + with suppress(Exception): + getattr(ob, name)() + + +def weakref_handle(ob, name, timeout, loop, ceil_timeout=True): # type: ignore + if timeout is not None and timeout > 0: + when = loop.time() + timeout + if ceil_timeout: + when = ceil(when) + + return loop.call_at(when, _weakref_handle, (weakref.ref(ob), name)) + + +def call_later(cb, timeout, loop): # type: ignore + if timeout is not None and timeout > 0: + when = ceil(loop.time() + timeout) + return loop.call_at(when, cb) + + +class TimeoutHandle: + """ Timeout handle """ + + def __init__(self, + loop: asyncio.AbstractEventLoop, + timeout: Optional[float]) -> None: + self._timeout = timeout + self._loop = loop + self._callbacks = [] # type: List[Tuple[Callable[..., None], Tuple[Any, ...], Dict[str, Any]]] # noqa + + def register(self, callback: Callable[..., None], + *args: Any, **kwargs: Any) -> None: + self._callbacks.append((callback, args, kwargs)) + + def close(self) -> None: + self._callbacks.clear() + + def start(self) -> Optional[asyncio.Handle]: + if self._timeout is not None and self._timeout > 0: + at = ceil(self._loop.time() + self._timeout) + return self._loop.call_at(at, self.__call__) + else: + return None + + def timer(self) -> 'BaseTimerContext': + if self._timeout is not None and self._timeout > 0: + timer = TimerContext(self._loop) + self.register(timer.timeout) + return timer + else: + return TimerNoop() + + def __call__(self) -> None: + for cb, args, kwargs in self._callbacks: + with suppress(Exception): + cb(*args, **kwargs) + + self._callbacks.clear() + + +class BaseTimerContext(ContextManager['BaseTimerContext']): + pass + + +class TimerNoop(BaseTimerContext): + + def __enter__(self) -> BaseTimerContext: + return self + + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> Optional[bool]: + return False + + +class TimerContext(BaseTimerContext): + """ Low resolution timeout context manager """ + + def __init__(self, loop: asyncio.AbstractEventLoop) -> None: + self._loop = loop + self._tasks = [] # type: List[asyncio.Task[Any]] + self._cancelled = False + + def __enter__(self) -> BaseTimerContext: + task = current_task(loop=self._loop) + + if task is None: + raise RuntimeError('Timeout context manager should be used ' + 'inside a task') + + if self._cancelled: + task.cancel() + raise asyncio.TimeoutError from None + + self._tasks.append(task) + return self + + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> Optional[bool]: + if self._tasks: + self._tasks.pop() + + if exc_type is asyncio.CancelledError and self._cancelled: + raise asyncio.TimeoutError from None + return None + + def timeout(self) -> None: + if not self._cancelled: + for task in set(self._tasks): + task.cancel() + + self._cancelled = True + + +class CeilTimeout(async_timeout.timeout): + + def __enter__(self) -> async_timeout.timeout: + if self._timeout is not None: + self._task = current_task(loop=self._loop) + if self._task is None: + raise RuntimeError( + 'Timeout context manager should be used inside a task') + self._cancel_handler = self._loop.call_at( + ceil(self._loop.time() + self._timeout), self._cancel_task) + return self + + +class HeadersMixin: + + ATTRS = frozenset([ + '_content_type', '_content_dict', '_stored_content_type']) + + _content_type = None # type: Optional[str] + _content_dict = None # type: Optional[Dict[str, str]] + _stored_content_type = sentinel + + def _parse_content_type(self, raw: str) -> None: + self._stored_content_type = raw + if raw is None: + # default value according to RFC 2616 + self._content_type = 'application/octet-stream' + self._content_dict = {} + else: + self._content_type, self._content_dict = cgi.parse_header(raw) + + @property + def content_type(self) -> str: + """The value of content part for Content-Type HTTP header.""" + raw = self._headers.get(hdrs.CONTENT_TYPE) # type: ignore + if self._stored_content_type != raw: + self._parse_content_type(raw) + return self._content_type # type: ignore + + @property + def charset(self) -> Optional[str]: + """The value of charset part for Content-Type HTTP header.""" + raw = self._headers.get(hdrs.CONTENT_TYPE) # type: ignore + if self._stored_content_type != raw: + self._parse_content_type(raw) + return self._content_dict.get('charset') # type: ignore + + @property + def content_length(self) -> Optional[int]: + """The value of Content-Length HTTP header.""" + content_length = self._headers.get(hdrs.CONTENT_LENGTH) # type: ignore + + if content_length is not None: + return int(content_length) + else: + return None + + +def set_result(fut: 'asyncio.Future[_T]', result: _T) -> None: + if not fut.done(): + fut.set_result(result) + + +def set_exception(fut: 'asyncio.Future[_T]', exc: BaseException) -> None: + if not fut.done(): + fut.set_exception(exc) + + +class ChainMapProxy(Mapping[str, Any]): + __slots__ = ('_maps',) + + def __init__(self, maps: Iterable[Mapping[str, Any]]) -> None: + self._maps = tuple(maps) + + def __init_subclass__(cls) -> None: + raise TypeError("Inheritance class {} from ChainMapProxy " + "is forbidden".format(cls.__name__)) + + def __getitem__(self, key: str) -> Any: + for mapping in self._maps: + try: + return mapping[key] + except KeyError: + pass + raise KeyError(key) + + def get(self, key: str, default: Any=None) -> Any: + return self[key] if key in self else default + + def __len__(self) -> int: + # reuses stored hash values if possible + return len(set().union(*self._maps)) # type: ignore + + def __iter__(self) -> Iterator[str]: + d = {} # type: Dict[str, Any] + for mapping in reversed(self._maps): + # reuses stored hash values if possible + d.update(mapping) + return iter(d) + + def __contains__(self, key: object) -> bool: + return any(key in m for m in self._maps) + + def __bool__(self) -> bool: + return any(self._maps) + + def __repr__(self) -> str: + content = ", ".join(map(repr, self._maps)) + return 'ChainMapProxy({})'.format(content) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/http.py b/venv-linux/lib/python3.6/site-packages/aiohttp/http.py new file mode 100644 index 0000000..5f8109c --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/http.py @@ -0,0 +1,50 @@ +import http.server +import sys +from typing import Mapping, Tuple # noqa + +from . import __version__ +from .http_exceptions import HttpProcessingError as HttpProcessingError +from .http_parser import HeadersParser as HeadersParser +from .http_parser import HttpParser as HttpParser +from .http_parser import HttpRequestParser as HttpRequestParser +from .http_parser import HttpResponseParser as HttpResponseParser +from .http_parser import RawRequestMessage as RawRequestMessage +from .http_parser import RawResponseMessage as RawResponseMessage +from .http_websocket import WS_CLOSED_MESSAGE as WS_CLOSED_MESSAGE +from .http_websocket import WS_CLOSING_MESSAGE as WS_CLOSING_MESSAGE +from .http_websocket import WS_KEY as WS_KEY +from .http_websocket import WebSocketError as WebSocketError +from .http_websocket import WebSocketReader as WebSocketReader +from .http_websocket import WebSocketWriter as WebSocketWriter +from .http_websocket import WSCloseCode as WSCloseCode +from .http_websocket import WSMessage as WSMessage +from .http_websocket import WSMsgType as WSMsgType +from .http_websocket import ws_ext_gen as ws_ext_gen +from .http_websocket import ws_ext_parse as ws_ext_parse +from .http_writer import HttpVersion as HttpVersion +from .http_writer import HttpVersion10 as HttpVersion10 +from .http_writer import HttpVersion11 as HttpVersion11 +from .http_writer import StreamWriter as StreamWriter + +__all__ = ( + 'HttpProcessingError', 'RESPONSES', 'SERVER_SOFTWARE', + + # .http_writer + 'StreamWriter', 'HttpVersion', 'HttpVersion10', 'HttpVersion11', + + # .http_parser + 'HeadersParser', 'HttpParser', + 'HttpRequestParser', 'HttpResponseParser', + 'RawRequestMessage', 'RawResponseMessage', + + # .http_websocket + 'WS_CLOSED_MESSAGE', 'WS_CLOSING_MESSAGE', 'WS_KEY', + 'WebSocketReader', 'WebSocketWriter', 'ws_ext_gen', 'ws_ext_parse', + 'WSMessage', 'WebSocketError', 'WSMsgType', 'WSCloseCode', +) + + +SERVER_SOFTWARE = 'Python/{0[0]}.{0[1]} aiohttp/{1}'.format( + sys.version_info, __version__) # type: str + +RESPONSES = http.server.BaseHTTPRequestHandler.responses # type: Mapping[int, Tuple[str, str]] # noqa diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/http_exceptions.py b/venv-linux/lib/python3.6/site-packages/aiohttp/http_exceptions.py new file mode 100644 index 0000000..3c8b0d8 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/http_exceptions.py @@ -0,0 +1,108 @@ +"""Low-level http related exceptions.""" + + +from typing import Optional, Union + +from .typedefs import _CIMultiDict + +__all__ = ('HttpProcessingError',) + + +class HttpProcessingError(Exception): + """HTTP error. + + Shortcut for raising HTTP errors with custom code, message and headers. + + code: HTTP Error code. + message: (optional) Error message. + headers: (optional) Headers to be sent in response, a list of pairs + """ + + code = 0 + message = '' + headers = None + + def __init__(self, *, + code: Optional[int]=None, + message: str='', + headers: Optional[_CIMultiDict]=None) -> None: + if code is not None: + self.code = code + self.headers = headers + self.message = message + + def __str__(self) -> str: + return "%s, message=%r" % (self.code, self.message) + + def __repr__(self) -> str: + return "<%s: %s>" % (self.__class__.__name__, self) + + +class BadHttpMessage(HttpProcessingError): + + code = 400 + message = 'Bad Request' + + def __init__(self, message: str, *, + headers: Optional[_CIMultiDict]=None) -> None: + super().__init__(message=message, headers=headers) + self.args = (message,) + + +class HttpBadRequest(BadHttpMessage): + + code = 400 + message = 'Bad Request' + + +class PayloadEncodingError(BadHttpMessage): + """Base class for payload errors""" + + +class ContentEncodingError(PayloadEncodingError): + """Content encoding error.""" + + +class TransferEncodingError(PayloadEncodingError): + """transfer encoding error.""" + + +class ContentLengthError(PayloadEncodingError): + """Not enough data for satisfy content length header.""" + + +class LineTooLong(BadHttpMessage): + + def __init__(self, line: str, + limit: str='Unknown', + actual_size: str='Unknown') -> None: + super().__init__( + "Got more than %s bytes (%s) when reading %s." % ( + limit, actual_size, line)) + self.args = (line, limit, actual_size) + + +class InvalidHeader(BadHttpMessage): + + def __init__(self, hdr: Union[bytes, str]) -> None: + if isinstance(hdr, bytes): + hdr = hdr.decode('utf-8', 'surrogateescape') + super().__init__('Invalid HTTP Header: {}'.format(hdr)) + self.hdr = hdr + self.args = (hdr,) + + +class BadStatusLine(BadHttpMessage): + + def __init__(self, line: str='') -> None: + if not isinstance(line, str): + line = repr(line) + self.args = (line,) + self.line = line + + __str__ = Exception.__str__ + __repr__ = Exception.__repr__ + + +class InvalidURLError(BadHttpMessage): + pass diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/http_parser.py b/venv-linux/lib/python3.6/site-packages/aiohttp/http_parser.py new file mode 100644 index 0000000..9e22d10 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/http_parser.py @@ -0,0 +1,764 @@ +import abc +import asyncio +import collections +import re +import string +import zlib +from enum import IntEnum +from typing import Any, List, Optional, Tuple, Type, Union # noqa + +from multidict import CIMultiDict, CIMultiDictProxy, istr +from yarl import URL + +from . import hdrs +from .base_protocol import BaseProtocol +from .helpers import NO_EXTENSIONS, BaseTimerContext +from .http_exceptions import ( + BadStatusLine, + ContentEncodingError, + ContentLengthError, + InvalidHeader, + LineTooLong, + TransferEncodingError, +) +from .http_writer import HttpVersion, HttpVersion10 +from .log import internal_logger +from .streams import EMPTY_PAYLOAD, StreamReader +from .typedefs import RawHeaders + +try: + import brotli + HAS_BROTLI = True +except ImportError: # pragma: no cover + HAS_BROTLI = False + + +__all__ = ( + 'HeadersParser', 'HttpParser', 'HttpRequestParser', 'HttpResponseParser', + 'RawRequestMessage', 'RawResponseMessage') + +ASCIISET = set(string.printable) + +# See https://tools.ietf.org/html/rfc7230#section-3.1.1 +# and https://tools.ietf.org/html/rfc7230#appendix-B +# +# method = token +# tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / +# "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA +# token = 1*tchar +METHRE = re.compile(r"[!#$%&'*+\-.^_`|~0-9A-Za-z]+") +VERSRE = re.compile(r'HTTP/(\d+).(\d+)') +HDRRE = re.compile(rb'[\x00-\x1F\x7F()<>@,;:\[\]={} \t\\\\\"]') + +RawRequestMessage = collections.namedtuple( + 'RawRequestMessage', + ['method', 'path', 'version', 'headers', 'raw_headers', + 'should_close', 'compression', 'upgrade', 'chunked', 'url']) + +RawResponseMessage = collections.namedtuple( + 'RawResponseMessage', + ['version', 'code', 'reason', 'headers', 'raw_headers', + 'should_close', 'compression', 'upgrade', 'chunked']) + + +class ParseState(IntEnum): + + PARSE_NONE = 0 + PARSE_LENGTH = 1 + PARSE_CHUNKED = 2 + PARSE_UNTIL_EOF = 3 + + +class ChunkState(IntEnum): + PARSE_CHUNKED_SIZE = 0 + PARSE_CHUNKED_CHUNK = 1 + PARSE_CHUNKED_CHUNK_EOF = 2 + PARSE_MAYBE_TRAILERS = 3 + PARSE_TRAILERS = 4 + + +class HeadersParser: + def __init__(self, + max_line_size: int=8190, + max_headers: int=32768, + max_field_size: int=8190) -> None: + self.max_line_size = max_line_size + self.max_headers = max_headers + self.max_field_size = max_field_size + + def parse_headers( + self, + lines: List[bytes] + ) -> Tuple['CIMultiDictProxy[str]', RawHeaders]: + headers = CIMultiDict() # type: CIMultiDict[str] + raw_headers = [] + + lines_idx = 1 + line = lines[1] + line_count = len(lines) + + while line: + # Parse initial header name : value pair. + try: + bname, bvalue = line.split(b':', 1) + except ValueError: + raise InvalidHeader(line) from None + + bname = bname.strip(b' \t') + bvalue = bvalue.lstrip() + if HDRRE.search(bname): + raise InvalidHeader(bname) + if len(bname) > self.max_field_size: + raise LineTooLong( + "request header name {}".format( + bname.decode("utf8", "xmlcharrefreplace")), + str(self.max_field_size), + str(len(bname))) + + header_length = len(bvalue) + + # next line + lines_idx += 1 + line = lines[lines_idx] + + # consume continuation lines + continuation = line and line[0] in (32, 9) # (' ', '\t') + + if continuation: + bvalue_lst = [bvalue] + while continuation: + header_length += len(line) + if header_length > self.max_field_size: + raise LineTooLong( + 'request header field {}'.format( + bname.decode("utf8", "xmlcharrefreplace")), + str(self.max_field_size), + str(header_length)) + bvalue_lst.append(line) + + # next line + lines_idx += 1 + if lines_idx < line_count: + line = lines[lines_idx] + if line: + continuation = line[0] in (32, 9) # (' ', '\t') + else: + line = b'' + break + bvalue = b''.join(bvalue_lst) + else: + if header_length > self.max_field_size: + raise LineTooLong( + 'request header field {}'.format( + bname.decode("utf8", "xmlcharrefreplace")), + str(self.max_field_size), + str(header_length)) + + bvalue = bvalue.strip() + name = bname.decode('utf-8', 'surrogateescape') + value = bvalue.decode('utf-8', 'surrogateescape') + + headers.add(name, value) + raw_headers.append((bname, bvalue)) + + return (CIMultiDictProxy(headers), tuple(raw_headers)) + + +class HttpParser(abc.ABC): + + def __init__(self, protocol: Optional[BaseProtocol]=None, + loop: Optional[asyncio.AbstractEventLoop]=None, + max_line_size: int=8190, + max_headers: int=32768, + max_field_size: int=8190, + timer: Optional[BaseTimerContext]=None, + code: Optional[int]=None, + method: Optional[str]=None, + readall: bool=False, + payload_exception: Optional[Type[BaseException]]=None, + response_with_body: bool=True, + read_until_eof: bool=False, + auto_decompress: bool=True) -> None: + self.protocol = protocol + self.loop = loop + self.max_line_size = max_line_size + self.max_headers = max_headers + self.max_field_size = max_field_size + self.timer = timer + self.code = code + self.method = method + self.readall = readall + self.payload_exception = payload_exception + self.response_with_body = response_with_body + self.read_until_eof = read_until_eof + + self._lines = [] # type: List[bytes] + self._tail = b'' + self._upgraded = False + self._payload = None + self._payload_parser = None # type: Optional[HttpPayloadParser] + self._auto_decompress = auto_decompress + self._headers_parser = HeadersParser(max_line_size, + max_headers, + max_field_size) + + @abc.abstractmethod + def parse_message(self, lines: List[bytes]) -> Any: + pass + + def feed_eof(self) -> Any: + if self._payload_parser is not None: + self._payload_parser.feed_eof() + self._payload_parser = None + else: + # try to extract partial message + if self._tail: + self._lines.append(self._tail) + + if self._lines: + if self._lines[-1] != '\r\n': + self._lines.append(b'') + try: + return self.parse_message(self._lines) + except Exception: + return None + + def feed_data( + self, + data: bytes, + SEP: bytes=b'\r\n', + EMPTY: bytes=b'', + CONTENT_LENGTH: istr=hdrs.CONTENT_LENGTH, + METH_CONNECT: str=hdrs.METH_CONNECT, + SEC_WEBSOCKET_KEY1: istr=hdrs.SEC_WEBSOCKET_KEY1 + ) -> Tuple[List[Any], bool, bytes]: + + messages = [] + + if self._tail: + data, self._tail = self._tail + data, b'' + + data_len = len(data) + start_pos = 0 + loop = self.loop + + while start_pos < data_len: + + # read HTTP message (request/response line + headers), \r\n\r\n + # and split by lines + if self._payload_parser is None and not self._upgraded: + pos = data.find(SEP, start_pos) + # consume \r\n + if pos == start_pos and not self._lines: + start_pos = pos + 2 + continue + + if pos >= start_pos: + # line found + self._lines.append(data[start_pos:pos]) + start_pos = pos + 2 + + # \r\n\r\n found + if self._lines[-1] == EMPTY: + try: + msg = self.parse_message(self._lines) + finally: + self._lines.clear() + + # payload length + length = msg.headers.get(CONTENT_LENGTH) + if length is not None: + try: + length = int(length) + except ValueError: + raise InvalidHeader(CONTENT_LENGTH) + if length < 0: + raise InvalidHeader(CONTENT_LENGTH) + + # do not support old websocket spec + if SEC_WEBSOCKET_KEY1 in msg.headers: + raise InvalidHeader(SEC_WEBSOCKET_KEY1) + + self._upgraded = msg.upgrade + + method = getattr(msg, 'method', self.method) + + assert self.protocol is not None + # calculate payload + if ((length is not None and length > 0) or + msg.chunked and not msg.upgrade): + payload = StreamReader( + self.protocol, timer=self.timer, loop=loop) + payload_parser = HttpPayloadParser( + payload, length=length, + chunked=msg.chunked, method=method, + compression=msg.compression, + code=self.code, readall=self.readall, + response_with_body=self.response_with_body, + auto_decompress=self._auto_decompress) + if not payload_parser.done: + self._payload_parser = payload_parser + elif method == METH_CONNECT: + payload = StreamReader( + self.protocol, timer=self.timer, loop=loop) + self._upgraded = True + self._payload_parser = HttpPayloadParser( + payload, method=msg.method, + compression=msg.compression, readall=True, + auto_decompress=self._auto_decompress) + else: + if (getattr(msg, 'code', 100) >= 199 and + length is None and self.read_until_eof): + payload = StreamReader( + self.protocol, timer=self.timer, loop=loop) + payload_parser = HttpPayloadParser( + payload, length=length, + chunked=msg.chunked, method=method, + compression=msg.compression, + code=self.code, readall=True, + response_with_body=self.response_with_body, + auto_decompress=self._auto_decompress) + if not payload_parser.done: + self._payload_parser = payload_parser + else: + payload = EMPTY_PAYLOAD # type: ignore + + messages.append((msg, payload)) + else: + self._tail = data[start_pos:] + data = EMPTY + break + + # no parser, just store + elif self._payload_parser is None and self._upgraded: + assert not self._lines + break + + # feed payload + elif data and start_pos < data_len: + assert not self._lines + assert self._payload_parser is not None + try: + eof, data = self._payload_parser.feed_data( + data[start_pos:]) + except BaseException as exc: + if self.payload_exception is not None: + self._payload_parser.payload.set_exception( + self.payload_exception(str(exc))) + else: + self._payload_parser.payload.set_exception(exc) + + eof = True + data = b'' + + if eof: + start_pos = 0 + data_len = len(data) + self._payload_parser = None + continue + else: + break + + if data and start_pos < data_len: + data = data[start_pos:] + else: + data = EMPTY + + return messages, self._upgraded, data + + def parse_headers( + self, + lines: List[bytes] + ) -> Tuple['CIMultiDictProxy[str]', + RawHeaders, + Optional[bool], + Optional[str], + bool, + bool]: + """Parses RFC 5322 headers from a stream. + + Line continuations are supported. Returns list of header name + and value pairs. Header name is in upper case. + """ + headers, raw_headers = self._headers_parser.parse_headers(lines) + close_conn = None + encoding = None + upgrade = False + chunked = False + + # keep-alive + conn = headers.get(hdrs.CONNECTION) + if conn: + v = conn.lower() + if v == 'close': + close_conn = True + elif v == 'keep-alive': + close_conn = False + elif v == 'upgrade': + upgrade = True + + # encoding + enc = headers.get(hdrs.CONTENT_ENCODING) + if enc: + enc = enc.lower() + if enc in ('gzip', 'deflate', 'br'): + encoding = enc + + # chunking + te = headers.get(hdrs.TRANSFER_ENCODING) + if te and 'chunked' in te.lower(): + chunked = True + + return (headers, raw_headers, close_conn, encoding, upgrade, chunked) + + +class HttpRequestParser(HttpParser): + """Read request status line. Exception .http_exceptions.BadStatusLine + could be raised in case of any errors in status line. + Returns RawRequestMessage. + """ + + def parse_message(self, lines: List[bytes]) -> Any: + # request line + line = lines[0].decode('utf-8', 'surrogateescape') + try: + method, path, version = line.split(None, 2) + except ValueError: + raise BadStatusLine(line) from None + + if len(path) > self.max_line_size: + raise LineTooLong( + 'Status line is too long', + str(self.max_line_size), + str(len(path))) + + # method + if not METHRE.match(method): + raise BadStatusLine(method) + + # version + try: + if version.startswith('HTTP/'): + n1, n2 = version[5:].split('.', 1) + version_o = HttpVersion(int(n1), int(n2)) + else: + raise BadStatusLine(version) + except Exception: + raise BadStatusLine(version) + + # read headers + (headers, raw_headers, + close, compression, upgrade, chunked) = self.parse_headers(lines) + + if close is None: # then the headers weren't set in the request + if version_o <= HttpVersion10: # HTTP 1.0 must asks to not close + close = True + else: # HTTP 1.1 must ask to close. + close = False + + return RawRequestMessage( + method, path, version_o, headers, raw_headers, + close, compression, upgrade, chunked, URL(path)) + + +class HttpResponseParser(HttpParser): + """Read response status line and headers. + + BadStatusLine could be raised in case of any errors in status line. + Returns RawResponseMessage""" + + def parse_message(self, lines: List[bytes]) -> Any: + line = lines[0].decode('utf-8', 'surrogateescape') + try: + version, status = line.split(None, 1) + except ValueError: + raise BadStatusLine(line) from None + + try: + status, reason = status.split(None, 1) + except ValueError: + reason = '' + + if len(reason) > self.max_line_size: + raise LineTooLong( + 'Status line is too long', + str(self.max_line_size), + str(len(reason))) + + # version + match = VERSRE.match(version) + if match is None: + raise BadStatusLine(line) + version_o = HttpVersion(int(match.group(1)), int(match.group(2))) + + # The status code is a three-digit number + try: + status_i = int(status) + except ValueError: + raise BadStatusLine(line) from None + + if status_i > 999: + raise BadStatusLine(line) + + # read headers + (headers, raw_headers, + close, compression, upgrade, chunked) = self.parse_headers(lines) + + if close is None: + close = version_o <= HttpVersion10 + + return RawResponseMessage( + version_o, status_i, reason.strip(), + headers, raw_headers, close, compression, upgrade, chunked) + + +class HttpPayloadParser: + + def __init__(self, payload: StreamReader, + length: Optional[int]=None, + chunked: bool=False, + compression: Optional[str]=None, + code: Optional[int]=None, + method: Optional[str]=None, + readall: bool=False, + response_with_body: bool=True, + auto_decompress: bool=True) -> None: + self._length = 0 + self._type = ParseState.PARSE_NONE + self._chunk = ChunkState.PARSE_CHUNKED_SIZE + self._chunk_size = 0 + self._chunk_tail = b'' + self._auto_decompress = auto_decompress + self.done = False + + # payload decompression wrapper + if response_with_body and compression and self._auto_decompress: + real_payload = DeflateBuffer(payload, compression) # type: Union[StreamReader, DeflateBuffer] # noqa + else: + real_payload = payload + + # payload parser + if not response_with_body: + # don't parse payload if it's not expected to be received + self._type = ParseState.PARSE_NONE + real_payload.feed_eof() + self.done = True + + elif chunked: + self._type = ParseState.PARSE_CHUNKED + elif length is not None: + self._type = ParseState.PARSE_LENGTH + self._length = length + if self._length == 0: + real_payload.feed_eof() + self.done = True + else: + if readall and code != 204: + self._type = ParseState.PARSE_UNTIL_EOF + elif method in ('PUT', 'POST'): + internal_logger.warning( # pragma: no cover + 'Content-Length or Transfer-Encoding header is required') + self._type = ParseState.PARSE_NONE + real_payload.feed_eof() + self.done = True + + self.payload = real_payload + + def feed_eof(self) -> None: + if self._type == ParseState.PARSE_UNTIL_EOF: + self.payload.feed_eof() + elif self._type == ParseState.PARSE_LENGTH: + raise ContentLengthError( + "Not enough data for satisfy content length header.") + elif self._type == ParseState.PARSE_CHUNKED: + raise TransferEncodingError( + "Not enough data for satisfy transfer length header.") + + def feed_data(self, + chunk: bytes, + SEP: bytes=b'\r\n', + CHUNK_EXT: bytes=b';') -> Tuple[bool, bytes]: + # Read specified amount of bytes + if self._type == ParseState.PARSE_LENGTH: + required = self._length + chunk_len = len(chunk) + + if required >= chunk_len: + self._length = required - chunk_len + self.payload.feed_data(chunk, chunk_len) + if self._length == 0: + self.payload.feed_eof() + return True, b'' + else: + self._length = 0 + self.payload.feed_data(chunk[:required], required) + self.payload.feed_eof() + return True, chunk[required:] + + # Chunked transfer encoding parser + elif self._type == ParseState.PARSE_CHUNKED: + if self._chunk_tail: + chunk = self._chunk_tail + chunk + self._chunk_tail = b'' + + while chunk: + + # read next chunk size + if self._chunk == ChunkState.PARSE_CHUNKED_SIZE: + pos = chunk.find(SEP) + if pos >= 0: + i = chunk.find(CHUNK_EXT, 0, pos) + if i >= 0: + size_b = chunk[:i] # strip chunk-extensions + else: + size_b = chunk[:pos] + + try: + size = int(bytes(size_b), 16) + except ValueError: + exc = TransferEncodingError( + chunk[:pos].decode('ascii', 'surrogateescape')) + self.payload.set_exception(exc) + raise exc from None + + chunk = chunk[pos+2:] + if size == 0: # eof marker + self._chunk = ChunkState.PARSE_MAYBE_TRAILERS + else: + self._chunk = ChunkState.PARSE_CHUNKED_CHUNK + self._chunk_size = size + self.payload.begin_http_chunk_receiving() + else: + self._chunk_tail = chunk + return False, b'' + + # read chunk and feed buffer + if self._chunk == ChunkState.PARSE_CHUNKED_CHUNK: + required = self._chunk_size + chunk_len = len(chunk) + + if required > chunk_len: + self._chunk_size = required - chunk_len + self.payload.feed_data(chunk, chunk_len) + return False, b'' + else: + self._chunk_size = 0 + self.payload.feed_data(chunk[:required], required) + chunk = chunk[required:] + self._chunk = ChunkState.PARSE_CHUNKED_CHUNK_EOF + self.payload.end_http_chunk_receiving() + + # toss the CRLF at the end of the chunk + if self._chunk == ChunkState.PARSE_CHUNKED_CHUNK_EOF: + if chunk[:2] == SEP: + chunk = chunk[2:] + self._chunk = ChunkState.PARSE_CHUNKED_SIZE + else: + self._chunk_tail = chunk + return False, b'' + + # if stream does not contain trailer, after 0\r\n + # we should get another \r\n otherwise + # trailers needs to be skiped until \r\n\r\n + if self._chunk == ChunkState.PARSE_MAYBE_TRAILERS: + if chunk[:2] == SEP: + # end of stream + self.payload.feed_eof() + return True, chunk[2:] + else: + self._chunk = ChunkState.PARSE_TRAILERS + + # read and discard trailer up to the CRLF terminator + if self._chunk == ChunkState.PARSE_TRAILERS: + pos = chunk.find(SEP) + if pos >= 0: + chunk = chunk[pos+2:] + self._chunk = ChunkState.PARSE_MAYBE_TRAILERS + else: + self._chunk_tail = chunk + return False, b'' + + # Read all bytes until eof + elif self._type == ParseState.PARSE_UNTIL_EOF: + self.payload.feed_data(chunk, len(chunk)) + + return False, b'' + + +class DeflateBuffer: + """DeflateStream decompress stream and feed data into specified stream.""" + + def __init__(self, out: StreamReader, encoding: Optional[str]) -> None: + self.out = out + self.size = 0 + self.encoding = encoding + self._started_decoding = False + + if encoding == 'br': + if not HAS_BROTLI: # pragma: no cover + raise ContentEncodingError( + 'Can not decode content-encoding: brotli (br). ' + 'Please install `brotlipy`') + self.decompressor = brotli.Decompressor() + else: + zlib_mode = (16 + zlib.MAX_WBITS + if encoding == 'gzip' else -zlib.MAX_WBITS) + self.decompressor = zlib.decompressobj(wbits=zlib_mode) + + def set_exception(self, exc: BaseException) -> None: + self.out.set_exception(exc) + + def feed_data(self, chunk: bytes, size: int) -> None: + self.size += size + try: + chunk = self.decompressor.decompress(chunk) + except Exception: + if not self._started_decoding and self.encoding == 'deflate': + self.decompressor = zlib.decompressobj() + try: + chunk = self.decompressor.decompress(chunk) + except Exception: + raise ContentEncodingError( + 'Can not decode content-encoding: %s' % self.encoding) + else: + raise ContentEncodingError( + 'Can not decode content-encoding: %s' % self.encoding) + + if chunk: + self._started_decoding = True + self.out.feed_data(chunk, len(chunk)) + + def feed_eof(self) -> None: + chunk = self.decompressor.flush() + + if chunk or self.size > 0: + self.out.feed_data(chunk, len(chunk)) + if self.encoding == 'deflate' and not self.decompressor.eof: + raise ContentEncodingError('deflate') + + self.out.feed_eof() + + def begin_http_chunk_receiving(self) -> None: + self.out.begin_http_chunk_receiving() + + def end_http_chunk_receiving(self) -> None: + self.out.end_http_chunk_receiving() + + +HttpRequestParserPy = HttpRequestParser +HttpResponseParserPy = HttpResponseParser +RawRequestMessagePy = RawRequestMessage +RawResponseMessagePy = RawResponseMessage + +try: + if not NO_EXTENSIONS: + from ._http_parser import (HttpRequestParser, # type: ignore # noqa + HttpResponseParser, + RawRequestMessage, + RawResponseMessage) + HttpRequestParserC = HttpRequestParser + HttpResponseParserC = HttpResponseParser + RawRequestMessageC = RawRequestMessage + RawResponseMessageC = RawResponseMessage +except ImportError: # pragma: no cover + pass diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/http_websocket.py b/venv-linux/lib/python3.6/site-packages/aiohttp/http_websocket.py new file mode 100644 index 0000000..e331d69 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/http_websocket.py @@ -0,0 +1,659 @@ +"""WebSocket protocol versions 13 and 8.""" + +import asyncio +import collections +import json +import random +import re +import sys +import zlib +from enum import IntEnum +from struct import Struct +from typing import Any, Callable, List, Optional, Tuple, Union + +from .base_protocol import BaseProtocol +from .helpers import NO_EXTENSIONS +from .log import ws_logger +from .streams import DataQueue + +__all__ = ('WS_CLOSED_MESSAGE', 'WS_CLOSING_MESSAGE', 'WS_KEY', + 'WebSocketReader', 'WebSocketWriter', 'WSMessage', + 'WebSocketError', 'WSMsgType', 'WSCloseCode') + + +class WSCloseCode(IntEnum): + OK = 1000 + GOING_AWAY = 1001 + PROTOCOL_ERROR = 1002 + UNSUPPORTED_DATA = 1003 + INVALID_TEXT = 1007 + POLICY_VIOLATION = 1008 + MESSAGE_TOO_BIG = 1009 + MANDATORY_EXTENSION = 1010 + INTERNAL_ERROR = 1011 + SERVICE_RESTART = 1012 + TRY_AGAIN_LATER = 1013 + + +ALLOWED_CLOSE_CODES = {int(i) for i in WSCloseCode} + + +class WSMsgType(IntEnum): + # websocket spec types + CONTINUATION = 0x0 + TEXT = 0x1 + BINARY = 0x2 + PING = 0x9 + PONG = 0xa + CLOSE = 0x8 + + # aiohttp specific types + CLOSING = 0x100 + CLOSED = 0x101 + ERROR = 0x102 + + text = TEXT + binary = BINARY + ping = PING + pong = PONG + close = CLOSE + closing = CLOSING + closed = CLOSED + error = ERROR + + +WS_KEY = b'258EAFA5-E914-47DA-95CA-C5AB0DC85B11' + + +UNPACK_LEN2 = Struct('!H').unpack_from +UNPACK_LEN3 = Struct('!Q').unpack_from +UNPACK_CLOSE_CODE = Struct('!H').unpack +PACK_LEN1 = Struct('!BB').pack +PACK_LEN2 = Struct('!BBH').pack +PACK_LEN3 = Struct('!BBQ').pack +PACK_CLOSE_CODE = Struct('!H').pack +MSG_SIZE = 2 ** 14 +DEFAULT_LIMIT = 2 ** 16 + + +_WSMessageBase = collections.namedtuple('_WSMessageBase', + ['type', 'data', 'extra']) + + +class WSMessage(_WSMessageBase): + + def json(self, *, + loads: Callable[[Any], Any]=json.loads) -> Any: + """Return parsed JSON data. + + .. versionadded:: 0.22 + """ + return loads(self.data) + + +WS_CLOSED_MESSAGE = WSMessage(WSMsgType.CLOSED, None, None) +WS_CLOSING_MESSAGE = WSMessage(WSMsgType.CLOSING, None, None) + + +class WebSocketError(Exception): + """WebSocket protocol parser error.""" + + def __init__(self, code: int, message: str) -> None: + self.code = code + super().__init__(code, message) + + def __str__(self) -> str: + return self.args[1] + + +class WSHandshakeError(Exception): + """WebSocket protocol handshake error.""" + + +native_byteorder = sys.byteorder + + +# Used by _websocket_mask_python +_XOR_TABLE = [bytes(a ^ b for a in range(256)) for b in range(256)] + + +def _websocket_mask_python(mask: bytes, data: bytearray) -> None: + """Websocket masking function. + + `mask` is a `bytes` object of length 4; `data` is a `bytearray` + object of any length. The contents of `data` are masked with `mask`, + as specified in section 5.3 of RFC 6455. + + Note that this function mutates the `data` argument. + + This pure-python implementation may be replaced by an optimized + version when available. + + """ + assert isinstance(data, bytearray), data + assert len(mask) == 4, mask + + if data: + a, b, c, d = (_XOR_TABLE[n] for n in mask) + data[::4] = data[::4].translate(a) + data[1::4] = data[1::4].translate(b) + data[2::4] = data[2::4].translate(c) + data[3::4] = data[3::4].translate(d) + + +if NO_EXTENSIONS: # pragma: no cover + _websocket_mask = _websocket_mask_python +else: + try: + from ._websocket import _websocket_mask_cython # type: ignore + _websocket_mask = _websocket_mask_cython + except ImportError: # pragma: no cover + _websocket_mask = _websocket_mask_python + +_WS_DEFLATE_TRAILING = bytes([0x00, 0x00, 0xff, 0xff]) + + +_WS_EXT_RE = re.compile(r'^(?:;\s*(?:' + r'(server_no_context_takeover)|' + r'(client_no_context_takeover)|' + r'(server_max_window_bits(?:=(\d+))?)|' + r'(client_max_window_bits(?:=(\d+))?)))*$') + +_WS_EXT_RE_SPLIT = re.compile(r'permessage-deflate([^,]+)?') + + +def ws_ext_parse(extstr: str, isserver: bool=False) -> Tuple[int, bool]: + if not extstr: + return 0, False + + compress = 0 + notakeover = False + for ext in _WS_EXT_RE_SPLIT.finditer(extstr): + defext = ext.group(1) + # Return compress = 15 when get `permessage-deflate` + if not defext: + compress = 15 + break + match = _WS_EXT_RE.match(defext) + if match: + compress = 15 + if isserver: + # Server never fail to detect compress handshake. + # Server does not need to send max wbit to client + if match.group(4): + compress = int(match.group(4)) + # Group3 must match if group4 matches + # Compress wbit 8 does not support in zlib + # If compress level not support, + # CONTINUE to next extension + if compress > 15 or compress < 9: + compress = 0 + continue + if match.group(1): + notakeover = True + # Ignore regex group 5 & 6 for client_max_window_bits + break + else: + if match.group(6): + compress = int(match.group(6)) + # Group5 must match if group6 matches + # Compress wbit 8 does not support in zlib + # If compress level not support, + # FAIL the parse progress + if compress > 15 or compress < 9: + raise WSHandshakeError('Invalid window size') + if match.group(2): + notakeover = True + # Ignore regex group 5 & 6 for client_max_window_bits + break + # Return Fail if client side and not match + elif not isserver: + raise WSHandshakeError('Extension for deflate not supported' + + ext.group(1)) + + return compress, notakeover + + +def ws_ext_gen(compress: int=15, isserver: bool=False, + server_notakeover: bool=False) -> str: + # client_notakeover=False not used for server + # compress wbit 8 does not support in zlib + if compress < 9 or compress > 15: + raise ValueError('Compress wbits must between 9 and 15, ' + 'zlib does not support wbits=8') + enabledext = ['permessage-deflate'] + if not isserver: + enabledext.append('client_max_window_bits') + + if compress < 15: + enabledext.append('server_max_window_bits=' + str(compress)) + if server_notakeover: + enabledext.append('server_no_context_takeover') + # if client_notakeover: + # enabledext.append('client_no_context_takeover') + return '; '.join(enabledext) + + +class WSParserState(IntEnum): + READ_HEADER = 1 + READ_PAYLOAD_LENGTH = 2 + READ_PAYLOAD_MASK = 3 + READ_PAYLOAD = 4 + + +class WebSocketReader: + + def __init__(self, queue: DataQueue[WSMessage], + max_msg_size: int, compress: bool=True) -> None: + self.queue = queue + self._max_msg_size = max_msg_size + + self._exc = None # type: Optional[BaseException] + self._partial = bytearray() + self._state = WSParserState.READ_HEADER + + self._opcode = None # type: Optional[int] + self._frame_fin = False + self._frame_opcode = None # type: Optional[int] + self._frame_payload = bytearray() + + self._tail = b'' + self._has_mask = False + self._frame_mask = None # type: Optional[bytes] + self._payload_length = 0 + self._payload_length_flag = 0 + self._compressed = None # type: Optional[bool] + self._decompressobj = None # type: Any # zlib.decompressobj actually + self._compress = compress + + def feed_eof(self) -> None: + self.queue.feed_eof() + + def feed_data(self, data: bytes) -> Tuple[bool, bytes]: + if self._exc: + return True, data + + try: + return self._feed_data(data) + except Exception as exc: + self._exc = exc + self.queue.set_exception(exc) + return True, b'' + + def _feed_data(self, data: bytes) -> Tuple[bool, bytes]: + for fin, opcode, payload, compressed in self.parse_frame(data): + if compressed and not self._decompressobj: + self._decompressobj = zlib.decompressobj(wbits=-zlib.MAX_WBITS) + if opcode == WSMsgType.CLOSE: + if len(payload) >= 2: + close_code = UNPACK_CLOSE_CODE(payload[:2])[0] + if (close_code < 3000 and + close_code not in ALLOWED_CLOSE_CODES): + raise WebSocketError( + WSCloseCode.PROTOCOL_ERROR, + 'Invalid close code: {}'.format(close_code)) + try: + close_message = payload[2:].decode('utf-8') + except UnicodeDecodeError as exc: + raise WebSocketError( + WSCloseCode.INVALID_TEXT, + 'Invalid UTF-8 text message') from exc + msg = WSMessage(WSMsgType.CLOSE, close_code, close_message) + elif payload: + raise WebSocketError( + WSCloseCode.PROTOCOL_ERROR, + 'Invalid close frame: {} {} {!r}'.format( + fin, opcode, payload)) + else: + msg = WSMessage(WSMsgType.CLOSE, 0, '') + + self.queue.feed_data(msg, 0) + + elif opcode == WSMsgType.PING: + self.queue.feed_data( + WSMessage(WSMsgType.PING, payload, ''), len(payload)) + + elif opcode == WSMsgType.PONG: + self.queue.feed_data( + WSMessage(WSMsgType.PONG, payload, ''), len(payload)) + + elif opcode not in ( + WSMsgType.TEXT, WSMsgType.BINARY) and self._opcode is None: + raise WebSocketError( + WSCloseCode.PROTOCOL_ERROR, + "Unexpected opcode={!r}".format(opcode)) + else: + # load text/binary + if not fin: + # got partial frame payload + if opcode != WSMsgType.CONTINUATION: + self._opcode = opcode + self._partial.extend(payload) + if (self._max_msg_size and + len(self._partial) >= self._max_msg_size): + raise WebSocketError( + WSCloseCode.MESSAGE_TOO_BIG, + "Message size {} exceeds limit {}".format( + len(self._partial), self._max_msg_size)) + else: + # previous frame was non finished + # we should get continuation opcode + if self._partial: + if opcode != WSMsgType.CONTINUATION: + raise WebSocketError( + WSCloseCode.PROTOCOL_ERROR, + 'The opcode in non-fin frame is expected ' + 'to be zero, got {!r}'.format(opcode)) + + if opcode == WSMsgType.CONTINUATION: + assert self._opcode is not None + opcode = self._opcode + self._opcode = None + + self._partial.extend(payload) + if (self._max_msg_size and + len(self._partial) >= self._max_msg_size): + raise WebSocketError( + WSCloseCode.MESSAGE_TOO_BIG, + "Message size {} exceeds limit {}".format( + len(self._partial), self._max_msg_size)) + + # Decompress process must to be done after all packets + # received. + if compressed: + self._partial.extend(_WS_DEFLATE_TRAILING) + payload_merged = self._decompressobj.decompress( + self._partial, self._max_msg_size) + if self._decompressobj.unconsumed_tail: + left = len(self._decompressobj.unconsumed_tail) + raise WebSocketError( + WSCloseCode.MESSAGE_TOO_BIG, + "Decompressed message size {} exceeds limit {}" + .format( + self._max_msg_size + left, + self._max_msg_size + ) + ) + else: + payload_merged = bytes(self._partial) + + self._partial.clear() + + if opcode == WSMsgType.TEXT: + try: + text = payload_merged.decode('utf-8') + self.queue.feed_data( + WSMessage(WSMsgType.TEXT, text, ''), len(text)) + except UnicodeDecodeError as exc: + raise WebSocketError( + WSCloseCode.INVALID_TEXT, + 'Invalid UTF-8 text message') from exc + else: + self.queue.feed_data( + WSMessage(WSMsgType.BINARY, payload_merged, ''), + len(payload_merged)) + + return False, b'' + + def parse_frame(self, buf: bytes) -> List[Tuple[bool, Optional[int], + bytearray, + Optional[bool]]]: + """Return the next frame from the socket.""" + frames = [] + if self._tail: + buf, self._tail = self._tail + buf, b'' + + start_pos = 0 + buf_length = len(buf) + + while True: + # read header + if self._state == WSParserState.READ_HEADER: + if buf_length - start_pos >= 2: + data = buf[start_pos:start_pos+2] + start_pos += 2 + first_byte, second_byte = data + + fin = (first_byte >> 7) & 1 + rsv1 = (first_byte >> 6) & 1 + rsv2 = (first_byte >> 5) & 1 + rsv3 = (first_byte >> 4) & 1 + opcode = first_byte & 0xf + + # frame-fin = %x0 ; more frames of this message follow + # / %x1 ; final frame of this message + # frame-rsv1 = %x0 ; + # 1 bit, MUST be 0 unless negotiated otherwise + # frame-rsv2 = %x0 ; + # 1 bit, MUST be 0 unless negotiated otherwise + # frame-rsv3 = %x0 ; + # 1 bit, MUST be 0 unless negotiated otherwise + # + # Remove rsv1 from this test for deflate development + if rsv2 or rsv3 or (rsv1 and not self._compress): + raise WebSocketError( + WSCloseCode.PROTOCOL_ERROR, + 'Received frame with non-zero reserved bits') + + if opcode > 0x7 and fin == 0: + raise WebSocketError( + WSCloseCode.PROTOCOL_ERROR, + 'Received fragmented control frame') + + has_mask = (second_byte >> 7) & 1 + length = second_byte & 0x7f + + # Control frames MUST have a payload + # length of 125 bytes or less + if opcode > 0x7 and length > 125: + raise WebSocketError( + WSCloseCode.PROTOCOL_ERROR, + 'Control frame payload cannot be ' + 'larger than 125 bytes') + + # Set compress status if last package is FIN + # OR set compress status if this is first fragment + # Raise error if not first fragment with rsv1 = 0x1 + if self._frame_fin or self._compressed is None: + self._compressed = True if rsv1 else False + elif rsv1: + raise WebSocketError( + WSCloseCode.PROTOCOL_ERROR, + 'Received frame with non-zero reserved bits') + + self._frame_fin = bool(fin) + self._frame_opcode = opcode + self._has_mask = bool(has_mask) + self._payload_length_flag = length + self._state = WSParserState.READ_PAYLOAD_LENGTH + else: + break + + # read payload length + if self._state == WSParserState.READ_PAYLOAD_LENGTH: + length = self._payload_length_flag + if length == 126: + if buf_length - start_pos >= 2: + data = buf[start_pos:start_pos+2] + start_pos += 2 + length = UNPACK_LEN2(data)[0] + self._payload_length = length + self._state = ( + WSParserState.READ_PAYLOAD_MASK + if self._has_mask + else WSParserState.READ_PAYLOAD) + else: + break + elif length > 126: + if buf_length - start_pos >= 8: + data = buf[start_pos:start_pos+8] + start_pos += 8 + length = UNPACK_LEN3(data)[0] + self._payload_length = length + self._state = ( + WSParserState.READ_PAYLOAD_MASK + if self._has_mask + else WSParserState.READ_PAYLOAD) + else: + break + else: + self._payload_length = length + self._state = ( + WSParserState.READ_PAYLOAD_MASK + if self._has_mask + else WSParserState.READ_PAYLOAD) + + # read payload mask + if self._state == WSParserState.READ_PAYLOAD_MASK: + if buf_length - start_pos >= 4: + self._frame_mask = buf[start_pos:start_pos+4] + start_pos += 4 + self._state = WSParserState.READ_PAYLOAD + else: + break + + if self._state == WSParserState.READ_PAYLOAD: + length = self._payload_length + payload = self._frame_payload + + chunk_len = buf_length - start_pos + if length >= chunk_len: + self._payload_length = length - chunk_len + payload.extend(buf[start_pos:]) + start_pos = buf_length + else: + self._payload_length = 0 + payload.extend(buf[start_pos:start_pos+length]) + start_pos = start_pos + length + + if self._payload_length == 0: + if self._has_mask: + assert self._frame_mask is not None + _websocket_mask(self._frame_mask, payload) + + frames.append(( + self._frame_fin, + self._frame_opcode, + payload, + self._compressed)) + + self._frame_payload = bytearray() + self._state = WSParserState.READ_HEADER + else: + break + + self._tail = buf[start_pos:] + + return frames + + +class WebSocketWriter: + + def __init__(self, protocol: BaseProtocol, transport: asyncio.Transport, *, + use_mask: bool=False, limit: int=DEFAULT_LIMIT, + random: Any=random.Random(), + compress: int=0, notakeover: bool=False) -> None: + self.protocol = protocol + self.transport = transport + self.use_mask = use_mask + self.randrange = random.randrange + self.compress = compress + self.notakeover = notakeover + self._closing = False + self._limit = limit + self._output_size = 0 + self._compressobj = None # type: Any # actually compressobj + + async def _send_frame(self, message: bytes, opcode: int, + compress: Optional[int]=None) -> None: + """Send a frame over the websocket with message as its payload.""" + if self._closing: + ws_logger.warning('websocket connection is closing.') + + rsv = 0 + + # Only compress larger packets (disabled) + # Does small packet needs to be compressed? + # if self.compress and opcode < 8 and len(message) > 124: + if (compress or self.compress) and opcode < 8: + if compress: + # Do not set self._compress if compressing is for this frame + compressobj = zlib.compressobj(wbits=-compress) + else: # self.compress + if not self._compressobj: + self._compressobj = zlib.compressobj(wbits=-self.compress) + compressobj = self._compressobj + + message = compressobj.compress(message) + message = message + compressobj.flush( + zlib.Z_FULL_FLUSH if self.notakeover else zlib.Z_SYNC_FLUSH) + if message.endswith(_WS_DEFLATE_TRAILING): + message = message[:-4] + rsv = rsv | 0x40 + + msg_length = len(message) + + use_mask = self.use_mask + if use_mask: + mask_bit = 0x80 + else: + mask_bit = 0 + + if msg_length < 126: + header = PACK_LEN1(0x80 | rsv | opcode, msg_length | mask_bit) + elif msg_length < (1 << 16): + header = PACK_LEN2(0x80 | rsv | opcode, 126 | mask_bit, msg_length) + else: + header = PACK_LEN3(0x80 | rsv | opcode, 127 | mask_bit, msg_length) + if use_mask: + mask = self.randrange(0, 0xffffffff) + mask = mask.to_bytes(4, 'big') + message = bytearray(message) + _websocket_mask(mask, message) + self.transport.write(header + mask + message) + self._output_size += len(header) + len(mask) + len(message) + else: + if len(message) > MSG_SIZE: + self.transport.write(header) + self.transport.write(message) + else: + self.transport.write(header + message) + + self._output_size += len(header) + len(message) + + if self._output_size > self._limit: + self._output_size = 0 + await self.protocol._drain_helper() + + async def pong(self, message: bytes=b'') -> None: + """Send pong message.""" + if isinstance(message, str): + message = message.encode('utf-8') + await self._send_frame(message, WSMsgType.PONG) + + async def ping(self, message: bytes=b'') -> None: + """Send ping message.""" + if isinstance(message, str): + message = message.encode('utf-8') + await self._send_frame(message, WSMsgType.PING) + + async def send(self, message: Union[str, bytes], + binary: bool=False, + compress: Optional[int]=None) -> None: + """Send a frame over the websocket with message as its payload.""" + if isinstance(message, str): + message = message.encode('utf-8') + if binary: + await self._send_frame(message, WSMsgType.BINARY, compress) + else: + await self._send_frame(message, WSMsgType.TEXT, compress) + + async def close(self, code: int=1000, message: bytes=b'') -> None: + """Close the websocket, sending the specified code and message.""" + if isinstance(message, str): + message = message.encode('utf-8') + try: + await self._send_frame( + PACK_CLOSE_CODE(code) + message, opcode=WSMsgType.CLOSE) + finally: + self._closing = True diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/http_writer.py b/venv-linux/lib/python3.6/site-packages/aiohttp/http_writer.py new file mode 100644 index 0000000..7e27fbf --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/http_writer.py @@ -0,0 +1,172 @@ +"""Http related parsers and protocol.""" + +import asyncio +import collections +import zlib +from typing import Any, Awaitable, Callable, Optional, Union # noqa + +from multidict import CIMultiDict # noqa + +from .abc import AbstractStreamWriter +from .base_protocol import BaseProtocol +from .helpers import NO_EXTENSIONS + +__all__ = ('StreamWriter', 'HttpVersion', 'HttpVersion10', 'HttpVersion11') + +HttpVersion = collections.namedtuple('HttpVersion', ['major', 'minor']) +HttpVersion10 = HttpVersion(1, 0) +HttpVersion11 = HttpVersion(1, 1) + + +_T_OnChunkSent = Optional[Callable[[bytes], Awaitable[None]]] + + +class StreamWriter(AbstractStreamWriter): + + def __init__(self, + protocol: BaseProtocol, + loop: asyncio.AbstractEventLoop, + on_chunk_sent: _T_OnChunkSent = None) -> None: + self._protocol = protocol + self._transport = protocol.transport + + self.loop = loop + self.length = None + self.chunked = False + self.buffer_size = 0 + self.output_size = 0 + + self._eof = False + self._compress = None # type: Any + self._drain_waiter = None + + self._on_chunk_sent = on_chunk_sent # type: _T_OnChunkSent + + @property + def transport(self) -> Optional[asyncio.Transport]: + return self._transport + + @property + def protocol(self) -> BaseProtocol: + return self._protocol + + def enable_chunking(self) -> None: + self.chunked = True + + def enable_compression(self, encoding: str='deflate') -> None: + zlib_mode = (16 + zlib.MAX_WBITS + if encoding == 'gzip' else -zlib.MAX_WBITS) + self._compress = zlib.compressobj(wbits=zlib_mode) + + def _write(self, chunk: bytes) -> None: + size = len(chunk) + self.buffer_size += size + self.output_size += size + + if self._transport is None or self._transport.is_closing(): + raise ConnectionResetError('Cannot write to closing transport') + self._transport.write(chunk) + + async def write(self, chunk: bytes, + *, drain: bool=True, LIMIT: int=0x10000) -> None: + """Writes chunk of data to a stream. + + write_eof() indicates end of stream. + writer can't be used after write_eof() method being called. + write() return drain future. + """ + if self._on_chunk_sent is not None: + await self._on_chunk_sent(chunk) + + if self._compress is not None: + chunk = self._compress.compress(chunk) + if not chunk: + return + + if self.length is not None: + chunk_len = len(chunk) + if self.length >= chunk_len: + self.length = self.length - chunk_len + else: + chunk = chunk[:self.length] + self.length = 0 + if not chunk: + return + + if chunk: + if self.chunked: + chunk_len_pre = ('%x\r\n' % len(chunk)).encode('ascii') + chunk = chunk_len_pre + chunk + b'\r\n' + + self._write(chunk) + + if self.buffer_size > LIMIT and drain: + self.buffer_size = 0 + await self.drain() + + async def write_headers(self, status_line: str, + headers: 'CIMultiDict[str]') -> None: + """Write request/response status and headers.""" + # status + headers + buf = _serialize_headers(status_line, headers) + self._write(buf) + + async def write_eof(self, chunk: bytes=b'') -> None: + if self._eof: + return + + if chunk and self._on_chunk_sent is not None: + await self._on_chunk_sent(chunk) + + if self._compress: + if chunk: + chunk = self._compress.compress(chunk) + + chunk = chunk + self._compress.flush() + if chunk and self.chunked: + chunk_len = ('%x\r\n' % len(chunk)).encode('ascii') + chunk = chunk_len + chunk + b'\r\n0\r\n\r\n' + else: + if self.chunked: + if chunk: + chunk_len = ('%x\r\n' % len(chunk)).encode('ascii') + chunk = chunk_len + chunk + b'\r\n0\r\n\r\n' + else: + chunk = b'0\r\n\r\n' + + if chunk: + self._write(chunk) + + await self.drain() + + self._eof = True + self._transport = None + + async def drain(self) -> None: + """Flush the write buffer. + + The intended use is to write + + await w.write(data) + await w.drain() + """ + if self._protocol.transport is not None: + await self._protocol._drain_helper() + + +def _py_serialize_headers(status_line: str, + headers: 'CIMultiDict[str]') -> bytes: + line = status_line + '\r\n' + ''.join( + [k + ': ' + v + '\r\n' for k, v in headers.items()]) + return line.encode('utf-8') + b'\r\n' + + +_serialize_headers = _py_serialize_headers + +try: + import aiohttp._http_writer as _http_writer # type: ignore + _c_serialize_headers = _http_writer._serialize_headers + if not NO_EXTENSIONS: + _serialize_headers = _c_serialize_headers +except ImportError: + pass diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/locks.py b/venv-linux/lib/python3.6/site-packages/aiohttp/locks.py new file mode 100644 index 0000000..ed41f97 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/locks.py @@ -0,0 +1,44 @@ +import asyncio +import collections +from typing import Any, Optional + +try: + from typing import Deque +except ImportError: + from typing_extensions import Deque # noqa + + +class EventResultOrError: + """ + This class wrappers the Event asyncio lock allowing either awake the + locked Tasks without any error or raising an exception. + + thanks to @vorpalsmith for the simple design. + """ + def __init__(self, loop: asyncio.AbstractEventLoop) -> None: + self._loop = loop + self._exc = None # type: Optional[BaseException] + self._event = asyncio.Event(loop=loop) + self._waiters = collections.deque() # type: Deque[asyncio.Future[Any]] + + def set(self, exc: Optional[BaseException]=None) -> None: + self._exc = exc + self._event.set() + + async def wait(self) -> Any: + waiter = self._loop.create_task(self._event.wait()) + self._waiters.append(waiter) + try: + val = await waiter + finally: + self._waiters.remove(waiter) + + if self._exc is not None: + raise self._exc + + return val + + def cancel(self) -> None: + """ Cancel all waiters """ + for waiter in self._waiters: + waiter.cancel() diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/log.py b/venv-linux/lib/python3.6/site-packages/aiohttp/log.py new file mode 100644 index 0000000..cfda0e5 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/log.py @@ -0,0 +1,8 @@ +import logging + +access_logger = logging.getLogger('aiohttp.access') +client_logger = logging.getLogger('aiohttp.client') +internal_logger = logging.getLogger('aiohttp.internal') +server_logger = logging.getLogger('aiohttp.server') +web_logger = logging.getLogger('aiohttp.web') +ws_logger = logging.getLogger('aiohttp.websocket') diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/multipart.py b/venv-linux/lib/python3.6/site-packages/aiohttp/multipart.py new file mode 100644 index 0000000..c4a2d1d --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/multipart.py @@ -0,0 +1,959 @@ +import base64 +import binascii +import json +import re +import uuid +import warnings +import zlib +from collections import deque +from types import TracebackType +from typing import ( # noqa + TYPE_CHECKING, + Any, + Dict, + Iterator, + List, + Mapping, + Optional, + Sequence, + Tuple, + Type, + Union, +) +from urllib.parse import parse_qsl, unquote, urlencode + +from multidict import CIMultiDict, CIMultiDictProxy, MultiMapping # noqa + +from .hdrs import ( + CONTENT_DISPOSITION, + CONTENT_ENCODING, + CONTENT_LENGTH, + CONTENT_TRANSFER_ENCODING, + CONTENT_TYPE, +) +from .helpers import CHAR, TOKEN, parse_mimetype, reify +from .http import HeadersParser +from .payload import ( + JsonPayload, + LookupError, + Order, + Payload, + StringPayload, + get_payload, + payload_type, +) +from .streams import StreamReader + +__all__ = ('MultipartReader', 'MultipartWriter', 'BodyPartReader', + 'BadContentDispositionHeader', 'BadContentDispositionParam', + 'parse_content_disposition', 'content_disposition_filename') + + +if TYPE_CHECKING: # pragma: no cover + from .client_reqrep import ClientResponse # noqa + + +class BadContentDispositionHeader(RuntimeWarning): + pass + + +class BadContentDispositionParam(RuntimeWarning): + pass + + +def parse_content_disposition(header: Optional[str]) -> Tuple[Optional[str], + Dict[str, str]]: + + def is_token(string: str) -> bool: + return bool(string) and TOKEN >= set(string) + + def is_quoted(string: str) -> bool: + return string[0] == string[-1] == '"' + + def is_rfc5987(string: str) -> bool: + return is_token(string) and string.count("'") == 2 + + def is_extended_param(string: str) -> bool: + return string.endswith('*') + + def is_continuous_param(string: str) -> bool: + pos = string.find('*') + 1 + if not pos: + return False + substring = string[pos:-1] if string.endswith('*') else string[pos:] + return substring.isdigit() + + def unescape(text: str, *, + chars: str=''.join(map(re.escape, CHAR))) -> str: + return re.sub('\\\\([{}])'.format(chars), '\\1', text) + + if not header: + return None, {} + + disptype, *parts = header.split(';') + if not is_token(disptype): + warnings.warn(BadContentDispositionHeader(header)) + return None, {} + + params = {} # type: Dict[str, str] + while parts: + item = parts.pop(0) + + if '=' not in item: + warnings.warn(BadContentDispositionHeader(header)) + return None, {} + + key, value = item.split('=', 1) + key = key.lower().strip() + value = value.lstrip() + + if key in params: + warnings.warn(BadContentDispositionHeader(header)) + return None, {} + + if not is_token(key): + warnings.warn(BadContentDispositionParam(item)) + continue + + elif is_continuous_param(key): + if is_quoted(value): + value = unescape(value[1:-1]) + elif not is_token(value): + warnings.warn(BadContentDispositionParam(item)) + continue + + elif is_extended_param(key): + if is_rfc5987(value): + encoding, _, value = value.split("'", 2) + encoding = encoding or 'utf-8' + else: + warnings.warn(BadContentDispositionParam(item)) + continue + + try: + value = unquote(value, encoding, 'strict') + except UnicodeDecodeError: # pragma: nocover + warnings.warn(BadContentDispositionParam(item)) + continue + + else: + failed = True + if is_quoted(value): + failed = False + value = unescape(value[1:-1].lstrip('\\/')) + elif is_token(value): + failed = False + elif parts: + # maybe just ; in filename, in any case this is just + # one case fix, for proper fix we need to redesign parser + _value = '%s;%s' % (value, parts[0]) + if is_quoted(_value): + parts.pop(0) + value = unescape(_value[1:-1].lstrip('\\/')) + failed = False + + if failed: + warnings.warn(BadContentDispositionHeader(header)) + return None, {} + + params[key] = value + + return disptype.lower(), params + + +def content_disposition_filename(params: Mapping[str, str], + name: str='filename') -> Optional[str]: + name_suf = '%s*' % name + if not params: + return None + elif name_suf in params: + return params[name_suf] + elif name in params: + return params[name] + else: + parts = [] + fnparams = sorted((key, value) + for key, value in params.items() + if key.startswith(name_suf)) + for num, (key, value) in enumerate(fnparams): + _, tail = key.split('*', 1) + if tail.endswith('*'): + tail = tail[:-1] + if tail == str(num): + parts.append(value) + else: + break + if not parts: + return None + value = ''.join(parts) + if "'" in value: + encoding, _, value = value.split("'", 2) + encoding = encoding or 'utf-8' + return unquote(value, encoding, 'strict') + return value + + +class MultipartResponseWrapper: + """Wrapper around the MultipartReader. + + It takes care about + underlying connection and close it when it needs in. + """ + + def __init__( + self, + resp: 'ClientResponse', + stream: 'MultipartReader', + ) -> None: + self.resp = resp + self.stream = stream + + def __aiter__(self) -> 'MultipartResponseWrapper': + return self + + async def __anext__( + self, + ) -> Union['MultipartReader', 'BodyPartReader']: + part = await self.next() + if part is None: + raise StopAsyncIteration # NOQA + return part + + def at_eof(self) -> bool: + """Returns True when all response data had been read.""" + return self.resp.content.at_eof() + + async def next( + self, + ) -> Optional[Union['MultipartReader', 'BodyPartReader']]: + """Emits next multipart reader object.""" + item = await self.stream.next() + if self.stream.at_eof(): + await self.release() + return item + + async def release(self) -> None: + """Releases the connection gracefully, reading all the content + to the void.""" + await self.resp.release() + + +class BodyPartReader: + """Multipart reader for single body part.""" + + chunk_size = 8192 + + def __init__(self, boundary: bytes, + headers: 'CIMultiDictProxy[str]', + content: StreamReader) -> None: + self.headers = headers + self._boundary = boundary + self._content = content + self._at_eof = False + length = self.headers.get(CONTENT_LENGTH, None) + self._length = int(length) if length is not None else None + self._read_bytes = 0 + # TODO: typeing.Deque is not supported by Python 3.5 + self._unread = deque() # type: Any + self._prev_chunk = None # type: Optional[bytes] + self._content_eof = 0 + self._cache = {} # type: Dict[str, Any] + + def __aiter__(self) -> 'BodyPartReader': + return self + + async def __anext__(self) -> bytes: + part = await self.next() + if part is None: + raise StopAsyncIteration # NOQA + return part + + async def next(self) -> Optional[bytes]: + item = await self.read() + if not item: + return None + return item + + async def read(self, *, decode: bool=False) -> bytes: + """Reads body part data. + + decode: Decodes data following by encoding + method from Content-Encoding header. If it missed + data remains untouched + """ + if self._at_eof: + return b'' + data = bytearray() + while not self._at_eof: + data.extend((await self.read_chunk(self.chunk_size))) + if decode: + return self.decode(data) + return data + + async def read_chunk(self, size: int=chunk_size) -> bytes: + """Reads body part content chunk of the specified size. + + size: chunk size + """ + if self._at_eof: + return b'' + if self._length: + chunk = await self._read_chunk_from_length(size) + else: + chunk = await self._read_chunk_from_stream(size) + + self._read_bytes += len(chunk) + if self._read_bytes == self._length: + self._at_eof = True + if self._at_eof: + clrf = await self._content.readline() + assert b'\r\n' == clrf, \ + 'reader did not read all the data or it is malformed' + return chunk + + async def _read_chunk_from_length(self, size: int) -> bytes: + # Reads body part content chunk of the specified size. + # The body part must has Content-Length header with proper value. + assert self._length is not None, \ + 'Content-Length required for chunked read' + chunk_size = min(size, self._length - self._read_bytes) + chunk = await self._content.read(chunk_size) + return chunk + + async def _read_chunk_from_stream(self, size: int) -> bytes: + # Reads content chunk of body part with unknown length. + # The Content-Length header for body part is not necessary. + assert size >= len(self._boundary) + 2, \ + 'Chunk size must be greater or equal than boundary length + 2' + first_chunk = self._prev_chunk is None + if first_chunk: + self._prev_chunk = await self._content.read(size) + + chunk = await self._content.read(size) + self._content_eof += int(self._content.at_eof()) + assert self._content_eof < 3, "Reading after EOF" + assert self._prev_chunk is not None + window = self._prev_chunk + chunk + sub = b'\r\n' + self._boundary + if first_chunk: + idx = window.find(sub) + else: + idx = window.find(sub, max(0, len(self._prev_chunk) - len(sub))) + if idx >= 0: + # pushing boundary back to content + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", + category=DeprecationWarning) + self._content.unread_data(window[idx:]) + if size > idx: + self._prev_chunk = self._prev_chunk[:idx] + chunk = window[len(self._prev_chunk):idx] + if not chunk: + self._at_eof = True + result = self._prev_chunk + self._prev_chunk = chunk + return result + + async def readline(self) -> bytes: + """Reads body part by line by line.""" + if self._at_eof: + return b'' + + if self._unread: + line = self._unread.popleft() + else: + line = await self._content.readline() + + if line.startswith(self._boundary): + # the very last boundary may not come with \r\n, + # so set single rules for everyone + sline = line.rstrip(b'\r\n') + boundary = self._boundary + last_boundary = self._boundary + b'--' + # ensure that we read exactly the boundary, not something alike + if sline == boundary or sline == last_boundary: + self._at_eof = True + self._unread.append(line) + return b'' + else: + next_line = await self._content.readline() + if next_line.startswith(self._boundary): + line = line[:-2] # strip CRLF but only once + self._unread.append(next_line) + + return line + + async def release(self) -> None: + """Like read(), but reads all the data to the void.""" + if self._at_eof: + return + while not self._at_eof: + await self.read_chunk(self.chunk_size) + + async def text(self, *, encoding: Optional[str]=None) -> str: + """Like read(), but assumes that body part contains text data.""" + data = await self.read(decode=True) + # see https://www.w3.org/TR/html5/forms.html#multipart/form-data-encoding-algorithm # NOQA + # and https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-send # NOQA + encoding = encoding or self.get_charset(default='utf-8') + return data.decode(encoding) + + async def json(self, + *, + encoding: Optional[str]=None) -> Optional[Dict[str, Any]]: + """Like read(), but assumes that body parts contains JSON data.""" + data = await self.read(decode=True) + if not data: + return None + encoding = encoding or self.get_charset(default='utf-8') + return json.loads(data.decode(encoding)) + + async def form(self, *, + encoding: Optional[str]=None) -> List[Tuple[str, str]]: + """Like read(), but assumes that body parts contains form + urlencoded data. + """ + data = await self.read(decode=True) + if not data: + return [] + if encoding is not None: + real_encoding = encoding + else: + real_encoding = self.get_charset(default='utf-8') + return parse_qsl(data.rstrip().decode(real_encoding), + keep_blank_values=True, + encoding=real_encoding) + + def at_eof(self) -> bool: + """Returns True if the boundary was reached or False otherwise.""" + return self._at_eof + + def decode(self, data: bytes) -> bytes: + """Decodes data according the specified Content-Encoding + or Content-Transfer-Encoding headers value. + """ + if CONTENT_TRANSFER_ENCODING in self.headers: + data = self._decode_content_transfer(data) + if CONTENT_ENCODING in self.headers: + return self._decode_content(data) + return data + + def _decode_content(self, data: bytes) -> bytes: + encoding = self.headers.get(CONTENT_ENCODING, '').lower() + + if encoding == 'deflate': + return zlib.decompress(data, -zlib.MAX_WBITS) + elif encoding == 'gzip': + return zlib.decompress(data, 16 + zlib.MAX_WBITS) + elif encoding == 'identity': + return data + else: + raise RuntimeError('unknown content encoding: {}'.format(encoding)) + + def _decode_content_transfer(self, data: bytes) -> bytes: + encoding = self.headers.get(CONTENT_TRANSFER_ENCODING, '').lower() + + if encoding == 'base64': + return base64.b64decode(data) + elif encoding == 'quoted-printable': + return binascii.a2b_qp(data) + elif encoding in ('binary', '8bit', '7bit'): + return data + else: + raise RuntimeError('unknown content transfer encoding: {}' + ''.format(encoding)) + + def get_charset(self, default: str) -> str: + """Returns charset parameter from Content-Type header or default.""" + ctype = self.headers.get(CONTENT_TYPE, '') + mimetype = parse_mimetype(ctype) + return mimetype.parameters.get('charset', default) + + @reify + def name(self) -> Optional[str]: + """Returns name specified in Content-Disposition header or None + if missed or header is malformed. + """ + + _, params = parse_content_disposition( + self.headers.get(CONTENT_DISPOSITION)) + return content_disposition_filename(params, 'name') + + @reify + def filename(self) -> Optional[str]: + """Returns filename specified in Content-Disposition header or None + if missed or header is malformed. + """ + _, params = parse_content_disposition( + self.headers.get(CONTENT_DISPOSITION)) + return content_disposition_filename(params, 'filename') + + +@payload_type(BodyPartReader, order=Order.try_first) +class BodyPartReaderPayload(Payload): + + def __init__(self, value: BodyPartReader, + *args: Any, **kwargs: Any) -> None: + super().__init__(value, *args, **kwargs) + + params = {} # type: Dict[str, str] + if value.name is not None: + params['name'] = value.name + if value.filename is not None: + params['filename'] = value.filename + + if params: + self.set_content_disposition('attachment', True, **params) + + async def write(self, writer: Any) -> None: + field = self._value + chunk = await field.read_chunk(size=2**16) + while chunk: + await writer.write(field.decode(chunk)) + chunk = await field.read_chunk(size=2**16) + + +class MultipartReader: + """Multipart body reader.""" + + #: Response wrapper, used when multipart readers constructs from response. + response_wrapper_cls = MultipartResponseWrapper + #: Multipart reader class, used to handle multipart/* body parts. + #: None points to type(self) + multipart_reader_cls = None + #: Body part reader class for non multipart/* content types. + part_reader_cls = BodyPartReader + + def __init__(self, headers: Mapping[str, str], + content: StreamReader) -> None: + self.headers = headers + self._boundary = ('--' + self._get_boundary()).encode() + self._content = content + self._last_part = None # type: Optional[Union['MultipartReader', BodyPartReader]] # noqa + self._at_eof = False + self._at_bof = True + self._unread = [] # type: List[bytes] + + def __aiter__(self) -> 'MultipartReader': + return self + + async def __anext__( + self, + ) -> Union['MultipartReader', BodyPartReader]: + part = await self.next() + if part is None: + raise StopAsyncIteration # NOQA + return part + + @classmethod + def from_response( + cls, + response: 'ClientResponse', + ) -> MultipartResponseWrapper: + """Constructs reader instance from HTTP response. + + :param response: :class:`~aiohttp.client.ClientResponse` instance + """ + obj = cls.response_wrapper_cls(response, cls(response.headers, + response.content)) + return obj + + def at_eof(self) -> bool: + """Returns True if the final boundary was reached or + False otherwise. + """ + return self._at_eof + + async def next( + self, + ) -> Optional[Union['MultipartReader', BodyPartReader]]: + """Emits the next multipart body part.""" + # So, if we're at BOF, we need to skip till the boundary. + if self._at_eof: + return None + await self._maybe_release_last_part() + if self._at_bof: + await self._read_until_first_boundary() + self._at_bof = False + else: + await self._read_boundary() + if self._at_eof: # we just read the last boundary, nothing to do there + return None + self._last_part = await self.fetch_next_part() + return self._last_part + + async def release(self) -> None: + """Reads all the body parts to the void till the final boundary.""" + while not self._at_eof: + item = await self.next() + if item is None: + break + await item.release() + + async def fetch_next_part( + self, + ) -> Union['MultipartReader', BodyPartReader]: + """Returns the next body part reader.""" + headers = await self._read_headers() + return self._get_part_reader(headers) + + def _get_part_reader( + self, + headers: 'CIMultiDictProxy[str]', + ) -> Union['MultipartReader', BodyPartReader]: + """Dispatches the response by the `Content-Type` header, returning + suitable reader instance. + + :param dict headers: Response headers + """ + ctype = headers.get(CONTENT_TYPE, '') + mimetype = parse_mimetype(ctype) + + if mimetype.type == 'multipart': + if self.multipart_reader_cls is None: + return type(self)(headers, self._content) + return self.multipart_reader_cls(headers, self._content) + else: + return self.part_reader_cls(self._boundary, headers, self._content) + + def _get_boundary(self) -> str: + mimetype = parse_mimetype(self.headers[CONTENT_TYPE]) + + assert mimetype.type == 'multipart', ( + 'multipart/* content type expected' + ) + + if 'boundary' not in mimetype.parameters: + raise ValueError('boundary missed for Content-Type: %s' + % self.headers[CONTENT_TYPE]) + + boundary = mimetype.parameters['boundary'] + if len(boundary) > 70: + raise ValueError('boundary %r is too long (70 chars max)' + % boundary) + + return boundary + + async def _readline(self) -> bytes: + if self._unread: + return self._unread.pop() + return await self._content.readline() + + async def _read_until_first_boundary(self) -> None: + while True: + chunk = await self._readline() + if chunk == b'': + raise ValueError("Could not find starting boundary %r" + % (self._boundary)) + chunk = chunk.rstrip() + if chunk == self._boundary: + return + elif chunk == self._boundary + b'--': + self._at_eof = True + return + + async def _read_boundary(self) -> None: + chunk = (await self._readline()).rstrip() + if chunk == self._boundary: + pass + elif chunk == self._boundary + b'--': + self._at_eof = True + epilogue = await self._readline() + next_line = await self._readline() + + # the epilogue is expected and then either the end of input or the + # parent multipart boundary, if the parent boundary is found then + # it should be marked as unread and handed to the parent for + # processing + if next_line[:2] == b'--': + self._unread.append(next_line) + # otherwise the request is likely missing an epilogue and both + # lines should be passed to the parent for processing + # (this handles the old behavior gracefully) + else: + self._unread.extend([next_line, epilogue]) + else: + raise ValueError('Invalid boundary %r, expected %r' + % (chunk, self._boundary)) + + async def _read_headers(self) -> 'CIMultiDictProxy[str]': + lines = [b''] + while True: + chunk = await self._content.readline() + chunk = chunk.strip() + lines.append(chunk) + if not chunk: + break + parser = HeadersParser() + headers, raw_headers = parser.parse_headers(lines) + return headers + + async def _maybe_release_last_part(self) -> None: + """Ensures that the last read body part is read completely.""" + if self._last_part is not None: + if not self._last_part.at_eof(): + await self._last_part.release() + self._unread.extend(self._last_part._unread) + self._last_part = None + + +_Part = Tuple[Payload, str, str] + + +class MultipartWriter(Payload): + """Multipart body writer.""" + + def __init__(self, subtype: str='mixed', + boundary: Optional[str]=None) -> None: + boundary = boundary if boundary is not None else uuid.uuid4().hex + # The underlying Payload API demands a str (utf-8), not bytes, + # so we need to ensure we don't lose anything during conversion. + # As a result, require the boundary to be ASCII only. + # In both situations. + + try: + self._boundary = boundary.encode('ascii') + except UnicodeEncodeError: + raise ValueError('boundary should contain ASCII only chars') \ + from None + ctype = ('multipart/{}; boundary={}' + .format(subtype, self._boundary_value)) + + super().__init__(None, content_type=ctype) + + self._parts = [] # type: List[_Part] # noqa + + def __enter__(self) -> 'MultipartWriter': + return self + + def __exit__(self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> None: + pass + + def __iter__(self) -> Iterator[_Part]: + return iter(self._parts) + + def __len__(self) -> int: + return len(self._parts) + + def __bool__(self) -> bool: + return True + + _valid_tchar_regex = re.compile(br"\A[!#$%&'*+\-.^_`|~\w]+\Z") + _invalid_qdtext_char_regex = re.compile(br"[\x00-\x08\x0A-\x1F\x7F]") + + @property + def _boundary_value(self) -> str: + """Wrap boundary parameter value in quotes, if necessary. + + Reads self.boundary and returns a unicode sting. + """ + # Refer to RFCs 7231, 7230, 5234. + # + # parameter = token "=" ( token / quoted-string ) + # token = 1*tchar + # quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE + # qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text + # obs-text = %x80-FF + # quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) + # tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" + # / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" + # / DIGIT / ALPHA + # ; any VCHAR, except delimiters + # VCHAR = %x21-7E + value = self._boundary + if re.match(self._valid_tchar_regex, value): + return value.decode('ascii') # cannot fail + + if re.search(self._invalid_qdtext_char_regex, value): + raise ValueError("boundary value contains invalid characters") + + # escape %x5C and %x22 + quoted_value_content = value.replace(b'\\', b'\\\\') + quoted_value_content = quoted_value_content.replace(b'"', b'\\"') + + return '"' + quoted_value_content.decode('ascii') + '"' + + @property + def boundary(self) -> str: + return self._boundary.decode('ascii') + + def append( + self, + obj: Any, + headers: Optional[MultiMapping[str]]=None + ) -> Payload: + if headers is None: + headers = CIMultiDict() + + if isinstance(obj, Payload): + obj.headers.update(headers) + return self.append_payload(obj) + else: + try: + payload = get_payload(obj, headers=headers) + except LookupError: + raise TypeError('Cannot create payload from %r' % obj) + else: + return self.append_payload(payload) + + def append_payload(self, payload: Payload) -> Payload: + """Adds a new body part to multipart writer.""" + # compression + encoding = payload.headers.get( + CONTENT_ENCODING, + '', + ).lower() # type: Optional[str] + if encoding and encoding not in ('deflate', 'gzip', 'identity'): + raise RuntimeError('unknown content encoding: {}'.format(encoding)) + if encoding == 'identity': + encoding = None + + # te encoding + te_encoding = payload.headers.get( + CONTENT_TRANSFER_ENCODING, + '', + ).lower() # type: Optional[str] + if te_encoding not in ('', 'base64', 'quoted-printable', 'binary'): + raise RuntimeError('unknown content transfer encoding: {}' + ''.format(te_encoding)) + if te_encoding == 'binary': + te_encoding = None + + # size + size = payload.size + if size is not None and not (encoding or te_encoding): + payload.headers[CONTENT_LENGTH] = str(size) + + self._parts.append((payload, encoding, te_encoding)) # type: ignore + return payload + + def append_json( + self, + obj: Any, + headers: Optional[MultiMapping[str]]=None + ) -> Payload: + """Helper to append JSON part.""" + if headers is None: + headers = CIMultiDict() + + return self.append_payload(JsonPayload(obj, headers=headers)) + + def append_form( + self, + obj: Union[Sequence[Tuple[str, str]], + Mapping[str, str]], + headers: Optional[MultiMapping[str]]=None + ) -> Payload: + """Helper to append form urlencoded part.""" + assert isinstance(obj, (Sequence, Mapping)) + + if headers is None: + headers = CIMultiDict() + + if isinstance(obj, Mapping): + obj = list(obj.items()) + data = urlencode(obj, doseq=True) + + return self.append_payload( + StringPayload(data, headers=headers, + content_type='application/x-www-form-urlencoded')) + + @property + def size(self) -> Optional[int]: + """Size of the payload.""" + total = 0 + for part, encoding, te_encoding in self._parts: + if encoding or te_encoding or part.size is None: + return None + + total += int( + 2 + len(self._boundary) + 2 + # b'--'+self._boundary+b'\r\n' + part.size + len(part._binary_headers) + + 2 # b'\r\n' + ) + + total += 2 + len(self._boundary) + 4 # b'--'+self._boundary+b'--\r\n' + return total + + async def write(self, writer: Any, + close_boundary: bool=True) -> None: + """Write body.""" + for part, encoding, te_encoding in self._parts: + await writer.write(b'--' + self._boundary + b'\r\n') + await writer.write(part._binary_headers) + + if encoding or te_encoding: + w = MultipartPayloadWriter(writer) + if encoding: + w.enable_compression(encoding) + if te_encoding: + w.enable_encoding(te_encoding) + await part.write(w) # type: ignore + await w.write_eof() + else: + await part.write(writer) + + await writer.write(b'\r\n') + + if close_boundary: + await writer.write(b'--' + self._boundary + b'--\r\n') + + +class MultipartPayloadWriter: + + def __init__(self, writer: Any) -> None: + self._writer = writer + self._encoding = None # type: Optional[str] + self._compress = None # type: Any + self._encoding_buffer = None # type: Optional[bytearray] + + def enable_encoding(self, encoding: str) -> None: + if encoding == 'base64': + self._encoding = encoding + self._encoding_buffer = bytearray() + elif encoding == 'quoted-printable': + self._encoding = 'quoted-printable' + + def enable_compression(self, encoding: str='deflate') -> None: + zlib_mode = (16 + zlib.MAX_WBITS + if encoding == 'gzip' else -zlib.MAX_WBITS) + self._compress = zlib.compressobj(wbits=zlib_mode) + + async def write_eof(self) -> None: + if self._compress is not None: + chunk = self._compress.flush() + if chunk: + self._compress = None + await self.write(chunk) + + if self._encoding == 'base64': + if self._encoding_buffer: + await self._writer.write(base64.b64encode( + self._encoding_buffer)) + + async def write(self, chunk: bytes) -> None: + if self._compress is not None: + if chunk: + chunk = self._compress.compress(chunk) + if not chunk: + return + + if self._encoding == 'base64': + buf = self._encoding_buffer + assert buf is not None + buf.extend(chunk) + + if buf: + div, mod = divmod(len(buf), 3) + enc_chunk, self._encoding_buffer = ( + buf[:div * 3], buf[div * 3:]) + if enc_chunk: + b64chunk = base64.b64encode(enc_chunk) + await self._writer.write(b64chunk) + elif self._encoding == 'quoted-printable': + await self._writer.write(binascii.b2a_qp(chunk)) + else: + await self._writer.write(chunk) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/payload.py b/venv-linux/lib/python3.6/site-packages/aiohttp/payload.py new file mode 100644 index 0000000..7e63302 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/payload.py @@ -0,0 +1,456 @@ +import asyncio +import enum +import io +import json +import mimetypes +import os +import warnings +from abc import ABC, abstractmethod +from itertools import chain +from typing import ( + IO, + TYPE_CHECKING, + Any, + ByteString, + Dict, + Iterable, + Optional, + Text, + TextIO, + Tuple, + Type, + Union, +) + +from multidict import CIMultiDict + +from . import hdrs +from .abc import AbstractStreamWriter +from .helpers import ( + PY_36, + content_disposition_header, + guess_filename, + parse_mimetype, + sentinel, +) +from .streams import DEFAULT_LIMIT, StreamReader +from .typedefs import JSONEncoder, _CIMultiDict + +__all__ = ('PAYLOAD_REGISTRY', 'get_payload', 'payload_type', 'Payload', + 'BytesPayload', 'StringPayload', + 'IOBasePayload', 'BytesIOPayload', 'BufferedReaderPayload', + 'TextIOPayload', 'StringIOPayload', 'JsonPayload', + 'AsyncIterablePayload') + +TOO_LARGE_BYTES_BODY = 2 ** 20 # 1 MB + + +if TYPE_CHECKING: # pragma: no cover + from typing import List # noqa + + +class LookupError(Exception): + pass + + +class Order(str, enum.Enum): + normal = 'normal' + try_first = 'try_first' + try_last = 'try_last' + + +def get_payload(data: Any, *args: Any, **kwargs: Any) -> 'Payload': + return PAYLOAD_REGISTRY.get(data, *args, **kwargs) + + +def register_payload(factory: Type['Payload'], + type: Any, + *, + order: Order=Order.normal) -> None: + PAYLOAD_REGISTRY.register(factory, type, order=order) + + +class payload_type: + + def __init__(self, type: Any, *, order: Order=Order.normal) -> None: + self.type = type + self.order = order + + def __call__(self, factory: Type['Payload']) -> Type['Payload']: + register_payload(factory, self.type, order=self.order) + return factory + + +class PayloadRegistry: + """Payload registry. + + note: we need zope.interface for more efficient adapter search + """ + + def __init__(self) -> None: + self._first = [] # type: List[Tuple[Type[Payload], Any]] + self._normal = [] # type: List[Tuple[Type[Payload], Any]] + self._last = [] # type: List[Tuple[Type[Payload], Any]] + + def get(self, + data: Any, + *args: Any, + _CHAIN: Any=chain, + **kwargs: Any) -> 'Payload': + if isinstance(data, Payload): + return data + for factory, type in _CHAIN(self._first, self._normal, self._last): + if isinstance(data, type): + return factory(data, *args, **kwargs) + + raise LookupError() + + def register(self, + factory: Type['Payload'], + type: Any, + *, + order: Order=Order.normal) -> None: + if order is Order.try_first: + self._first.append((factory, type)) + elif order is Order.normal: + self._normal.append((factory, type)) + elif order is Order.try_last: + self._last.append((factory, type)) + else: + raise ValueError("Unsupported order {!r}".format(order)) + + +class Payload(ABC): + + _default_content_type = 'application/octet-stream' # type: str + _size = None # type: Optional[int] + + def __init__(self, + value: Any, + headers: Optional[ + Union[ + _CIMultiDict, + Dict[str, str], + Iterable[Tuple[str, str]] + ] + ] = None, + content_type: Optional[str]=sentinel, + filename: Optional[str]=None, + encoding: Optional[str]=None, + **kwargs: Any) -> None: + self._encoding = encoding + self._filename = filename + self._headers = CIMultiDict() # type: _CIMultiDict + self._value = value + if content_type is not sentinel and content_type is not None: + self._headers[hdrs.CONTENT_TYPE] = content_type + elif self._filename is not None: + content_type = mimetypes.guess_type(self._filename)[0] + if content_type is None: + content_type = self._default_content_type + self._headers[hdrs.CONTENT_TYPE] = content_type + else: + self._headers[hdrs.CONTENT_TYPE] = self._default_content_type + self._headers.update(headers or {}) + + @property + def size(self) -> Optional[int]: + """Size of the payload.""" + return self._size + + @property + def filename(self) -> Optional[str]: + """Filename of the payload.""" + return self._filename + + @property + def headers(self) -> _CIMultiDict: + """Custom item headers""" + return self._headers + + @property + def _binary_headers(self) -> bytes: + return ''.join( + [k + ': ' + v + '\r\n' for k, v in self.headers.items()] + ).encode('utf-8') + b'\r\n' + + @property + def encoding(self) -> Optional[str]: + """Payload encoding""" + return self._encoding + + @property + def content_type(self) -> str: + """Content type""" + return self._headers[hdrs.CONTENT_TYPE] + + def set_content_disposition(self, + disptype: str, + quote_fields: bool=True, + **params: Any) -> None: + """Sets ``Content-Disposition`` header.""" + self._headers[hdrs.CONTENT_DISPOSITION] = content_disposition_header( + disptype, quote_fields=quote_fields, **params) + + @abstractmethod + async def write(self, writer: AbstractStreamWriter) -> None: + """Write payload. + + writer is an AbstractStreamWriter instance: + """ + + +class BytesPayload(Payload): + + def __init__(self, + value: ByteString, + *args: Any, + **kwargs: Any) -> None: + if not isinstance(value, (bytes, bytearray, memoryview)): + raise TypeError("value argument must be byte-ish, not {!r}" + .format(type(value))) + + if 'content_type' not in kwargs: + kwargs['content_type'] = 'application/octet-stream' + + super().__init__(value, *args, **kwargs) + + self._size = len(value) + + if self._size > TOO_LARGE_BYTES_BODY: + if PY_36: + kwargs = {'source': self} + else: + kwargs = {} + warnings.warn("Sending a large body directly with raw bytes might" + " lock the event loop. You should probably pass an " + "io.BytesIO object instead", ResourceWarning, + **kwargs) + + async def write(self, writer: AbstractStreamWriter) -> None: + await writer.write(self._value) + + +class StringPayload(BytesPayload): + + def __init__(self, + value: Text, + *args: Any, + encoding: Optional[str]=None, + content_type: Optional[str]=None, + **kwargs: Any) -> None: + + if encoding is None: + if content_type is None: + real_encoding = 'utf-8' + content_type = 'text/plain; charset=utf-8' + else: + mimetype = parse_mimetype(content_type) + real_encoding = mimetype.parameters.get('charset', 'utf-8') + else: + if content_type is None: + content_type = 'text/plain; charset=%s' % encoding + real_encoding = encoding + + super().__init__( + value.encode(real_encoding), + encoding=real_encoding, + content_type=content_type, + *args, + **kwargs, + ) + + +class StringIOPayload(StringPayload): + + def __init__(self, + value: IO[str], + *args: Any, + **kwargs: Any) -> None: + super().__init__(value.read(), *args, **kwargs) + + +class IOBasePayload(Payload): + + def __init__(self, + value: IO[Any], + disposition: str='attachment', + *args: Any, + **kwargs: Any) -> None: + if 'filename' not in kwargs: + kwargs['filename'] = guess_filename(value) + + super().__init__(value, *args, **kwargs) + + if self._filename is not None and disposition is not None: + if hdrs.CONTENT_DISPOSITION not in self.headers: + self.set_content_disposition( + disposition, filename=self._filename + ) + + async def write(self, writer: AbstractStreamWriter) -> None: + loop = asyncio.get_event_loop() + try: + chunk = await loop.run_in_executor( + None, self._value.read, DEFAULT_LIMIT + ) + while chunk: + await writer.write(chunk) + chunk = await loop.run_in_executor( + None, self._value.read, DEFAULT_LIMIT + ) + finally: + await loop.run_in_executor(None, self._value.close) + + +class TextIOPayload(IOBasePayload): + + def __init__(self, + value: TextIO, + *args: Any, + encoding: Optional[str]=None, + content_type: Optional[str]=None, + **kwargs: Any) -> None: + + if encoding is None: + if content_type is None: + encoding = 'utf-8' + content_type = 'text/plain; charset=utf-8' + else: + mimetype = parse_mimetype(content_type) + encoding = mimetype.parameters.get('charset', 'utf-8') + else: + if content_type is None: + content_type = 'text/plain; charset=%s' % encoding + + super().__init__( + value, + content_type=content_type, + encoding=encoding, + *args, + **kwargs, + ) + + @property + def size(self) -> Optional[int]: + try: + return os.fstat(self._value.fileno()).st_size - self._value.tell() + except OSError: + return None + + async def write(self, writer: AbstractStreamWriter) -> None: + loop = asyncio.get_event_loop() + try: + chunk = await loop.run_in_executor( + None, self._value.read, DEFAULT_LIMIT + ) + while chunk: + await writer.write(chunk.encode(self._encoding)) + chunk = await loop.run_in_executor( + None, self._value.read, DEFAULT_LIMIT + ) + finally: + await loop.run_in_executor(None, self._value.close) + + +class BytesIOPayload(IOBasePayload): + + @property + def size(self) -> int: + position = self._value.tell() + end = self._value.seek(0, os.SEEK_END) + self._value.seek(position) + return end - position + + +class BufferedReaderPayload(IOBasePayload): + + @property + def size(self) -> Optional[int]: + try: + return os.fstat(self._value.fileno()).st_size - self._value.tell() + except OSError: + # data.fileno() is not supported, e.g. + # io.BufferedReader(io.BytesIO(b'data')) + return None + + +class JsonPayload(BytesPayload): + + def __init__(self, + value: Any, + encoding: str='utf-8', + content_type: str='application/json', + dumps: JSONEncoder=json.dumps, + *args: Any, + **kwargs: Any) -> None: + + super().__init__( + dumps(value).encode(encoding), + content_type=content_type, encoding=encoding, *args, **kwargs) + + +if TYPE_CHECKING: # pragma: no cover + from typing import AsyncIterator, AsyncIterable + + _AsyncIterator = AsyncIterator[bytes] + _AsyncIterable = AsyncIterable[bytes] +else: + from collections.abc import AsyncIterable, AsyncIterator + + _AsyncIterator = AsyncIterator + _AsyncIterable = AsyncIterable + + +class AsyncIterablePayload(Payload): + + _iter = None # type: Optional[_AsyncIterator] + + def __init__(self, + value: _AsyncIterable, + *args: Any, + **kwargs: Any) -> None: + if not isinstance(value, AsyncIterable): + raise TypeError("value argument must support " + "collections.abc.AsyncIterablebe interface, " + "got {!r}".format(type(value))) + + if 'content_type' not in kwargs: + kwargs['content_type'] = 'application/octet-stream' + + super().__init__(value, *args, **kwargs) + + self._iter = value.__aiter__() + + async def write(self, writer: AbstractStreamWriter) -> None: + if self._iter: + try: + # iter is not None check prevents rare cases + # when the case iterable is used twice + while True: + chunk = await self._iter.__anext__() + await writer.write(chunk) + except StopAsyncIteration: + self._iter = None + + +class StreamReaderPayload(AsyncIterablePayload): + + def __init__(self, value: StreamReader, *args: Any, **kwargs: Any) -> None: + super().__init__(value.iter_any(), *args, **kwargs) + + +PAYLOAD_REGISTRY = PayloadRegistry() +PAYLOAD_REGISTRY.register(BytesPayload, (bytes, bytearray, memoryview)) +PAYLOAD_REGISTRY.register(StringPayload, str) +PAYLOAD_REGISTRY.register(StringIOPayload, io.StringIO) +PAYLOAD_REGISTRY.register(TextIOPayload, io.TextIOBase) +PAYLOAD_REGISTRY.register(BytesIOPayload, io.BytesIO) +PAYLOAD_REGISTRY.register( + BufferedReaderPayload, (io.BufferedReader, io.BufferedRandom)) +PAYLOAD_REGISTRY.register(IOBasePayload, io.IOBase) +PAYLOAD_REGISTRY.register(StreamReaderPayload, StreamReader) +# try_last for giving a chance to more specialized async interables like +# multidict.BodyPartReaderPayload override the default +PAYLOAD_REGISTRY.register(AsyncIterablePayload, AsyncIterable, + order=Order.try_last) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/payload_streamer.py b/venv-linux/lib/python3.6/site-packages/aiohttp/payload_streamer.py new file mode 100644 index 0000000..e76bf43 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/payload_streamer.py @@ -0,0 +1,74 @@ +""" Payload implemenation for coroutines as data provider. + +As a simple case, you can upload data from file:: + + @aiohttp.streamer + async def file_sender(writer, file_name=None): + with open(file_name, 'rb') as f: + chunk = f.read(2**16) + while chunk: + await writer.write(chunk) + + chunk = f.read(2**16) + +Then you can use `file_sender` like this: + + async with session.post('http://httpbin.org/post', + data=file_sender(file_name='huge_file')) as resp: + print(await resp.text()) + +..note:: Coroutine must accept `writer` as first argument + +""" + +import asyncio +import warnings +from typing import Any, Awaitable, Callable, Dict, Tuple + +from .abc import AbstractStreamWriter +from .payload import Payload, payload_type + +__all__ = ('streamer',) + + +class _stream_wrapper: + + def __init__(self, + coro: Callable[..., Awaitable[None]], + args: Tuple[Any, ...], + kwargs: Dict[str, Any]) -> None: + self.coro = asyncio.coroutine(coro) + self.args = args + self.kwargs = kwargs + + async def __call__(self, writer: AbstractStreamWriter) -> None: + await self.coro(writer, *self.args, **self.kwargs) + + +class streamer: + + def __init__(self, coro: Callable[..., Awaitable[None]]) -> None: + warnings.warn("@streamer is deprecated, use async generators instead", + DeprecationWarning, + stacklevel=2) + self.coro = coro + + def __call__(self, *args: Any, **kwargs: Any) -> _stream_wrapper: + return _stream_wrapper(self.coro, args, kwargs) + + +@payload_type(_stream_wrapper) +class StreamWrapperPayload(Payload): + + async def write(self, writer: AbstractStreamWriter) -> None: + await self._value(writer) + + +@payload_type(streamer) +class StreamPayload(StreamWrapperPayload): + + def __init__(self, value: Any, *args: Any, **kwargs: Any) -> None: + super().__init__(value(), *args, **kwargs) + + async def write(self, writer: AbstractStreamWriter) -> None: + await self._value(writer) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/py.typed b/venv-linux/lib/python3.6/site-packages/aiohttp/py.typed new file mode 100644 index 0000000..20a7439 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/py.typed @@ -0,0 +1 @@ +Marker \ No newline at end of file diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/pytest_plugin.py b/venv-linux/lib/python3.6/site-packages/aiohttp/pytest_plugin.py new file mode 100644 index 0000000..c01ca6c --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/pytest_plugin.py @@ -0,0 +1,352 @@ +import asyncio +import contextlib +import warnings +from collections.abc import Callable + +import pytest + +from aiohttp.helpers import PY_37, isasyncgenfunction +from aiohttp.web import Application + +from .test_utils import ( + BaseTestServer, + RawTestServer, + TestClient, + TestServer, + loop_context, + setup_test_loop, + teardown_test_loop, +) +from .test_utils import unused_port as _unused_port + +try: + import uvloop +except ImportError: # pragma: no cover + uvloop = None + +try: + import tokio +except ImportError: # pragma: no cover + tokio = None + + +def pytest_addoption(parser): # type: ignore + parser.addoption( + '--aiohttp-fast', action='store_true', default=False, + help='run tests faster by disabling extra checks') + parser.addoption( + '--aiohttp-loop', action='store', default='pyloop', + help='run tests with specific loop: pyloop, uvloop, tokio or all') + parser.addoption( + '--aiohttp-enable-loop-debug', action='store_true', default=False, + help='enable event loop debug mode') + + +def pytest_fixture_setup(fixturedef): # type: ignore + """ + Allow fixtures to be coroutines. Run coroutine fixtures in an event loop. + """ + func = fixturedef.func + + if isasyncgenfunction(func): + # async generator fixture + is_async_gen = True + elif asyncio.iscoroutinefunction(func): + # regular async fixture + is_async_gen = False + else: + # not an async fixture, nothing to do + return + + strip_request = False + if 'request' not in fixturedef.argnames: + fixturedef.argnames += ('request',) + strip_request = True + + def wrapper(*args, **kwargs): # type: ignore + request = kwargs['request'] + if strip_request: + del kwargs['request'] + + # if neither the fixture nor the test use the 'loop' fixture, + # 'getfixturevalue' will fail because the test is not parameterized + # (this can be removed someday if 'loop' is no longer parameterized) + if 'loop' not in request.fixturenames: + raise Exception( + "Asynchronous fixtures must depend on the 'loop' fixture or " + "be used in tests depending from it." + ) + + _loop = request.getfixturevalue('loop') + + if is_async_gen: + # for async generators, we need to advance the generator once, + # then advance it again in a finalizer + gen = func(*args, **kwargs) + + def finalizer(): # type: ignore + try: + return _loop.run_until_complete(gen.__anext__()) + except StopAsyncIteration: # NOQA + pass + + request.addfinalizer(finalizer) + return _loop.run_until_complete(gen.__anext__()) + else: + return _loop.run_until_complete(func(*args, **kwargs)) + + fixturedef.func = wrapper + + +@pytest.fixture +def fast(request): # type: ignore + """--fast config option""" + return request.config.getoption('--aiohttp-fast') + + +@pytest.fixture +def loop_debug(request): # type: ignore + """--enable-loop-debug config option""" + return request.config.getoption('--aiohttp-enable-loop-debug') + + +@contextlib.contextmanager +def _runtime_warning_context(): # type: ignore + """ + Context manager which checks for RuntimeWarnings, specifically to + avoid "coroutine 'X' was never awaited" warnings being missed. + + If RuntimeWarnings occur in the context a RuntimeError is raised. + """ + with warnings.catch_warnings(record=True) as _warnings: + yield + rw = ['{w.filename}:{w.lineno}:{w.message}'.format(w=w) + for w in _warnings # type: ignore + if w.category == RuntimeWarning] + if rw: + raise RuntimeError('{} Runtime Warning{},\n{}'.format( + len(rw), + '' if len(rw) == 1 else 's', + '\n'.join(rw) + )) + + +@contextlib.contextmanager +def _passthrough_loop_context(loop, fast=False): # type: ignore + """ + setups and tears down a loop unless one is passed in via the loop + argument when it's passed straight through. + """ + if loop: + # loop already exists, pass it straight through + yield loop + else: + # this shadows loop_context's standard behavior + loop = setup_test_loop() + yield loop + teardown_test_loop(loop, fast=fast) + + +def pytest_pycollect_makeitem(collector, name, obj): # type: ignore + """ + Fix pytest collecting for coroutines. + """ + if collector.funcnamefilter(name) and asyncio.iscoroutinefunction(obj): + return list(collector._genfunctions(name, obj)) + + +def pytest_pyfunc_call(pyfuncitem): # type: ignore + """ + Run coroutines in an event loop instead of a normal function call. + """ + fast = pyfuncitem.config.getoption("--aiohttp-fast") + if asyncio.iscoroutinefunction(pyfuncitem.function): + existing_loop = pyfuncitem.funcargs.get('proactor_loop')\ + or pyfuncitem.funcargs.get('loop', None) + with _runtime_warning_context(): + with _passthrough_loop_context(existing_loop, fast=fast) as _loop: + testargs = {arg: pyfuncitem.funcargs[arg] + for arg in pyfuncitem._fixtureinfo.argnames} + _loop.run_until_complete(pyfuncitem.obj(**testargs)) + + return True + + +def pytest_generate_tests(metafunc): # type: ignore + if 'loop_factory' not in metafunc.fixturenames: + return + + loops = metafunc.config.option.aiohttp_loop + avail_factories = {'pyloop': asyncio.DefaultEventLoopPolicy} + + if uvloop is not None: # pragma: no cover + avail_factories['uvloop'] = uvloop.EventLoopPolicy + + if tokio is not None: # pragma: no cover + avail_factories['tokio'] = tokio.EventLoopPolicy + + if loops == 'all': + loops = 'pyloop,uvloop?,tokio?' + + factories = {} # type: ignore + for name in loops.split(','): + required = not name.endswith('?') + name = name.strip(' ?') + if name not in avail_factories: # pragma: no cover + if required: + raise ValueError( + "Unknown loop '%s', available loops: %s" % ( + name, list(factories.keys()))) + else: + continue + factories[name] = avail_factories[name] + metafunc.parametrize("loop_factory", + list(factories.values()), + ids=list(factories.keys())) + + +@pytest.fixture +def loop(loop_factory, fast, loop_debug): # type: ignore + """Return an instance of the event loop.""" + policy = loop_factory() + asyncio.set_event_loop_policy(policy) + with loop_context(fast=fast) as _loop: + if loop_debug: + _loop.set_debug(True) # pragma: no cover + asyncio.set_event_loop(_loop) + yield _loop + + +@pytest.fixture +def proactor_loop(): # type: ignore + if not PY_37: + policy = asyncio.get_event_loop_policy() + policy._loop_factory = asyncio.ProactorEventLoop # type: ignore + else: + policy = asyncio.WindowsProactorEventLoopPolicy() # type: ignore + asyncio.set_event_loop_policy(policy) + + with loop_context(policy.new_event_loop) as _loop: + asyncio.set_event_loop(_loop) + yield _loop + + +@pytest.fixture +def unused_port(aiohttp_unused_port): # type: ignore # pragma: no cover + warnings.warn("Deprecated, use aiohttp_unused_port fixture instead", + DeprecationWarning) + return aiohttp_unused_port + + +@pytest.fixture +def aiohttp_unused_port(): # type: ignore + """Return a port that is unused on the current host.""" + return _unused_port + + +@pytest.fixture +def aiohttp_server(loop): # type: ignore + """Factory to create a TestServer instance, given an app. + + aiohttp_server(app, **kwargs) + """ + servers = [] + + async def go(app, *, port=None, **kwargs): # type: ignore + server = TestServer(app, port=port) + await server.start_server(loop=loop, **kwargs) + servers.append(server) + return server + + yield go + + async def finalize(): # type: ignore + while servers: + await servers.pop().close() + + loop.run_until_complete(finalize()) + + +@pytest.fixture +def test_server(aiohttp_server): # type: ignore # pragma: no cover + warnings.warn("Deprecated, use aiohttp_server fixture instead", + DeprecationWarning) + return aiohttp_server + + +@pytest.fixture +def aiohttp_raw_server(loop): # type: ignore + """Factory to create a RawTestServer instance, given a web handler. + + aiohttp_raw_server(handler, **kwargs) + """ + servers = [] + + async def go(handler, *, port=None, **kwargs): # type: ignore + server = RawTestServer(handler, port=port) + await server.start_server(loop=loop, **kwargs) + servers.append(server) + return server + + yield go + + async def finalize(): # type: ignore + while servers: + await servers.pop().close() + + loop.run_until_complete(finalize()) + + +@pytest.fixture +def raw_test_server(aiohttp_raw_server): # type: ignore # pragma: no cover + warnings.warn("Deprecated, use aiohttp_raw_server fixture instead", + DeprecationWarning) + return aiohttp_raw_server + + +@pytest.fixture +def aiohttp_client(loop): # type: ignore + """Factory to create a TestClient instance. + + aiohttp_client(app, **kwargs) + aiohttp_client(server, **kwargs) + aiohttp_client(raw_server, **kwargs) + """ + clients = [] + + async def go(__param, *args, server_kwargs=None, **kwargs): # type: ignore + + if (isinstance(__param, Callable) and # type: ignore + not isinstance(__param, (Application, BaseTestServer))): + __param = __param(loop, *args, **kwargs) + kwargs = {} + else: + assert not args, "args should be empty" + + if isinstance(__param, Application): + server_kwargs = server_kwargs or {} + server = TestServer(__param, loop=loop, **server_kwargs) + client = TestClient(server, loop=loop, **kwargs) + elif isinstance(__param, BaseTestServer): + client = TestClient(__param, loop=loop, **kwargs) + else: + raise ValueError("Unknown argument type: %r" % type(__param)) + + await client.start_server() + clients.append(client) + return client + + yield go + + async def finalize(): # type: ignore + while clients: + await clients.pop().close() + + loop.run_until_complete(finalize()) + + +@pytest.fixture +def test_client(aiohttp_client): # type: ignore # pragma: no cover + warnings.warn("Deprecated, use aiohttp_client fixture instead", + DeprecationWarning) + return aiohttp_client diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/resolver.py b/venv-linux/lib/python3.6/site-packages/aiohttp/resolver.py new file mode 100644 index 0000000..e0b6e13 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/resolver.py @@ -0,0 +1,112 @@ +import asyncio +import socket +from typing import Any, Dict, List, Optional + +from .abc import AbstractResolver +from .helpers import get_running_loop + +__all__ = ('ThreadedResolver', 'AsyncResolver', 'DefaultResolver') + +try: + import aiodns + # aiodns_default = hasattr(aiodns.DNSResolver, 'gethostbyname') +except ImportError: # pragma: no cover + aiodns = None + +aiodns_default = False + + +class ThreadedResolver(AbstractResolver): + """Use Executor for synchronous getaddrinfo() calls, which defaults to + concurrent.futures.ThreadPoolExecutor. + """ + + def __init__(self, loop: Optional[asyncio.AbstractEventLoop]=None) -> None: + self._loop = get_running_loop(loop) + + async def resolve(self, host: str, port: int=0, + family: int=socket.AF_INET) -> List[Dict[str, Any]]: + infos = await self._loop.getaddrinfo( + host, port, type=socket.SOCK_STREAM, family=family) + + hosts = [] + for family, _, proto, _, address in infos: + hosts.append( + {'hostname': host, + 'host': address[0], 'port': address[1], + 'family': family, 'proto': proto, + 'flags': socket.AI_NUMERICHOST}) + + return hosts + + async def close(self) -> None: + pass + + +class AsyncResolver(AbstractResolver): + """Use the `aiodns` package to make asynchronous DNS lookups""" + + def __init__(self, loop: Optional[asyncio.AbstractEventLoop]=None, + *args: Any, **kwargs: Any) -> None: + if aiodns is None: + raise RuntimeError("Resolver requires aiodns library") + + self._loop = get_running_loop(loop) + self._resolver = aiodns.DNSResolver(*args, loop=loop, **kwargs) + + if not hasattr(self._resolver, 'gethostbyname'): + # aiodns 1.1 is not available, fallback to DNSResolver.query + self.resolve = self._resolve_with_query # type: ignore + + async def resolve(self, host: str, port: int=0, + family: int=socket.AF_INET) -> List[Dict[str, Any]]: + try: + resp = await self._resolver.gethostbyname(host, family) + except aiodns.error.DNSError as exc: + msg = exc.args[1] if len(exc.args) >= 1 else "DNS lookup failed" + raise OSError(msg) from exc + hosts = [] + for address in resp.addresses: + hosts.append( + {'hostname': host, + 'host': address, 'port': port, + 'family': family, 'proto': 0, + 'flags': socket.AI_NUMERICHOST}) + + if not hosts: + raise OSError("DNS lookup failed") + + return hosts + + async def _resolve_with_query( + self, host: str, port: int=0, + family: int=socket.AF_INET) -> List[Dict[str, Any]]: + if family == socket.AF_INET6: + qtype = 'AAAA' + else: + qtype = 'A' + + try: + resp = await self._resolver.query(host, qtype) + except aiodns.error.DNSError as exc: + msg = exc.args[1] if len(exc.args) >= 1 else "DNS lookup failed" + raise OSError(msg) from exc + + hosts = [] + for rr in resp: + hosts.append( + {'hostname': host, + 'host': rr.host, 'port': port, + 'family': family, 'proto': 0, + 'flags': socket.AI_NUMERICHOST}) + + if not hosts: + raise OSError("DNS lookup failed") + + return hosts + + async def close(self) -> None: + return self._resolver.cancel() + + +DefaultResolver = AsyncResolver if aiodns_default else ThreadedResolver diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/signals.py b/venv-linux/lib/python3.6/site-packages/aiohttp/signals.py new file mode 100644 index 0000000..dda0dab --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/signals.py @@ -0,0 +1,34 @@ +from aiohttp.frozenlist import FrozenList + +__all__ = ('Signal',) + + +class Signal(FrozenList): + """Coroutine-based signal implementation. + + To connect a callback to a signal, use any list method. + + Signals are fired using the send() coroutine, which takes named + arguments. + """ + + __slots__ = ('_owner',) + + def __init__(self, owner): + super().__init__() + self._owner = owner + + def __repr__(self): + return ''.format(self._owner, + self.frozen, + list(self)) + + async def send(self, *args, **kwargs): + """ + Sends data to all registered receivers. + """ + if not self.frozen: + raise RuntimeError("Cannot send non-frozen signal.") + + for receiver in self: + await receiver(*args, **kwargs) # type: ignore diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/signals.pyi b/venv-linux/lib/python3.6/site-packages/aiohttp/signals.pyi new file mode 100644 index 0000000..efdbde7 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/signals.pyi @@ -0,0 +1,17 @@ +from typing import Any, Generic, TypeVar + +from aiohttp.frozenlist import FrozenList + +__all__ = ('Signal',) + + +_T = TypeVar('_T') + + +class Signal(FrozenList[_T], Generic[_T]): + + def __init__(self, owner: Any) -> None: ... + + def __repr__(self) -> str: ... + + async def send(self, *args: Any, **kwargs: Any) -> None: ... diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/streams.py b/venv-linux/lib/python3.6/site-packages/aiohttp/streams.py new file mode 100644 index 0000000..c76685c --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/streams.py @@ -0,0 +1,634 @@ +import asyncio +import collections +import warnings +from typing import List # noqa +from typing import Awaitable, Callable, Generic, Optional, Tuple, TypeVar + +from .base_protocol import BaseProtocol +from .helpers import BaseTimerContext, set_exception, set_result +from .log import internal_logger + +try: # pragma: no cover + from typing import Deque # noqa +except ImportError: + from typing_extensions import Deque # noqa + +__all__ = ( + 'EMPTY_PAYLOAD', 'EofStream', 'StreamReader', 'DataQueue', + 'FlowControlDataQueue') + +DEFAULT_LIMIT = 2 ** 16 + +_T = TypeVar('_T') + + +class EofStream(Exception): + """eof stream indication.""" + + +class AsyncStreamIterator(Generic[_T]): + + def __init__(self, read_func: Callable[[], Awaitable[_T]]) -> None: + self.read_func = read_func + + def __aiter__(self) -> 'AsyncStreamIterator[_T]': + return self + + async def __anext__(self) -> _T: + try: + rv = await self.read_func() + except EofStream: + raise StopAsyncIteration # NOQA + if rv == b'': + raise StopAsyncIteration # NOQA + return rv + + +class ChunkTupleAsyncStreamIterator: + + def __init__(self, stream: 'StreamReader') -> None: + self._stream = stream + + def __aiter__(self) -> 'ChunkTupleAsyncStreamIterator': + return self + + async def __anext__(self) -> Tuple[bytes, bool]: + rv = await self._stream.readchunk() + if rv == (b'', False): + raise StopAsyncIteration # NOQA + return rv + + +class AsyncStreamReaderMixin: + + def __aiter__(self) -> AsyncStreamIterator[bytes]: + return AsyncStreamIterator(self.readline) # type: ignore + + def iter_chunked(self, n: int) -> AsyncStreamIterator[bytes]: + """Returns an asynchronous iterator that yields chunks of size n. + + Python-3.5 available for Python 3.5+ only + """ + return AsyncStreamIterator(lambda: self.read(n)) # type: ignore + + def iter_any(self) -> AsyncStreamIterator[bytes]: + """Returns an asynchronous iterator that yields all the available + data as soon as it is received + + Python-3.5 available for Python 3.5+ only + """ + return AsyncStreamIterator(self.readany) # type: ignore + + def iter_chunks(self) -> ChunkTupleAsyncStreamIterator: + """Returns an asynchronous iterator that yields chunks of data + as they are received by the server. The yielded objects are tuples + of (bytes, bool) as returned by the StreamReader.readchunk method. + + Python-3.5 available for Python 3.5+ only + """ + return ChunkTupleAsyncStreamIterator(self) # type: ignore + + +class StreamReader(AsyncStreamReaderMixin): + """An enhancement of asyncio.StreamReader. + + Supports asynchronous iteration by line, chunk or as available:: + + async for line in reader: + ... + async for chunk in reader.iter_chunked(1024): + ... + async for slice in reader.iter_any(): + ... + + """ + + total_bytes = 0 + + def __init__(self, protocol: BaseProtocol, + *, limit: int=DEFAULT_LIMIT, + timer: Optional[BaseTimerContext]=None, + loop: Optional[asyncio.AbstractEventLoop]=None) -> None: + self._protocol = protocol + self._low_water = limit + self._high_water = limit * 2 + if loop is None: + loop = asyncio.get_event_loop() + self._loop = loop + self._size = 0 + self._cursor = 0 + self._http_chunk_splits = None # type: Optional[List[int]] + self._buffer = collections.deque() # type: Deque[bytes] + self._buffer_offset = 0 + self._eof = False + self._waiter = None # type: Optional[asyncio.Future[None]] + self._eof_waiter = None # type: Optional[asyncio.Future[None]] + self._exception = None # type: Optional[BaseException] + self._timer = timer + self._eof_callbacks = [] # type: List[Callable[[], None]] + + def __repr__(self) -> str: + info = [self.__class__.__name__] + if self._size: + info.append('%d bytes' % self._size) + if self._eof: + info.append('eof') + if self._low_water != DEFAULT_LIMIT: + info.append('low=%d high=%d' % (self._low_water, self._high_water)) + if self._waiter: + info.append('w=%r' % self._waiter) + if self._exception: + info.append('e=%r' % self._exception) + return '<%s>' % ' '.join(info) + + def exception(self) -> Optional[BaseException]: + return self._exception + + def set_exception(self, exc: BaseException) -> None: + self._exception = exc + self._eof_callbacks.clear() + + waiter = self._waiter + if waiter is not None: + self._waiter = None + set_exception(waiter, exc) + + waiter = self._eof_waiter + if waiter is not None: + self._eof_waiter = None + set_exception(waiter, exc) + + def on_eof(self, callback: Callable[[], None]) -> None: + if self._eof: + try: + callback() + except Exception: + internal_logger.exception('Exception in eof callback') + else: + self._eof_callbacks.append(callback) + + def feed_eof(self) -> None: + self._eof = True + + waiter = self._waiter + if waiter is not None: + self._waiter = None + set_result(waiter, None) + + waiter = self._eof_waiter + if waiter is not None: + self._eof_waiter = None + set_result(waiter, None) + + for cb in self._eof_callbacks: + try: + cb() + except Exception: + internal_logger.exception('Exception in eof callback') + + self._eof_callbacks.clear() + + def is_eof(self) -> bool: + """Return True if 'feed_eof' was called.""" + return self._eof + + def at_eof(self) -> bool: + """Return True if the buffer is empty and 'feed_eof' was called.""" + return self._eof and not self._buffer + + async def wait_eof(self) -> None: + if self._eof: + return + + assert self._eof_waiter is None + self._eof_waiter = self._loop.create_future() + try: + await self._eof_waiter + finally: + self._eof_waiter = None + + def unread_data(self, data: bytes) -> None: + """ rollback reading some data from stream, inserting it to buffer head. + """ + warnings.warn("unread_data() is deprecated " + "and will be removed in future releases (#3260)", + DeprecationWarning, + stacklevel=2) + if not data: + return + + if self._buffer_offset: + self._buffer[0] = self._buffer[0][self._buffer_offset:] + self._buffer_offset = 0 + self._size += len(data) + self._cursor -= len(data) + self._buffer.appendleft(data) + self._eof_counter = 0 + + # TODO: size is ignored, remove the param later + def feed_data(self, data: bytes, size: int=0) -> None: + assert not self._eof, 'feed_data after feed_eof' + + if not data: + return + + self._size += len(data) + self._buffer.append(data) + self.total_bytes += len(data) + + waiter = self._waiter + if waiter is not None: + self._waiter = None + set_result(waiter, None) + + if (self._size > self._high_water and + not self._protocol._reading_paused): + self._protocol.pause_reading() + + def begin_http_chunk_receiving(self) -> None: + if self._http_chunk_splits is None: + if self.total_bytes: + raise RuntimeError("Called begin_http_chunk_receiving when" + "some data was already fed") + self._http_chunk_splits = [] + + def end_http_chunk_receiving(self) -> None: + if self._http_chunk_splits is None: + raise RuntimeError("Called end_chunk_receiving without calling " + "begin_chunk_receiving first") + + # self._http_chunk_splits contains logical byte offsets from start of + # the body transfer. Each offset is the offset of the end of a chunk. + # "Logical" means bytes, accessible for a user. + # If no chunks containig logical data were received, current position + # is difinitely zero. + pos = self._http_chunk_splits[-1] if self._http_chunk_splits else 0 + + if self.total_bytes == pos: + # We should not add empty chunks here. So we check for that. + # Note, when chunked + gzip is used, we can receive a chunk + # of compressed data, but that data may not be enough for gzip FSM + # to yield any uncompressed data. That's why current position may + # not change after receiving a chunk. + return + + self._http_chunk_splits.append(self.total_bytes) + + # wake up readchunk when end of http chunk received + waiter = self._waiter + if waiter is not None: + self._waiter = None + set_result(waiter, None) + + async def _wait(self, func_name: str) -> None: + # StreamReader uses a future to link the protocol feed_data() method + # to a read coroutine. Running two read coroutines at the same time + # would have an unexpected behaviour. It would not possible to know + # which coroutine would get the next data. + if self._waiter is not None: + raise RuntimeError('%s() called while another coroutine is ' + 'already waiting for incoming data' % func_name) + + waiter = self._waiter = self._loop.create_future() + try: + if self._timer: + with self._timer: + await waiter + else: + await waiter + finally: + self._waiter = None + + async def readline(self) -> bytes: + if self._exception is not None: + raise self._exception + + line = [] + line_size = 0 + not_enough = True + + while not_enough: + while self._buffer and not_enough: + offset = self._buffer_offset + ichar = self._buffer[0].find(b'\n', offset) + 1 + # Read from current offset to found b'\n' or to the end. + data = self._read_nowait_chunk(ichar - offset if ichar else -1) + line.append(data) + line_size += len(data) + if ichar: + not_enough = False + + if line_size > self._high_water: + raise ValueError('Line is too long') + + if self._eof: + break + + if not_enough: + await self._wait('readline') + + return b''.join(line) + + async def read(self, n: int=-1) -> bytes: + if self._exception is not None: + raise self._exception + + # migration problem; with DataQueue you have to catch + # EofStream exception, so common way is to run payload.read() inside + # infinite loop. what can cause real infinite loop with StreamReader + # lets keep this code one major release. + if __debug__: + if self._eof and not self._buffer: + self._eof_counter = getattr(self, '_eof_counter', 0) + 1 + if self._eof_counter > 5: + internal_logger.warning( + 'Multiple access to StreamReader in eof state, ' + 'might be infinite loop.', stack_info=True) + + if not n: + return b'' + + if n < 0: + # This used to just loop creating a new waiter hoping to + # collect everything in self._buffer, but that would + # deadlock if the subprocess sends more than self.limit + # bytes. So just call self.readany() until EOF. + blocks = [] + while True: + block = await self.readany() + if not block: + break + blocks.append(block) + return b''.join(blocks) + + # TODO: should be `if` instead of `while` + # because waiter maybe triggered on chunk end, + # without feeding any data + while not self._buffer and not self._eof: + await self._wait('read') + + return self._read_nowait(n) + + async def readany(self) -> bytes: + if self._exception is not None: + raise self._exception + + # TODO: should be `if` instead of `while` + # because waiter maybe triggered on chunk end, + # without feeding any data + while not self._buffer and not self._eof: + await self._wait('readany') + + return self._read_nowait(-1) + + async def readchunk(self) -> Tuple[bytes, bool]: + """Returns a tuple of (data, end_of_http_chunk). When chunked transfer + encoding is used, end_of_http_chunk is a boolean indicating if the end + of the data corresponds to the end of a HTTP chunk , otherwise it is + always False. + """ + while True: + if self._exception is not None: + raise self._exception + + while self._http_chunk_splits: + pos = self._http_chunk_splits.pop(0) + if pos == self._cursor: + return (b"", True) + if pos > self._cursor: + return (self._read_nowait(pos-self._cursor), True) + internal_logger.warning('Skipping HTTP chunk end due to data ' + 'consumption beyond chunk boundary') + + if self._buffer: + return (self._read_nowait_chunk(-1), False) + # return (self._read_nowait(-1), False) + + if self._eof: + # Special case for signifying EOF. + # (b'', True) is not a final return value actually. + return (b'', False) + + await self._wait('readchunk') + + async def readexactly(self, n: int) -> bytes: + if self._exception is not None: + raise self._exception + + blocks = [] # type: List[bytes] + while n > 0: + block = await self.read(n) + if not block: + partial = b''.join(blocks) + raise asyncio.IncompleteReadError( + partial, len(partial) + n) + blocks.append(block) + n -= len(block) + + return b''.join(blocks) + + def read_nowait(self, n: int=-1) -> bytes: + # default was changed to be consistent with .read(-1) + # + # I believe the most users don't know about the method and + # they are not affected. + if self._exception is not None: + raise self._exception + + if self._waiter and not self._waiter.done(): + raise RuntimeError( + 'Called while some coroutine is waiting for incoming data.') + + return self._read_nowait(n) + + def _read_nowait_chunk(self, n: int) -> bytes: + first_buffer = self._buffer[0] + offset = self._buffer_offset + if n != -1 and len(first_buffer) - offset > n: + data = first_buffer[offset:offset + n] + self._buffer_offset += n + + elif offset: + self._buffer.popleft() + data = first_buffer[offset:] + self._buffer_offset = 0 + + else: + data = self._buffer.popleft() + + self._size -= len(data) + self._cursor += len(data) + + chunk_splits = self._http_chunk_splits + # Prevent memory leak: drop useless chunk splits + while chunk_splits and chunk_splits[0] < self._cursor: + chunk_splits.pop(0) + + if self._size < self._low_water and self._protocol._reading_paused: + self._protocol.resume_reading() + return data + + def _read_nowait(self, n: int) -> bytes: + """ Read not more than n bytes, or whole buffer is n == -1 """ + chunks = [] + + while self._buffer: + chunk = self._read_nowait_chunk(n) + chunks.append(chunk) + if n != -1: + n -= len(chunk) + if n == 0: + break + + return b''.join(chunks) if chunks else b'' + + +class EmptyStreamReader(AsyncStreamReaderMixin): + + def exception(self) -> Optional[BaseException]: + return None + + def set_exception(self, exc: BaseException) -> None: + pass + + def on_eof(self, callback: Callable[[], None]) -> None: + try: + callback() + except Exception: + internal_logger.exception('Exception in eof callback') + + def feed_eof(self) -> None: + pass + + def is_eof(self) -> bool: + return True + + def at_eof(self) -> bool: + return True + + async def wait_eof(self) -> None: + return + + def feed_data(self, data: bytes, n: int=0) -> None: + pass + + async def readline(self) -> bytes: + return b'' + + async def read(self, n: int=-1) -> bytes: + return b'' + + async def readany(self) -> bytes: + return b'' + + async def readchunk(self) -> Tuple[bytes, bool]: + return (b'', True) + + async def readexactly(self, n: int) -> bytes: + raise asyncio.IncompleteReadError(b'', n) + + def read_nowait(self) -> bytes: + return b'' + + +EMPTY_PAYLOAD = EmptyStreamReader() + + +class DataQueue(Generic[_T]): + """DataQueue is a general-purpose blocking queue with one reader.""" + + def __init__(self, loop: asyncio.AbstractEventLoop) -> None: + self._loop = loop + self._eof = False + self._waiter = None # type: Optional[asyncio.Future[None]] + self._exception = None # type: Optional[BaseException] + self._size = 0 + self._buffer = collections.deque() # type: Deque[Tuple[_T, int]] + + def __len__(self) -> int: + return len(self._buffer) + + def is_eof(self) -> bool: + return self._eof + + def at_eof(self) -> bool: + return self._eof and not self._buffer + + def exception(self) -> Optional[BaseException]: + return self._exception + + def set_exception(self, exc: BaseException) -> None: + self._eof = True + self._exception = exc + + waiter = self._waiter + if waiter is not None: + self._waiter = None + set_exception(waiter, exc) + + def feed_data(self, data: _T, size: int=0) -> None: + self._size += size + self._buffer.append((data, size)) + + waiter = self._waiter + if waiter is not None: + self._waiter = None + set_result(waiter, None) + + def feed_eof(self) -> None: + self._eof = True + + waiter = self._waiter + if waiter is not None: + self._waiter = None + set_result(waiter, None) + + async def read(self) -> _T: + if not self._buffer and not self._eof: + assert not self._waiter + self._waiter = self._loop.create_future() + try: + await self._waiter + except (asyncio.CancelledError, asyncio.TimeoutError): + self._waiter = None + raise + + if self._buffer: + data, size = self._buffer.popleft() + self._size -= size + return data + else: + if self._exception is not None: + raise self._exception + else: + raise EofStream + + def __aiter__(self) -> AsyncStreamIterator[_T]: + return AsyncStreamIterator(self.read) + + +class FlowControlDataQueue(DataQueue[_T]): + """FlowControlDataQueue resumes and pauses an underlying stream. + + It is a destination for parsed data.""" + + def __init__(self, protocol: BaseProtocol, *, + limit: int=DEFAULT_LIMIT, + loop: asyncio.AbstractEventLoop) -> None: + super().__init__(loop=loop) + + self._protocol = protocol + self._limit = limit * 2 + + def feed_data(self, data: _T, size: int=0) -> None: + super().feed_data(data, size) + + if self._size > self._limit and not self._protocol._reading_paused: + self._protocol.pause_reading() + + async def read(self) -> _T: + try: + return await super().read() + finally: + if self._size < self._limit and self._protocol._reading_paused: + self._protocol.resume_reading() diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/tcp_helpers.py b/venv-linux/lib/python3.6/site-packages/aiohttp/tcp_helpers.py new file mode 100644 index 0000000..440c116 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/tcp_helpers.py @@ -0,0 +1,63 @@ +"""Helper methods to tune a TCP connection""" + +import asyncio +import socket +from contextlib import suppress +from typing import Optional # noqa + +__all__ = ('tcp_keepalive', 'tcp_nodelay', 'tcp_cork') + + +if hasattr(socket, 'TCP_CORK'): # pragma: no cover + CORK = socket.TCP_CORK # type: Optional[int] +elif hasattr(socket, 'TCP_NOPUSH'): # pragma: no cover + CORK = socket.TCP_NOPUSH # type: ignore +else: # pragma: no cover + CORK = None + + +if hasattr(socket, 'SO_KEEPALIVE'): + def tcp_keepalive(transport: asyncio.Transport) -> None: + sock = transport.get_extra_info('socket') + if sock is not None: + sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) +else: + def tcp_keepalive( + transport: asyncio.Transport) -> None: # pragma: no cover + pass + + +def tcp_nodelay(transport: asyncio.Transport, value: bool) -> None: + sock = transport.get_extra_info('socket') + + if sock is None: + return + + if sock.family not in (socket.AF_INET, socket.AF_INET6): + return + + value = bool(value) + + # socket may be closed already, on windows OSError get raised + with suppress(OSError): + sock.setsockopt( + socket.IPPROTO_TCP, socket.TCP_NODELAY, value) + + +def tcp_cork(transport: asyncio.Transport, value: bool) -> None: + sock = transport.get_extra_info('socket') + + if CORK is None: + return + + if sock is None: + return + + if sock.family not in (socket.AF_INET, socket.AF_INET6): + return + + value = bool(value) + + with suppress(OSError): + sock.setsockopt( + socket.IPPROTO_TCP, CORK, value) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/test_utils.py b/venv-linux/lib/python3.6/site-packages/aiohttp/test_utils.py new file mode 100644 index 0000000..ebfa973 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/test_utils.py @@ -0,0 +1,670 @@ +"""Utilities shared by tests.""" + +import asyncio +import contextlib +import functools +import gc +import inspect +import socket +import sys +import unittest +from abc import ABC, abstractmethod +from types import TracebackType +from typing import ( # noqa + TYPE_CHECKING, + Any, + Callable, + Iterator, + List, + Optional, + Type, + Union, +) +from unittest import mock + +from multidict import CIMultiDict, CIMultiDictProxy +from yarl import URL + +import aiohttp +from aiohttp.client import ( + ClientResponse, + _RequestContextManager, + _WSRequestContextManager, +) + +from . import ClientSession, hdrs +from .abc import AbstractCookieJar +from .client_reqrep import ClientResponse # noqa +from .client_ws import ClientWebSocketResponse # noqa +from .helpers import sentinel +from .http import HttpVersion, RawRequestMessage +from .signals import Signal +from .web import ( + Application, + AppRunner, + BaseRunner, + Request, + Server, + ServerRunner, + SockSite, + UrlMappingMatchInfo, +) +from .web_protocol import _RequestHandler + +if TYPE_CHECKING: # pragma: no cover + from ssl import SSLContext +else: + SSLContext = None + + +def get_unused_port_socket(host: str) -> socket.socket: + return get_port_socket(host, 0) + + +def get_port_socket(host: str, port: int) -> socket.socket: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.bind((host, port)) + return s + + +def unused_port() -> int: + """Return a port that is unused on the current host.""" + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', 0)) + return s.getsockname()[1] + + +class BaseTestServer(ABC): + __test__ = False + + def __init__(self, + *, + scheme: Union[str, object]=sentinel, + loop: Optional[asyncio.AbstractEventLoop]=None, + host: str='127.0.0.1', + port: Optional[int]=None, + skip_url_asserts: bool=False, + **kwargs: Any) -> None: + self._loop = loop + self.runner = None # type: Optional[BaseRunner] + self._root = None # type: Optional[URL] + self.host = host + self.port = port + self._closed = False + self.scheme = scheme + self.skip_url_asserts = skip_url_asserts + + async def start_server(self, + loop: Optional[asyncio.AbstractEventLoop]=None, + **kwargs: Any) -> None: + if self.runner: + return + self._loop = loop + self._ssl = kwargs.pop('ssl', None) + self.runner = await self._make_runner(**kwargs) + await self.runner.setup() + if not self.port: + self.port = 0 + _sock = get_port_socket(self.host, self.port) + self.host, self.port = _sock.getsockname()[:2] + site = SockSite(self.runner, sock=_sock, ssl_context=self._ssl) + await site.start() + server = site._server + assert server is not None + sockets = server.sockets + assert sockets is not None + self.port = sockets[0].getsockname()[1] + if self.scheme is sentinel: + if self._ssl: + scheme = 'https' + else: + scheme = 'http' + self.scheme = scheme + self._root = URL('{}://{}:{}'.format(self.scheme, + self.host, + self.port)) + + @abstractmethod # pragma: no cover + async def _make_runner(self, **kwargs: Any) -> BaseRunner: + pass + + def make_url(self, path: str) -> URL: + assert self._root is not None + url = URL(path) + if not self.skip_url_asserts: + assert not url.is_absolute() + return self._root.join(url) + else: + return URL(str(self._root) + path) + + @property + def started(self) -> bool: + return self.runner is not None + + @property + def closed(self) -> bool: + return self._closed + + @property + def handler(self) -> Server: + # for backward compatibility + # web.Server instance + runner = self.runner + assert runner is not None + assert runner.server is not None + return runner.server + + async def close(self) -> None: + """Close all fixtures created by the test client. + + After that point, the TestClient is no longer usable. + + This is an idempotent function: running close multiple times + will not have any additional effects. + + close is also run when the object is garbage collected, and on + exit when used as a context manager. + + """ + if self.started and not self.closed: + assert self.runner is not None + await self.runner.cleanup() + self._root = None + self.port = None + self._closed = True + + def __enter__(self) -> None: + raise TypeError("Use async with instead") + + def __exit__(self, + exc_type: Optional[Type[BaseException]], + exc_value: Optional[BaseException], + traceback: Optional[TracebackType]) -> None: + # __exit__ should exist in pair with __enter__ but never executed + pass # pragma: no cover + + async def __aenter__(self) -> 'BaseTestServer': + await self.start_server(loop=self._loop) + return self + + async def __aexit__(self, + exc_type: Optional[Type[BaseException]], + exc_value: Optional[BaseException], + traceback: Optional[TracebackType]) -> None: + await self.close() + + +class TestServer(BaseTestServer): + + def __init__(self, app: Application, *, + scheme: Union[str, object]=sentinel, + host: str='127.0.0.1', + port: Optional[int]=None, + **kwargs: Any): + self.app = app + super().__init__(scheme=scheme, host=host, port=port, **kwargs) + + async def _make_runner(self, **kwargs: Any) -> BaseRunner: + return AppRunner(self.app, **kwargs) + + +class RawTestServer(BaseTestServer): + + def __init__(self, handler: _RequestHandler, *, + scheme: Union[str, object]=sentinel, + host: str='127.0.0.1', + port: Optional[int]=None, + **kwargs: Any) -> None: + self._handler = handler + super().__init__(scheme=scheme, host=host, port=port, **kwargs) + + async def _make_runner(self, + debug: bool=True, + **kwargs: Any) -> ServerRunner: + srv = Server( + self._handler, loop=self._loop, debug=debug, **kwargs) + return ServerRunner(srv, debug=debug, **kwargs) + + +class TestClient: + """ + A test client implementation. + + To write functional tests for aiohttp based servers. + + """ + __test__ = False + + def __init__(self, server: BaseTestServer, *, + cookie_jar: Optional[AbstractCookieJar]=None, + loop: Optional[asyncio.AbstractEventLoop]=None, + **kwargs: Any) -> None: + if not isinstance(server, BaseTestServer): + raise TypeError("server must be TestServer " + "instance, found type: %r" % type(server)) + self._server = server + self._loop = loop + if cookie_jar is None: + cookie_jar = aiohttp.CookieJar(unsafe=True, loop=loop) + self._session = ClientSession(loop=loop, + cookie_jar=cookie_jar, + **kwargs) + self._closed = False + self._responses = [] # type: List[ClientResponse] + self._websockets = [] # type: List[ClientWebSocketResponse] + + async def start_server(self) -> None: + await self._server.start_server(loop=self._loop) + + @property + def host(self) -> str: + return self._server.host + + @property + def port(self) -> Optional[int]: + return self._server.port + + @property + def server(self) -> BaseTestServer: + return self._server + + @property + def app(self) -> Application: + return getattr(self._server, "app", None) + + @property + def session(self) -> ClientSession: + """An internal aiohttp.ClientSession. + + Unlike the methods on the TestClient, client session requests + do not automatically include the host in the url queried, and + will require an absolute path to the resource. + + """ + return self._session + + def make_url(self, path: str) -> URL: + return self._server.make_url(path) + + async def _request(self, method: str, path: str, + **kwargs: Any) -> ClientResponse: + resp = await self._session.request( + method, self.make_url(path), **kwargs + ) + # save it to close later + self._responses.append(resp) + return resp + + def request(self, method: str, path: str, + **kwargs: Any) -> _RequestContextManager: + """Routes a request to tested http server. + + The interface is identical to aiohttp.ClientSession.request, + except the loop kwarg is overridden by the instance used by the + test server. + + """ + return _RequestContextManager( + self._request(method, path, **kwargs) + ) + + def get(self, path: str, **kwargs: Any) -> _RequestContextManager: + """Perform an HTTP GET request.""" + return _RequestContextManager( + self._request(hdrs.METH_GET, path, **kwargs) + ) + + def post(self, path: str, **kwargs: Any) -> _RequestContextManager: + """Perform an HTTP POST request.""" + return _RequestContextManager( + self._request(hdrs.METH_POST, path, **kwargs) + ) + + def options(self, path: str, **kwargs: Any) -> _RequestContextManager: + """Perform an HTTP OPTIONS request.""" + return _RequestContextManager( + self._request(hdrs.METH_OPTIONS, path, **kwargs) + ) + + def head(self, path: str, **kwargs: Any) -> _RequestContextManager: + """Perform an HTTP HEAD request.""" + return _RequestContextManager( + self._request(hdrs.METH_HEAD, path, **kwargs) + ) + + def put(self, path: str, **kwargs: Any) -> _RequestContextManager: + """Perform an HTTP PUT request.""" + return _RequestContextManager( + self._request(hdrs.METH_PUT, path, **kwargs) + ) + + def patch(self, path: str, **kwargs: Any) -> _RequestContextManager: + """Perform an HTTP PATCH request.""" + return _RequestContextManager( + self._request(hdrs.METH_PATCH, path, **kwargs) + ) + + def delete(self, path: str, **kwargs: Any) -> _RequestContextManager: + """Perform an HTTP PATCH request.""" + return _RequestContextManager( + self._request(hdrs.METH_DELETE, path, **kwargs) + ) + + def ws_connect(self, path: str, **kwargs: Any) -> _WSRequestContextManager: + """Initiate websocket connection. + + The api corresponds to aiohttp.ClientSession.ws_connect. + + """ + return _WSRequestContextManager( + self._ws_connect(path, **kwargs) + ) + + async def _ws_connect(self, path: str, + **kwargs: Any) -> ClientWebSocketResponse: + ws = await self._session.ws_connect( + self.make_url(path), **kwargs) + self._websockets.append(ws) + return ws + + async def close(self) -> None: + """Close all fixtures created by the test client. + + After that point, the TestClient is no longer usable. + + This is an idempotent function: running close multiple times + will not have any additional effects. + + close is also run on exit when used as a(n) (asynchronous) + context manager. + + """ + if not self._closed: + for resp in self._responses: + resp.close() + for ws in self._websockets: + await ws.close() + await self._session.close() + await self._server.close() + self._closed = True + + def __enter__(self) -> None: + raise TypeError("Use async with instead") + + def __exit__(self, + exc_type: Optional[Type[BaseException]], + exc: Optional[BaseException], + tb: Optional[TracebackType]) -> None: + # __exit__ should exist in pair with __enter__ but never executed + pass # pragma: no cover + + async def __aenter__(self) -> 'TestClient': + await self.start_server() + return self + + async def __aexit__(self, + exc_type: Optional[Type[BaseException]], + exc: Optional[BaseException], + tb: Optional[TracebackType]) -> None: + await self.close() + + +class AioHTTPTestCase(unittest.TestCase): + """A base class to allow for unittest web applications using + aiohttp. + + Provides the following: + + * self.client (aiohttp.test_utils.TestClient): an aiohttp test client. + * self.loop (asyncio.BaseEventLoop): the event loop in which the + application and server are running. + * self.app (aiohttp.web.Application): the application returned by + self.get_application() + + Note that the TestClient's methods are asynchronous: you have to + execute function on the test client using asynchronous methods. + """ + + async def get_application(self) -> Application: + """ + This method should be overridden + to return the aiohttp.web.Application + object to test. + + """ + return self.get_app() + + def get_app(self) -> Application: + """Obsolete method used to constructing web application. + + Use .get_application() coroutine instead + + """ + raise RuntimeError("Did you forget to define get_application()?") + + def setUp(self) -> None: + self.loop = setup_test_loop() + + self.app = self.loop.run_until_complete(self.get_application()) + self.server = self.loop.run_until_complete(self.get_server(self.app)) + self.client = self.loop.run_until_complete( + self.get_client(self.server)) + + self.loop.run_until_complete(self.client.start_server()) + + self.loop.run_until_complete(self.setUpAsync()) + + async def setUpAsync(self) -> None: + pass + + def tearDown(self) -> None: + self.loop.run_until_complete(self.tearDownAsync()) + self.loop.run_until_complete(self.client.close()) + teardown_test_loop(self.loop) + + async def tearDownAsync(self) -> None: + pass + + async def get_server(self, app: Application) -> TestServer: + """Return a TestServer instance.""" + return TestServer(app, loop=self.loop) + + async def get_client(self, server: TestServer) -> TestClient: + """Return a TestClient instance.""" + return TestClient(server, loop=self.loop) + + +def unittest_run_loop(func: Any, *args: Any, **kwargs: Any) -> Any: + """A decorator dedicated to use with asynchronous methods of an + AioHTTPTestCase. + + Handles executing an asynchronous function, using + the self.loop of the AioHTTPTestCase. + """ + + @functools.wraps(func, *args, **kwargs) + def new_func(self: Any, *inner_args: Any, **inner_kwargs: Any) -> Any: + return self.loop.run_until_complete( + func(self, *inner_args, **inner_kwargs)) + + return new_func + + +_LOOP_FACTORY = Callable[[], asyncio.AbstractEventLoop] + + +@contextlib.contextmanager +def loop_context(loop_factory: _LOOP_FACTORY=asyncio.new_event_loop, + fast: bool=False) -> Iterator[asyncio.AbstractEventLoop]: + """A contextmanager that creates an event_loop, for test purposes. + + Handles the creation and cleanup of a test loop. + """ + loop = setup_test_loop(loop_factory) + yield loop + teardown_test_loop(loop, fast=fast) + + +def setup_test_loop( + loop_factory: _LOOP_FACTORY=asyncio.new_event_loop +) -> asyncio.AbstractEventLoop: + """Create and return an asyncio.BaseEventLoop + instance. + + The caller should also call teardown_test_loop, + once they are done with the loop. + """ + loop = loop_factory() + try: + module = loop.__class__.__module__ + skip_watcher = 'uvloop' in module + except AttributeError: # pragma: no cover + # Just in case + skip_watcher = True + asyncio.set_event_loop(loop) + if sys.platform != "win32" and not skip_watcher: + policy = asyncio.get_event_loop_policy() + watcher = asyncio.SafeChildWatcher() # type: ignore + watcher.attach_loop(loop) + with contextlib.suppress(NotImplementedError): + policy.set_child_watcher(watcher) + return loop + + +def teardown_test_loop(loop: asyncio.AbstractEventLoop, + fast: bool=False) -> None: + """Teardown and cleanup an event_loop created + by setup_test_loop. + + """ + closed = loop.is_closed() + if not closed: + loop.call_soon(loop.stop) + loop.run_forever() + loop.close() + + if not fast: + gc.collect() + + asyncio.set_event_loop(None) + + +def _create_app_mock() -> mock.MagicMock: + def get_dict(app: Any, key: str) -> Any: + return app.__app_dict[key] + + def set_dict(app: Any, key: str, value: Any) -> None: + app.__app_dict[key] = value + + app = mock.MagicMock() + app.__app_dict = {} + app.__getitem__ = get_dict + app.__setitem__ = set_dict + + app._debug = False + app.on_response_prepare = Signal(app) + app.on_response_prepare.freeze() + return app + + +def _create_transport(sslcontext: Optional[SSLContext]=None) -> mock.Mock: + transport = mock.Mock() + + def get_extra_info(key: str) -> Optional[SSLContext]: + if key == 'sslcontext': + return sslcontext + else: + return None + + transport.get_extra_info.side_effect = get_extra_info + return transport + + +def make_mocked_request(method: str, path: str, + headers: Any=None, *, + match_info: Any=sentinel, + version: HttpVersion=HttpVersion(1, 1), + closing: bool=False, + app: Any=None, + writer: Any=sentinel, + protocol: Any=sentinel, + transport: Any=sentinel, + payload: Any=sentinel, + sslcontext: Optional[SSLContext]=None, + client_max_size: int=1024**2, + loop: Any=...) -> Any: + """Creates mocked web.Request testing purposes. + + Useful in unit tests, when spinning full web server is overkill or + specific conditions and errors are hard to trigger. + + """ + + task = mock.Mock() + if loop is ...: + loop = mock.Mock() + loop.create_future.return_value = () + + if version < HttpVersion(1, 1): + closing = True + + if headers: + headers = CIMultiDictProxy(CIMultiDict(headers)) + raw_hdrs = tuple( + (k.encode('utf-8'), v.encode('utf-8')) for k, v in headers.items()) + else: + headers = CIMultiDictProxy(CIMultiDict()) + raw_hdrs = () + + chunked = 'chunked' in headers.get(hdrs.TRANSFER_ENCODING, '').lower() + + message = RawRequestMessage( + method, path, version, headers, + raw_hdrs, closing, False, False, chunked, URL(path)) + if app is None: + app = _create_app_mock() + + if transport is sentinel: + transport = _create_transport(sslcontext) + + if protocol is sentinel: + protocol = mock.Mock() + protocol.transport = transport + + if writer is sentinel: + writer = mock.Mock() + writer.write_headers = make_mocked_coro(None) + writer.write = make_mocked_coro(None) + writer.write_eof = make_mocked_coro(None) + writer.drain = make_mocked_coro(None) + writer.transport = transport + + protocol.transport = transport + protocol.writer = writer + + if payload is sentinel: + payload = mock.Mock() + + req = Request(message, payload, + protocol, writer, task, loop, + client_max_size=client_max_size) + + match_info = UrlMappingMatchInfo( + {} if match_info is sentinel else match_info, mock.Mock()) + match_info.add_app(app) + req._match_info = match_info + + return req + + +def make_mocked_coro(return_value: Any=sentinel, + raise_exception: Any=sentinel) -> Any: + """Creates a coroutine mock.""" + async def mock_coro(*args: Any, **kwargs: Any) -> Any: + if raise_exception is not sentinel: + raise raise_exception + if not inspect.isawaitable(return_value): + return return_value + await return_value + + return mock.Mock(wraps=mock_coro) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/tracing.py b/venv-linux/lib/python3.6/site-packages/aiohttp/tracing.py new file mode 100644 index 0000000..631e7d0 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/tracing.py @@ -0,0 +1,387 @@ +from types import SimpleNamespace +from typing import TYPE_CHECKING, Awaitable, Callable, Type, Union + +import attr +from multidict import CIMultiDict # noqa +from yarl import URL + +from .client_reqrep import ClientResponse +from .signals import Signal + +if TYPE_CHECKING: # pragma: no cover + from .client import ClientSession # noqa + + _SignalArgs = Union[ + 'TraceRequestStartParams', + 'TraceRequestEndParams', + 'TraceRequestExceptionParams', + 'TraceConnectionQueuedStartParams', + 'TraceConnectionQueuedEndParams', + 'TraceConnectionCreateStartParams', + 'TraceConnectionCreateEndParams', + 'TraceConnectionReuseconnParams', + 'TraceDnsResolveHostStartParams', + 'TraceDnsResolveHostEndParams', + 'TraceDnsCacheHitParams', + 'TraceDnsCacheMissParams', + 'TraceRequestRedirectParams', + 'TraceRequestChunkSentParams', + 'TraceResponseChunkReceivedParams', + ] + _Signal = Signal[Callable[[ClientSession, SimpleNamespace, _SignalArgs], + Awaitable[None]]] +else: + _Signal = Signal + + +__all__ = ( + 'TraceConfig', 'TraceRequestStartParams', 'TraceRequestEndParams', + 'TraceRequestExceptionParams', 'TraceConnectionQueuedStartParams', + 'TraceConnectionQueuedEndParams', 'TraceConnectionCreateStartParams', + 'TraceConnectionCreateEndParams', 'TraceConnectionReuseconnParams', + 'TraceDnsResolveHostStartParams', 'TraceDnsResolveHostEndParams', + 'TraceDnsCacheHitParams', 'TraceDnsCacheMissParams', + 'TraceRequestRedirectParams', + 'TraceRequestChunkSentParams', 'TraceResponseChunkReceivedParams', +) + + +class TraceConfig: + """First-class used to trace requests launched via ClientSession + objects.""" + + def __init__( + self, + trace_config_ctx_factory: Type[SimpleNamespace]=SimpleNamespace + ) -> None: + self._on_request_start = Signal(self) # type: _Signal + self._on_request_chunk_sent = Signal(self) # type: _Signal + self._on_response_chunk_received = Signal(self) # type: _Signal + self._on_request_end = Signal(self) # type: _Signal + self._on_request_exception = Signal(self) # type: _Signal + self._on_request_redirect = Signal(self) # type: _Signal + self._on_connection_queued_start = Signal(self) # type: _Signal + self._on_connection_queued_end = Signal(self) # type: _Signal + self._on_connection_create_start = Signal(self) # type: _Signal + self._on_connection_create_end = Signal(self) # type: _Signal + self._on_connection_reuseconn = Signal(self) # type: _Signal + self._on_dns_resolvehost_start = Signal(self) # type: _Signal + self._on_dns_resolvehost_end = Signal(self) # type: _Signal + self._on_dns_cache_hit = Signal(self) # type: _Signal + self._on_dns_cache_miss = Signal(self) # type: _Signal + + self._trace_config_ctx_factory = trace_config_ctx_factory # type: Type[SimpleNamespace] # noqa + + def trace_config_ctx( + self, + trace_request_ctx: SimpleNamespace=None + ) -> SimpleNamespace: # noqa + """ Return a new trace_config_ctx instance """ + return self._trace_config_ctx_factory( + trace_request_ctx=trace_request_ctx) + + def freeze(self) -> None: + self._on_request_start.freeze() + self._on_request_chunk_sent.freeze() + self._on_response_chunk_received.freeze() + self._on_request_end.freeze() + self._on_request_exception.freeze() + self._on_request_redirect.freeze() + self._on_connection_queued_start.freeze() + self._on_connection_queued_end.freeze() + self._on_connection_create_start.freeze() + self._on_connection_create_end.freeze() + self._on_connection_reuseconn.freeze() + self._on_dns_resolvehost_start.freeze() + self._on_dns_resolvehost_end.freeze() + self._on_dns_cache_hit.freeze() + self._on_dns_cache_miss.freeze() + + @property + def on_request_start(self) -> _Signal: + return self._on_request_start + + @property + def on_request_chunk_sent(self) -> _Signal: + return self._on_request_chunk_sent + + @property + def on_response_chunk_received(self) -> _Signal: + return self._on_response_chunk_received + + @property + def on_request_end(self) -> _Signal: + return self._on_request_end + + @property + def on_request_exception(self) -> _Signal: + return self._on_request_exception + + @property + def on_request_redirect(self) -> _Signal: + return self._on_request_redirect + + @property + def on_connection_queued_start(self) -> _Signal: + return self._on_connection_queued_start + + @property + def on_connection_queued_end(self) -> _Signal: + return self._on_connection_queued_end + + @property + def on_connection_create_start(self) -> _Signal: + return self._on_connection_create_start + + @property + def on_connection_create_end(self) -> _Signal: + return self._on_connection_create_end + + @property + def on_connection_reuseconn(self) -> _Signal: + return self._on_connection_reuseconn + + @property + def on_dns_resolvehost_start(self) -> _Signal: + return self._on_dns_resolvehost_start + + @property + def on_dns_resolvehost_end(self) -> _Signal: + return self._on_dns_resolvehost_end + + @property + def on_dns_cache_hit(self) -> _Signal: + return self._on_dns_cache_hit + + @property + def on_dns_cache_miss(self) -> _Signal: + return self._on_dns_cache_miss + + +@attr.s(frozen=True, slots=True) +class TraceRequestStartParams: + """ Parameters sent by the `on_request_start` signal""" + method = attr.ib(type=str) + url = attr.ib(type=URL) + headers = attr.ib(type='CIMultiDict[str]') + + +@attr.s(frozen=True, slots=True) +class TraceRequestChunkSentParams: + """ Parameters sent by the `on_request_chunk_sent` signal""" + chunk = attr.ib(type=bytes) + + +@attr.s(frozen=True, slots=True) +class TraceResponseChunkReceivedParams: + """ Parameters sent by the `on_response_chunk_received` signal""" + chunk = attr.ib(type=bytes) + + +@attr.s(frozen=True, slots=True) +class TraceRequestEndParams: + """ Parameters sent by the `on_request_end` signal""" + method = attr.ib(type=str) + url = attr.ib(type=URL) + headers = attr.ib(type='CIMultiDict[str]') + response = attr.ib(type=ClientResponse) + + +@attr.s(frozen=True, slots=True) +class TraceRequestExceptionParams: + """ Parameters sent by the `on_request_exception` signal""" + method = attr.ib(type=str) + url = attr.ib(type=URL) + headers = attr.ib(type='CIMultiDict[str]') + exception = attr.ib(type=BaseException) + + +@attr.s(frozen=True, slots=True) +class TraceRequestRedirectParams: + """ Parameters sent by the `on_request_redirect` signal""" + method = attr.ib(type=str) + url = attr.ib(type=URL) + headers = attr.ib(type='CIMultiDict[str]') + response = attr.ib(type=ClientResponse) + + +@attr.s(frozen=True, slots=True) +class TraceConnectionQueuedStartParams: + """ Parameters sent by the `on_connection_queued_start` signal""" + + +@attr.s(frozen=True, slots=True) +class TraceConnectionQueuedEndParams: + """ Parameters sent by the `on_connection_queued_end` signal""" + + +@attr.s(frozen=True, slots=True) +class TraceConnectionCreateStartParams: + """ Parameters sent by the `on_connection_create_start` signal""" + + +@attr.s(frozen=True, slots=True) +class TraceConnectionCreateEndParams: + """ Parameters sent by the `on_connection_create_end` signal""" + + +@attr.s(frozen=True, slots=True) +class TraceConnectionReuseconnParams: + """ Parameters sent by the `on_connection_reuseconn` signal""" + + +@attr.s(frozen=True, slots=True) +class TraceDnsResolveHostStartParams: + """ Parameters sent by the `on_dns_resolvehost_start` signal""" + host = attr.ib(type=str) + + +@attr.s(frozen=True, slots=True) +class TraceDnsResolveHostEndParams: + """ Parameters sent by the `on_dns_resolvehost_end` signal""" + host = attr.ib(type=str) + + +@attr.s(frozen=True, slots=True) +class TraceDnsCacheHitParams: + """ Parameters sent by the `on_dns_cache_hit` signal""" + host = attr.ib(type=str) + + +@attr.s(frozen=True, slots=True) +class TraceDnsCacheMissParams: + """ Parameters sent by the `on_dns_cache_miss` signal""" + host = attr.ib(type=str) + + +class Trace: + """ Internal class used to keep together the main dependencies used + at the moment of send a signal.""" + + def __init__(self, + session: 'ClientSession', + trace_config: TraceConfig, + trace_config_ctx: SimpleNamespace) -> None: + self._trace_config = trace_config + self._trace_config_ctx = trace_config_ctx + self._session = session + + async def send_request_start(self, + method: str, + url: URL, + headers: 'CIMultiDict[str]') -> None: + return await self._trace_config.on_request_start.send( + self._session, + self._trace_config_ctx, + TraceRequestStartParams(method, url, headers) + ) + + async def send_request_chunk_sent(self, chunk: bytes) -> None: + return await self._trace_config.on_request_chunk_sent.send( + self._session, + self._trace_config_ctx, + TraceRequestChunkSentParams(chunk) + ) + + async def send_response_chunk_received(self, chunk: bytes) -> None: + return await self._trace_config.on_response_chunk_received.send( + self._session, + self._trace_config_ctx, + TraceResponseChunkReceivedParams(chunk) + ) + + async def send_request_end(self, + method: str, + url: URL, + headers: 'CIMultiDict[str]', + response: ClientResponse) -> None: + return await self._trace_config.on_request_end.send( + self._session, + self._trace_config_ctx, + TraceRequestEndParams(method, url, headers, response) + ) + + async def send_request_exception(self, + method: str, + url: URL, + headers: 'CIMultiDict[str]', + exception: BaseException) -> None: + return await self._trace_config.on_request_exception.send( + self._session, + self._trace_config_ctx, + TraceRequestExceptionParams(method, url, headers, exception) + ) + + async def send_request_redirect(self, + method: str, + url: URL, + headers: 'CIMultiDict[str]', + response: ClientResponse) -> None: + return await self._trace_config._on_request_redirect.send( + self._session, + self._trace_config_ctx, + TraceRequestRedirectParams(method, url, headers, response) + ) + + async def send_connection_queued_start(self) -> None: + return await self._trace_config.on_connection_queued_start.send( + self._session, + self._trace_config_ctx, + TraceConnectionQueuedStartParams() + ) + + async def send_connection_queued_end(self) -> None: + return await self._trace_config.on_connection_queued_end.send( + self._session, + self._trace_config_ctx, + TraceConnectionQueuedEndParams() + ) + + async def send_connection_create_start(self) -> None: + return await self._trace_config.on_connection_create_start.send( + self._session, + self._trace_config_ctx, + TraceConnectionCreateStartParams() + ) + + async def send_connection_create_end(self) -> None: + return await self._trace_config.on_connection_create_end.send( + self._session, + self._trace_config_ctx, + TraceConnectionCreateEndParams() + ) + + async def send_connection_reuseconn(self) -> None: + return await self._trace_config.on_connection_reuseconn.send( + self._session, + self._trace_config_ctx, + TraceConnectionReuseconnParams() + ) + + async def send_dns_resolvehost_start(self, host: str) -> None: + return await self._trace_config.on_dns_resolvehost_start.send( + self._session, + self._trace_config_ctx, + TraceDnsResolveHostStartParams(host) + ) + + async def send_dns_resolvehost_end(self, host: str) -> None: + return await self._trace_config.on_dns_resolvehost_end.send( + self._session, + self._trace_config_ctx, + TraceDnsResolveHostEndParams(host) + ) + + async def send_dns_cache_hit(self, host: str) -> None: + return await self._trace_config.on_dns_cache_hit.send( + self._session, + self._trace_config_ctx, + TraceDnsCacheHitParams(host) + ) + + async def send_dns_cache_miss(self, host: str) -> None: + return await self._trace_config.on_dns_cache_miss.send( + self._session, + self._trace_config_ctx, + TraceDnsCacheMissParams(host) + ) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/typedefs.py b/venv-linux/lib/python3.6/site-packages/aiohttp/typedefs.py new file mode 100644 index 0000000..3c42f6a --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/typedefs.py @@ -0,0 +1,53 @@ +import json +import os # noqa +import pathlib # noqa +import sys +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Iterable, + Mapping, + Tuple, + Union, +) + +from multidict import ( + CIMultiDict, + CIMultiDictProxy, + MultiDict, + MultiDictProxy, + istr, +) +from yarl import URL + +DEFAULT_JSON_ENCODER = json.dumps +DEFAULT_JSON_DECODER = json.loads + +if TYPE_CHECKING: # pragma: no cover + _CIMultiDict = CIMultiDict[str] + _CIMultiDictProxy = CIMultiDictProxy[str] + _MultiDict = MultiDict[str] + _MultiDictProxy = MultiDictProxy[str] + from http.cookies import BaseCookie # noqa +else: + _CIMultiDict = CIMultiDict + _CIMultiDictProxy = CIMultiDictProxy + _MultiDict = MultiDict + _MultiDictProxy = MultiDictProxy + +Byteish = Union[bytes, bytearray, memoryview] +JSONEncoder = Callable[[Any], str] +JSONDecoder = Callable[[str], Any] +LooseHeaders = Union[Mapping[Union[str, istr], str], _CIMultiDict, + _CIMultiDictProxy] +RawHeaders = Tuple[Tuple[bytes, bytes], ...] +StrOrURL = Union[str, URL] +LooseCookies = Union[Iterable[Tuple[str, 'BaseCookie[str]']], + Mapping[str, 'BaseCookie[str]'], 'BaseCookie[str]'] + + +if sys.version_info >= (3, 6): + PathLike = Union[str, 'os.PathLike[str]'] +else: + PathLike = Union[str, pathlib.PurePath] diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/web.py b/venv-linux/lib/python3.6/site-packages/aiohttp/web.py new file mode 100644 index 0000000..12fd09a --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/web.py @@ -0,0 +1,502 @@ +import asyncio +import logging +import socket +import sys +from argparse import ArgumentParser +from collections.abc import Iterable +from importlib import import_module +from typing import Any, Awaitable, Callable, List, Optional, Type, Union, cast + +from .abc import AbstractAccessLogger +from .helpers import all_tasks +from .log import access_logger +from .web_app import Application as Application +from .web_app import CleanupError as CleanupError +from .web_exceptions import HTTPAccepted as HTTPAccepted +from .web_exceptions import HTTPBadGateway as HTTPBadGateway +from .web_exceptions import HTTPBadRequest as HTTPBadRequest +from .web_exceptions import HTTPClientError as HTTPClientError +from .web_exceptions import HTTPConflict as HTTPConflict +from .web_exceptions import HTTPCreated as HTTPCreated +from .web_exceptions import HTTPError as HTTPError +from .web_exceptions import HTTPException as HTTPException +from .web_exceptions import HTTPExpectationFailed as HTTPExpectationFailed +from .web_exceptions import HTTPFailedDependency as HTTPFailedDependency +from .web_exceptions import HTTPForbidden as HTTPForbidden +from .web_exceptions import HTTPFound as HTTPFound +from .web_exceptions import HTTPGatewayTimeout as HTTPGatewayTimeout +from .web_exceptions import HTTPGone as HTTPGone +from .web_exceptions import HTTPInsufficientStorage as HTTPInsufficientStorage +from .web_exceptions import HTTPInternalServerError as HTTPInternalServerError +from .web_exceptions import HTTPLengthRequired as HTTPLengthRequired +from .web_exceptions import HTTPMethodNotAllowed as HTTPMethodNotAllowed +from .web_exceptions import HTTPMisdirectedRequest as HTTPMisdirectedRequest +from .web_exceptions import HTTPMovedPermanently as HTTPMovedPermanently +from .web_exceptions import HTTPMultipleChoices as HTTPMultipleChoices +from .web_exceptions import ( + HTTPNetworkAuthenticationRequired as HTTPNetworkAuthenticationRequired, +) +from .web_exceptions import HTTPNoContent as HTTPNoContent +from .web_exceptions import ( + HTTPNonAuthoritativeInformation as HTTPNonAuthoritativeInformation, +) +from .web_exceptions import HTTPNotAcceptable as HTTPNotAcceptable +from .web_exceptions import HTTPNotExtended as HTTPNotExtended +from .web_exceptions import HTTPNotFound as HTTPNotFound +from .web_exceptions import HTTPNotImplemented as HTTPNotImplemented +from .web_exceptions import HTTPNotModified as HTTPNotModified +from .web_exceptions import HTTPOk as HTTPOk +from .web_exceptions import HTTPPartialContent as HTTPPartialContent +from .web_exceptions import HTTPPaymentRequired as HTTPPaymentRequired +from .web_exceptions import HTTPPermanentRedirect as HTTPPermanentRedirect +from .web_exceptions import HTTPPreconditionFailed as HTTPPreconditionFailed +from .web_exceptions import ( + HTTPPreconditionRequired as HTTPPreconditionRequired, +) +from .web_exceptions import ( + HTTPProxyAuthenticationRequired as HTTPProxyAuthenticationRequired, +) +from .web_exceptions import HTTPRedirection as HTTPRedirection +from .web_exceptions import ( + HTTPRequestEntityTooLarge as HTTPRequestEntityTooLarge, +) +from .web_exceptions import ( + HTTPRequestHeaderFieldsTooLarge as HTTPRequestHeaderFieldsTooLarge, +) +from .web_exceptions import ( + HTTPRequestRangeNotSatisfiable as HTTPRequestRangeNotSatisfiable, +) +from .web_exceptions import HTTPRequestTimeout as HTTPRequestTimeout +from .web_exceptions import HTTPRequestURITooLong as HTTPRequestURITooLong +from .web_exceptions import HTTPResetContent as HTTPResetContent +from .web_exceptions import HTTPSeeOther as HTTPSeeOther +from .web_exceptions import HTTPServerError as HTTPServerError +from .web_exceptions import HTTPServiceUnavailable as HTTPServiceUnavailable +from .web_exceptions import HTTPSuccessful as HTTPSuccessful +from .web_exceptions import HTTPTemporaryRedirect as HTTPTemporaryRedirect +from .web_exceptions import HTTPTooManyRequests as HTTPTooManyRequests +from .web_exceptions import HTTPUnauthorized as HTTPUnauthorized +from .web_exceptions import ( + HTTPUnavailableForLegalReasons as HTTPUnavailableForLegalReasons, +) +from .web_exceptions import HTTPUnprocessableEntity as HTTPUnprocessableEntity +from .web_exceptions import ( + HTTPUnsupportedMediaType as HTTPUnsupportedMediaType, +) +from .web_exceptions import HTTPUpgradeRequired as HTTPUpgradeRequired +from .web_exceptions import HTTPUseProxy as HTTPUseProxy +from .web_exceptions import ( + HTTPVariantAlsoNegotiates as HTTPVariantAlsoNegotiates, +) +from .web_exceptions import HTTPVersionNotSupported as HTTPVersionNotSupported +from .web_fileresponse import FileResponse as FileResponse +from .web_log import AccessLogger +from .web_middlewares import middleware as middleware +from .web_middlewares import ( + normalize_path_middleware as normalize_path_middleware, +) +from .web_protocol import PayloadAccessError as PayloadAccessError +from .web_protocol import RequestHandler as RequestHandler +from .web_protocol import RequestPayloadError as RequestPayloadError +from .web_request import BaseRequest as BaseRequest +from .web_request import FileField as FileField +from .web_request import Request as Request +from .web_response import ContentCoding as ContentCoding +from .web_response import Response as Response +from .web_response import StreamResponse as StreamResponse +from .web_response import json_response as json_response +from .web_routedef import AbstractRouteDef as AbstractRouteDef +from .web_routedef import RouteDef as RouteDef +from .web_routedef import RouteTableDef as RouteTableDef +from .web_routedef import StaticDef as StaticDef +from .web_routedef import delete as delete +from .web_routedef import get as get +from .web_routedef import head as head +from .web_routedef import options as options +from .web_routedef import patch as patch +from .web_routedef import post as post +from .web_routedef import put as put +from .web_routedef import route as route +from .web_routedef import static as static +from .web_routedef import view as view +from .web_runner import AppRunner as AppRunner +from .web_runner import BaseRunner as BaseRunner +from .web_runner import BaseSite as BaseSite +from .web_runner import GracefulExit as GracefulExit +from .web_runner import NamedPipeSite as NamedPipeSite +from .web_runner import ServerRunner as ServerRunner +from .web_runner import SockSite as SockSite +from .web_runner import TCPSite as TCPSite +from .web_runner import UnixSite as UnixSite +from .web_server import Server as Server +from .web_urldispatcher import AbstractResource as AbstractResource +from .web_urldispatcher import AbstractRoute as AbstractRoute +from .web_urldispatcher import DynamicResource as DynamicResource +from .web_urldispatcher import PlainResource as PlainResource +from .web_urldispatcher import Resource as Resource +from .web_urldispatcher import ResourceRoute as ResourceRoute +from .web_urldispatcher import StaticResource as StaticResource +from .web_urldispatcher import UrlDispatcher as UrlDispatcher +from .web_urldispatcher import UrlMappingMatchInfo as UrlMappingMatchInfo +from .web_urldispatcher import View as View +from .web_ws import WebSocketReady as WebSocketReady +from .web_ws import WebSocketResponse as WebSocketResponse +from .web_ws import WSMsgType as WSMsgType + +__all__ = ( + # web_app + 'Application', + 'CleanupError', + # web_exceptions + 'HTTPAccepted', + 'HTTPBadGateway', + 'HTTPBadRequest', + 'HTTPClientError', + 'HTTPConflict', + 'HTTPCreated', + 'HTTPError', + 'HTTPException', + 'HTTPExpectationFailed', + 'HTTPFailedDependency', + 'HTTPForbidden', + 'HTTPFound', + 'HTTPGatewayTimeout', + 'HTTPGone', + 'HTTPInsufficientStorage', + 'HTTPInternalServerError', + 'HTTPLengthRequired', + 'HTTPMethodNotAllowed', + 'HTTPMisdirectedRequest', + 'HTTPMovedPermanently', + 'HTTPMultipleChoices', + 'HTTPNetworkAuthenticationRequired', + 'HTTPNoContent', + 'HTTPNonAuthoritativeInformation', + 'HTTPNotAcceptable', + 'HTTPNotExtended', + 'HTTPNotFound', + 'HTTPNotImplemented', + 'HTTPNotModified', + 'HTTPOk', + 'HTTPPartialContent', + 'HTTPPaymentRequired', + 'HTTPPermanentRedirect', + 'HTTPPreconditionFailed', + 'HTTPPreconditionRequired', + 'HTTPProxyAuthenticationRequired', + 'HTTPRedirection', + 'HTTPRequestEntityTooLarge', + 'HTTPRequestHeaderFieldsTooLarge', + 'HTTPRequestRangeNotSatisfiable', + 'HTTPRequestTimeout', + 'HTTPRequestURITooLong', + 'HTTPResetContent', + 'HTTPSeeOther', + 'HTTPServerError', + 'HTTPServiceUnavailable', + 'HTTPSuccessful', + 'HTTPTemporaryRedirect', + 'HTTPTooManyRequests', + 'HTTPUnauthorized', + 'HTTPUnavailableForLegalReasons', + 'HTTPUnprocessableEntity', + 'HTTPUnsupportedMediaType', + 'HTTPUpgradeRequired', + 'HTTPUseProxy', + 'HTTPVariantAlsoNegotiates', + 'HTTPVersionNotSupported', + # web_fileresponse + 'FileResponse', + # web_middlewares + 'middleware', + 'normalize_path_middleware', + # web_protocol + 'PayloadAccessError', + 'RequestHandler', + 'RequestPayloadError', + # web_request + 'BaseRequest', + 'FileField', + 'Request', + # web_response + 'ContentCoding', + 'Response', + 'StreamResponse', + 'json_response', + # web_routedef + 'AbstractRouteDef', + 'RouteDef', + 'RouteTableDef', + 'StaticDef', + 'delete', + 'get', + 'head', + 'options', + 'patch', + 'post', + 'put', + 'route', + 'static', + 'view', + # web_runner + 'AppRunner', + 'BaseRunner', + 'BaseSite', + 'GracefulExit', + 'ServerRunner', + 'SockSite', + 'TCPSite', + 'UnixSite', + 'NamedPipeSite', + # web_server + 'Server', + # web_urldispatcher + 'AbstractResource', + 'AbstractRoute', + 'DynamicResource', + 'PlainResource', + 'Resource', + 'ResourceRoute', + 'StaticResource', + 'UrlDispatcher', + 'UrlMappingMatchInfo', + 'View', + # web_ws + 'WebSocketReady', + 'WebSocketResponse', + 'WSMsgType', + # web + 'run_app', +) + + +try: + from ssl import SSLContext +except ImportError: # pragma: no cover + SSLContext = Any # type: ignore + + +async def _run_app(app: Union[Application, Awaitable[Application]], *, + host: Optional[str]=None, + port: Optional[int]=None, + path: Optional[str]=None, + sock: Optional[socket.socket]=None, + shutdown_timeout: float=60.0, + ssl_context: Optional[SSLContext]=None, + print: Callable[..., None]=print, + backlog: int=128, + access_log_class: Type[AbstractAccessLogger]=AccessLogger, + access_log_format: str=AccessLogger.LOG_FORMAT, + access_log: Optional[logging.Logger]=access_logger, + handle_signals: bool=True, + reuse_address: Optional[bool]=None, + reuse_port: Optional[bool]=None) -> None: + # A internal functio to actually do all dirty job for application running + if asyncio.iscoroutine(app): + app = await app # type: ignore + + app = cast(Application, app) + + runner = AppRunner(app, handle_signals=handle_signals, + access_log_class=access_log_class, + access_log_format=access_log_format, + access_log=access_log) + + await runner.setup() + + sites = [] # type: List[BaseSite] + + try: + if host is not None: + if isinstance(host, (str, bytes, bytearray, memoryview)): + sites.append(TCPSite(runner, host, port, + shutdown_timeout=shutdown_timeout, + ssl_context=ssl_context, + backlog=backlog, + reuse_address=reuse_address, + reuse_port=reuse_port)) + else: + for h in host: + sites.append(TCPSite(runner, h, port, + shutdown_timeout=shutdown_timeout, + ssl_context=ssl_context, + backlog=backlog, + reuse_address=reuse_address, + reuse_port=reuse_port)) + elif path is None and sock is None or port is not None: + sites.append(TCPSite(runner, port=port, + shutdown_timeout=shutdown_timeout, + ssl_context=ssl_context, backlog=backlog, + reuse_address=reuse_address, + reuse_port=reuse_port)) + + if path is not None: + if isinstance(path, (str, bytes, bytearray, memoryview)): + sites.append(UnixSite(runner, path, + shutdown_timeout=shutdown_timeout, + ssl_context=ssl_context, + backlog=backlog)) + else: + for p in path: + sites.append(UnixSite(runner, p, + shutdown_timeout=shutdown_timeout, + ssl_context=ssl_context, + backlog=backlog)) + + if sock is not None: + if not isinstance(sock, Iterable): + sites.append(SockSite(runner, sock, + shutdown_timeout=shutdown_timeout, + ssl_context=ssl_context, + backlog=backlog)) + else: + for s in sock: + sites.append(SockSite(runner, s, + shutdown_timeout=shutdown_timeout, + ssl_context=ssl_context, + backlog=backlog)) + for site in sites: + await site.start() + + if print: # pragma: no branch + names = sorted(str(s.name) for s in runner.sites) + print("======== Running on {} ========\n" + "(Press CTRL+C to quit)".format(', '.join(names))) + while True: + await asyncio.sleep(3600) # sleep forever by 1 hour intervals + finally: + await runner.cleanup() + + +def _cancel_all_tasks(loop: asyncio.AbstractEventLoop) -> None: + to_cancel = all_tasks(loop) + if not to_cancel: + return + + for task in to_cancel: + task.cancel() + + loop.run_until_complete( + asyncio.gather(*to_cancel, loop=loop, return_exceptions=True)) + + for task in to_cancel: + if task.cancelled(): + continue + if task.exception() is not None: + loop.call_exception_handler({ + 'message': 'unhandled exception during asyncio.run() shutdown', + 'exception': task.exception(), + 'task': task, + }) + + +def run_app(app: Union[Application, Awaitable[Application]], *, + host: Optional[str]=None, + port: Optional[int]=None, + path: Optional[str]=None, + sock: Optional[socket.socket]=None, + shutdown_timeout: float=60.0, + ssl_context: Optional[SSLContext]=None, + print: Callable[..., None]=print, + backlog: int=128, + access_log_class: Type[AbstractAccessLogger]=AccessLogger, + access_log_format: str=AccessLogger.LOG_FORMAT, + access_log: Optional[logging.Logger]=access_logger, + handle_signals: bool=True, + reuse_address: Optional[bool]=None, + reuse_port: Optional[bool]=None) -> None: + """Run an app locally""" + loop = asyncio.get_event_loop() + + # Configure if and only if in debugging mode and using the default logger + if loop.get_debug() and access_log and access_log.name == 'aiohttp.access': + if access_log.level == logging.NOTSET: + access_log.setLevel(logging.DEBUG) + if not access_log.hasHandlers(): + access_log.addHandler(logging.StreamHandler()) + + try: + loop.run_until_complete(_run_app(app, + host=host, + port=port, + path=path, + sock=sock, + shutdown_timeout=shutdown_timeout, + ssl_context=ssl_context, + print=print, + backlog=backlog, + access_log_class=access_log_class, + access_log_format=access_log_format, + access_log=access_log, + handle_signals=handle_signals, + reuse_address=reuse_address, + reuse_port=reuse_port)) + except (GracefulExit, KeyboardInterrupt): # pragma: no cover + pass + finally: + _cancel_all_tasks(loop) + if sys.version_info >= (3, 6): # don't use PY_36 to pass mypy + loop.run_until_complete(loop.shutdown_asyncgens()) + loop.close() + + +def main(argv: List[str]) -> None: + arg_parser = ArgumentParser( + description="aiohttp.web Application server", + prog="aiohttp.web" + ) + arg_parser.add_argument( + "entry_func", + help=("Callable returning the `aiohttp.web.Application` instance to " + "run. Should be specified in the 'module:function' syntax."), + metavar="entry-func" + ) + arg_parser.add_argument( + "-H", "--hostname", + help="TCP/IP hostname to serve on (default: %(default)r)", + default="localhost" + ) + arg_parser.add_argument( + "-P", "--port", + help="TCP/IP port to serve on (default: %(default)r)", + type=int, + default="8080" + ) + arg_parser.add_argument( + "-U", "--path", + help="Unix file system path to serve on. Specifying a path will cause " + "hostname and port arguments to be ignored.", + ) + args, extra_argv = arg_parser.parse_known_args(argv) + + # Import logic + mod_str, _, func_str = args.entry_func.partition(":") + if not func_str or not mod_str: + arg_parser.error( + "'entry-func' not in 'module:function' syntax" + ) + if mod_str.startswith("."): + arg_parser.error("relative module names not supported") + try: + module = import_module(mod_str) + except ImportError as ex: + arg_parser.error("unable to import %s: %s" % (mod_str, ex)) + try: + func = getattr(module, func_str) + except AttributeError: + arg_parser.error("module %r has no attribute %r" % (mod_str, func_str)) + + # Compatibility logic + if args.path is not None and not hasattr(socket, 'AF_UNIX'): + arg_parser.error("file system paths not supported by your operating" + " environment") + + logging.basicConfig(level=logging.DEBUG) + + app = func(extra_argv) + run_app(app, host=args.hostname, port=args.port, path=args.path) + arg_parser.exit(message="Stopped\n") + + +if __name__ == "__main__": # pragma: no branch + main(sys.argv[1:]) # pragma: no cover diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/web_app.py b/venv-linux/lib/python3.6/site-packages/aiohttp/web_app.py new file mode 100644 index 0000000..783bdbe --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/web_app.py @@ -0,0 +1,514 @@ +import asyncio +import logging +import warnings +from functools import partial +from typing import ( # noqa + TYPE_CHECKING, + Any, + AsyncIterator, + Awaitable, + Callable, + Dict, + Iterable, + Iterator, + List, + Mapping, + MutableMapping, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) + +from . import hdrs +from .abc import ( + AbstractAccessLogger, + AbstractMatchInfo, + AbstractRouter, + AbstractStreamWriter, +) +from .frozenlist import FrozenList +from .helpers import DEBUG +from .http_parser import RawRequestMessage +from .log import web_logger +from .signals import Signal +from .streams import StreamReader +from .web_log import AccessLogger +from .web_middlewares import _fix_request_current_app +from .web_protocol import RequestHandler +from .web_request import Request +from .web_response import StreamResponse +from .web_routedef import AbstractRouteDef +from .web_server import Server +from .web_urldispatcher import ( + AbstractResource, + Domain, + MaskDomain, + MatchedSubAppResource, + PrefixedSubAppResource, + UrlDispatcher, +) + +__all__ = ('Application', 'CleanupError') + + +if TYPE_CHECKING: # pragma: no cover + _AppSignal = Signal[Callable[['Application'], Awaitable[None]]] + _RespPrepareSignal = Signal[Callable[[Request, StreamResponse], + Awaitable[None]]] + _Handler = Callable[[Request], Awaitable[StreamResponse]] + _Middleware = Union[Callable[[Request, _Handler], + Awaitable[StreamResponse]], + Callable[['Application', _Handler], # old-style + Awaitable[_Handler]]] + _Middlewares = FrozenList[_Middleware] + _MiddlewaresHandlers = Optional[Sequence[Tuple[_Middleware, bool]]] + _Subapps = List['Application'] +else: + # No type checker mode, skip types + _AppSignal = Signal + _RespPrepareSignal = Signal + _Handler = Callable + _Middleware = Callable + _Middlewares = FrozenList + _MiddlewaresHandlers = Optional[Sequence] + _Subapps = List + + +class Application(MutableMapping[str, Any]): + ATTRS = frozenset([ + 'logger', '_debug', '_router', '_loop', '_handler_args', + '_middlewares', '_middlewares_handlers', '_run_middlewares', + '_state', '_frozen', '_pre_frozen', '_subapps', + '_on_response_prepare', '_on_startup', '_on_shutdown', + '_on_cleanup', '_client_max_size', '_cleanup_ctx']) + + def __init__(self, *, + logger: logging.Logger=web_logger, + router: Optional[UrlDispatcher]=None, + middlewares: Iterable[_Middleware]=(), + handler_args: Mapping[str, Any]=None, + client_max_size: int=1024**2, + loop: Optional[asyncio.AbstractEventLoop]=None, + debug: Any=... # mypy doesn't support ellipsis + ) -> None: + if router is None: + router = UrlDispatcher() + else: + warnings.warn("router argument is deprecated", DeprecationWarning, + stacklevel=2) + assert isinstance(router, AbstractRouter), router + + if loop is not None: + warnings.warn("loop argument is deprecated", DeprecationWarning, + stacklevel=2) + + if debug is not ...: + warnings.warn("debug argument is deprecated", + DeprecationWarning, + stacklevel=2) + self._debug = debug + self._router = router # type: UrlDispatcher + self._loop = loop + self._handler_args = handler_args + self.logger = logger + + self._middlewares = FrozenList(middlewares) # type: _Middlewares + + # initialized on freezing + self._middlewares_handlers = None # type: _MiddlewaresHandlers + # initialized on freezing + self._run_middlewares = None # type: Optional[bool] + + self._state = {} # type: Dict[str, Any] + self._frozen = False + self._pre_frozen = False + self._subapps = [] # type: _Subapps + + self._on_response_prepare = Signal(self) # type: _RespPrepareSignal + self._on_startup = Signal(self) # type: _AppSignal + self._on_shutdown = Signal(self) # type: _AppSignal + self._on_cleanup = Signal(self) # type: _AppSignal + self._cleanup_ctx = CleanupContext() + self._on_startup.append(self._cleanup_ctx._on_startup) + self._on_cleanup.append(self._cleanup_ctx._on_cleanup) + self._client_max_size = client_max_size + + def __init_subclass__(cls: Type['Application']) -> None: + warnings.warn("Inheritance class {} from web.Application " + "is discouraged".format(cls.__name__), + DeprecationWarning, + stacklevel=2) + + if DEBUG: # pragma: no cover + def __setattr__(self, name: str, val: Any) -> None: + if name not in self.ATTRS: + warnings.warn("Setting custom web.Application.{} attribute " + "is discouraged".format(name), + DeprecationWarning, + stacklevel=2) + super().__setattr__(name, val) + + # MutableMapping API + + def __eq__(self, other: object) -> bool: + return self is other + + def __getitem__(self, key: str) -> Any: + return self._state[key] + + def _check_frozen(self) -> None: + if self._frozen: + warnings.warn("Changing state of started or joined " + "application is deprecated", + DeprecationWarning, + stacklevel=3) + + def __setitem__(self, key: str, value: Any) -> None: + self._check_frozen() + self._state[key] = value + + def __delitem__(self, key: str) -> None: + self._check_frozen() + del self._state[key] + + def __len__(self) -> int: + return len(self._state) + + def __iter__(self) -> Iterator[str]: + return iter(self._state) + + ######## + @property + def loop(self) -> asyncio.AbstractEventLoop: + # Technically the loop can be None + # but we mask it by explicit type cast + # to provide more convinient type annotation + warnings.warn("loop property is deprecated", + DeprecationWarning, + stacklevel=2) + return cast(asyncio.AbstractEventLoop, self._loop) + + def _set_loop(self, loop: Optional[asyncio.AbstractEventLoop]) -> None: + if loop is None: + loop = asyncio.get_event_loop() + if self._loop is not None and self._loop is not loop: + raise RuntimeError( + "web.Application instance initialized with different loop") + + self._loop = loop + + # set loop debug + if self._debug is ...: + self._debug = loop.get_debug() + + # set loop to sub applications + for subapp in self._subapps: + subapp._set_loop(loop) + + @property + def pre_frozen(self) -> bool: + return self._pre_frozen + + def pre_freeze(self) -> None: + if self._pre_frozen: + return + + self._pre_frozen = True + self._middlewares.freeze() + self._router.freeze() + self._on_response_prepare.freeze() + self._cleanup_ctx.freeze() + self._on_startup.freeze() + self._on_shutdown.freeze() + self._on_cleanup.freeze() + self._middlewares_handlers = tuple(self._prepare_middleware()) + + # If current app and any subapp do not have middlewares avoid run all + # of the code footprint that it implies, which have a middleware + # hardcoded per app that sets up the current_app attribute. If no + # middlewares are configured the handler will receive the proper + # current_app without needing all of this code. + self._run_middlewares = True if self.middlewares else False + + for subapp in self._subapps: + subapp.pre_freeze() + self._run_middlewares = (self._run_middlewares or + subapp._run_middlewares) + + @property + def frozen(self) -> bool: + return self._frozen + + def freeze(self) -> None: + if self._frozen: + return + + self.pre_freeze() + self._frozen = True + for subapp in self._subapps: + subapp.freeze() + + @property + def debug(self) -> bool: + warnings.warn("debug property is deprecated", + DeprecationWarning, + stacklevel=2) + return self._debug + + def _reg_subapp_signals(self, subapp: 'Application') -> None: + + def reg_handler(signame: str) -> None: + subsig = getattr(subapp, signame) + + async def handler(app: 'Application') -> None: + await subsig.send(subapp) + appsig = getattr(self, signame) + appsig.append(handler) + + reg_handler('on_startup') + reg_handler('on_shutdown') + reg_handler('on_cleanup') + + def add_subapp(self, prefix: str, + subapp: 'Application') -> AbstractResource: + if not isinstance(prefix, str): + raise TypeError("Prefix must be str") + prefix = prefix.rstrip('/') + if not prefix: + raise ValueError("Prefix cannot be empty") + factory = partial(PrefixedSubAppResource, prefix, subapp) + return self._add_subapp(factory, subapp) + + def _add_subapp(self, + resource_factory: Callable[[], AbstractResource], + subapp: 'Application') -> AbstractResource: + if self.frozen: + raise RuntimeError( + "Cannot add sub application to frozen application") + if subapp.frozen: + raise RuntimeError("Cannot add frozen application") + resource = resource_factory() + self.router.register_resource(resource) + self._reg_subapp_signals(subapp) + self._subapps.append(subapp) + subapp.pre_freeze() + if self._loop is not None: + subapp._set_loop(self._loop) + return resource + + def add_domain(self, domain: str, + subapp: 'Application') -> AbstractResource: + if not isinstance(domain, str): + raise TypeError("Domain must be str") + elif '*' in domain: + rule = MaskDomain(domain) # type: Domain + else: + rule = Domain(domain) + factory = partial(MatchedSubAppResource, rule, subapp) + return self._add_subapp(factory, subapp) + + def add_routes(self, routes: Iterable[AbstractRouteDef]) -> None: + self.router.add_routes(routes) + + @property + def on_response_prepare(self) -> _RespPrepareSignal: + return self._on_response_prepare + + @property + def on_startup(self) -> _AppSignal: + return self._on_startup + + @property + def on_shutdown(self) -> _AppSignal: + return self._on_shutdown + + @property + def on_cleanup(self) -> _AppSignal: + return self._on_cleanup + + @property + def cleanup_ctx(self) -> 'CleanupContext': + return self._cleanup_ctx + + @property + def router(self) -> UrlDispatcher: + return self._router + + @property + def middlewares(self) -> _Middlewares: + return self._middlewares + + def _make_handler(self, *, + loop: Optional[asyncio.AbstractEventLoop]=None, + access_log_class: Type[ + AbstractAccessLogger]=AccessLogger, + **kwargs: Any) -> Server: + + if not issubclass(access_log_class, AbstractAccessLogger): + raise TypeError( + 'access_log_class must be subclass of ' + 'aiohttp.abc.AbstractAccessLogger, got {}'.format( + access_log_class)) + + self._set_loop(loop) + self.freeze() + + kwargs['debug'] = self._debug + kwargs['access_log_class'] = access_log_class + if self._handler_args: + for k, v in self._handler_args.items(): + kwargs[k] = v + + return Server(self._handle, # type: ignore + request_factory=self._make_request, + loop=self._loop, **kwargs) + + def make_handler(self, *, + loop: Optional[asyncio.AbstractEventLoop]=None, + access_log_class: Type[ + AbstractAccessLogger]=AccessLogger, + **kwargs: Any) -> Server: + + warnings.warn("Application.make_handler(...) is deprecated, " + "use AppRunner API instead", + DeprecationWarning, + stacklevel=2) + + return self._make_handler(loop=loop, + access_log_class=access_log_class, + **kwargs) + + async def startup(self) -> None: + """Causes on_startup signal + + Should be called in the event loop along with the request handler. + """ + await self.on_startup.send(self) + + async def shutdown(self) -> None: + """Causes on_shutdown signal + + Should be called before cleanup() + """ + await self.on_shutdown.send(self) + + async def cleanup(self) -> None: + """Causes on_cleanup signal + + Should be called after shutdown() + """ + await self.on_cleanup.send(self) + + def _make_request(self, message: RawRequestMessage, + payload: StreamReader, + protocol: RequestHandler, + writer: AbstractStreamWriter, + task: 'asyncio.Task[None]', + _cls: Type[Request]=Request) -> Request: + return _cls( + message, payload, protocol, writer, task, + self._loop, + client_max_size=self._client_max_size) + + def _prepare_middleware(self) -> Iterator[Tuple[_Middleware, bool]]: + for m in reversed(self._middlewares): + if getattr(m, '__middleware_version__', None) == 1: + yield m, True + else: + warnings.warn('old-style middleware "{!r}" deprecated, ' + 'see #2252'.format(m), + DeprecationWarning, stacklevel=2) + yield m, False + + yield _fix_request_current_app(self), True + + async def _handle(self, request: Request) -> StreamResponse: + loop = asyncio.get_event_loop() + debug = loop.get_debug() + match_info = await self._router.resolve(request) + if debug: # pragma: no cover + if not isinstance(match_info, AbstractMatchInfo): + raise TypeError("match_info should be AbstractMatchInfo " + "instance, not {!r}".format(match_info)) + match_info.add_app(self) + + match_info.freeze() + + resp = None + request._match_info = match_info # type: ignore + expect = request.headers.get(hdrs.EXPECT) + if expect: + resp = await match_info.expect_handler(request) + await request.writer.drain() + + if resp is None: + handler = match_info.handler + + if self._run_middlewares: + for app in match_info.apps[::-1]: + for m, new_style in app._middlewares_handlers: # type: ignore # noqa + if new_style: + handler = partial(m, handler=handler) + else: + handler = await m(app, handler) # type: ignore + + resp = await handler(request) + + return resp + + def __call__(self) -> 'Application': + """gunicorn compatibility""" + return self + + def __repr__(self) -> str: + return "".format(id(self)) + + def __bool__(self) -> bool: + return True + + +class CleanupError(RuntimeError): + @property + def exceptions(self) -> List[BaseException]: + return self.args[1] + + +if TYPE_CHECKING: # pragma: no cover + _CleanupContextBase = FrozenList[Callable[[Application], + AsyncIterator[None]]] +else: + _CleanupContextBase = FrozenList + + +class CleanupContext(_CleanupContextBase): + + def __init__(self) -> None: + super().__init__() + self._exits = [] # type: List[AsyncIterator[None]] + + async def _on_startup(self, app: Application) -> None: + for cb in self: + it = cb(app).__aiter__() + await it.__anext__() + self._exits.append(it) + + async def _on_cleanup(self, app: Application) -> None: + errors = [] + for it in reversed(self._exits): + try: + await it.__anext__() + except StopAsyncIteration: + pass + except Exception as exc: + errors.append(exc) + else: + errors.append(RuntimeError("{!r} has more than one 'yield'" + .format(it))) + if errors: + if len(errors) == 1: + raise errors[0] + else: + raise CleanupError("Multiple errors on cleanup stage", errors) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/web_exceptions.py b/venv-linux/lib/python3.6/site-packages/aiohttp/web_exceptions.py new file mode 100644 index 0000000..4d20529 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/web_exceptions.py @@ -0,0 +1,413 @@ +import warnings +from typing import Any, Dict, Iterable, List, Optional, Set # noqa + +from yarl import URL + +from .typedefs import LooseHeaders, StrOrURL +from .web_response import Response + +__all__ = ( + 'HTTPException', + 'HTTPError', + 'HTTPRedirection', + 'HTTPSuccessful', + 'HTTPOk', + 'HTTPCreated', + 'HTTPAccepted', + 'HTTPNonAuthoritativeInformation', + 'HTTPNoContent', + 'HTTPResetContent', + 'HTTPPartialContent', + 'HTTPMultipleChoices', + 'HTTPMovedPermanently', + 'HTTPFound', + 'HTTPSeeOther', + 'HTTPNotModified', + 'HTTPUseProxy', + 'HTTPTemporaryRedirect', + 'HTTPPermanentRedirect', + 'HTTPClientError', + 'HTTPBadRequest', + 'HTTPUnauthorized', + 'HTTPPaymentRequired', + 'HTTPForbidden', + 'HTTPNotFound', + 'HTTPMethodNotAllowed', + 'HTTPNotAcceptable', + 'HTTPProxyAuthenticationRequired', + 'HTTPRequestTimeout', + 'HTTPConflict', + 'HTTPGone', + 'HTTPLengthRequired', + 'HTTPPreconditionFailed', + 'HTTPRequestEntityTooLarge', + 'HTTPRequestURITooLong', + 'HTTPUnsupportedMediaType', + 'HTTPRequestRangeNotSatisfiable', + 'HTTPExpectationFailed', + 'HTTPMisdirectedRequest', + 'HTTPUnprocessableEntity', + 'HTTPFailedDependency', + 'HTTPUpgradeRequired', + 'HTTPPreconditionRequired', + 'HTTPTooManyRequests', + 'HTTPRequestHeaderFieldsTooLarge', + 'HTTPUnavailableForLegalReasons', + 'HTTPServerError', + 'HTTPInternalServerError', + 'HTTPNotImplemented', + 'HTTPBadGateway', + 'HTTPServiceUnavailable', + 'HTTPGatewayTimeout', + 'HTTPVersionNotSupported', + 'HTTPVariantAlsoNegotiates', + 'HTTPInsufficientStorage', + 'HTTPNotExtended', + 'HTTPNetworkAuthenticationRequired', +) + + +############################################################ +# HTTP Exceptions +############################################################ + +class HTTPException(Response, Exception): + + # You should set in subclasses: + # status = 200 + + status_code = -1 + empty_body = False + + __http_exception__ = True + + def __init__(self, *, + headers: Optional[LooseHeaders]=None, + reason: Optional[str]=None, + body: Any=None, + text: Optional[str]=None, + content_type: Optional[str]=None) -> None: + if body is not None: + warnings.warn( + "body argument is deprecated for http web exceptions", + DeprecationWarning) + Response.__init__(self, status=self.status_code, + headers=headers, reason=reason, + body=body, text=text, content_type=content_type) + Exception.__init__(self, self.reason) + if self.body is None and not self.empty_body: + self.text = "{}: {}".format(self.status, self.reason) + + def __bool__(self) -> bool: + return True + + +class HTTPError(HTTPException): + """Base class for exceptions with status codes in the 400s and 500s.""" + + +class HTTPRedirection(HTTPException): + """Base class for exceptions with status codes in the 300s.""" + + +class HTTPSuccessful(HTTPException): + """Base class for exceptions with status codes in the 200s.""" + + +class HTTPOk(HTTPSuccessful): + status_code = 200 + + +class HTTPCreated(HTTPSuccessful): + status_code = 201 + + +class HTTPAccepted(HTTPSuccessful): + status_code = 202 + + +class HTTPNonAuthoritativeInformation(HTTPSuccessful): + status_code = 203 + + +class HTTPNoContent(HTTPSuccessful): + status_code = 204 + empty_body = True + + +class HTTPResetContent(HTTPSuccessful): + status_code = 205 + empty_body = True + + +class HTTPPartialContent(HTTPSuccessful): + status_code = 206 + + +############################################################ +# 3xx redirection +############################################################ + + +class _HTTPMove(HTTPRedirection): + + def __init__(self, + location: StrOrURL, + *, + headers: Optional[LooseHeaders]=None, + reason: Optional[str]=None, + body: Any=None, + text: Optional[str]=None, + content_type: Optional[str]=None) -> None: + if not location: + raise ValueError("HTTP redirects need a location to redirect to.") + super().__init__(headers=headers, reason=reason, + body=body, text=text, content_type=content_type) + self.headers['Location'] = str(URL(location)) + self.location = location + + +class HTTPMultipleChoices(_HTTPMove): + status_code = 300 + + +class HTTPMovedPermanently(_HTTPMove): + status_code = 301 + + +class HTTPFound(_HTTPMove): + status_code = 302 + + +# This one is safe after a POST (the redirected location will be +# retrieved with GET): +class HTTPSeeOther(_HTTPMove): + status_code = 303 + + +class HTTPNotModified(HTTPRedirection): + # FIXME: this should include a date or etag header + status_code = 304 + empty_body = True + + +class HTTPUseProxy(_HTTPMove): + # Not a move, but looks a little like one + status_code = 305 + + +class HTTPTemporaryRedirect(_HTTPMove): + status_code = 307 + + +class HTTPPermanentRedirect(_HTTPMove): + status_code = 308 + + +############################################################ +# 4xx client error +############################################################ + + +class HTTPClientError(HTTPError): + pass + + +class HTTPBadRequest(HTTPClientError): + status_code = 400 + + +class HTTPUnauthorized(HTTPClientError): + status_code = 401 + + +class HTTPPaymentRequired(HTTPClientError): + status_code = 402 + + +class HTTPForbidden(HTTPClientError): + status_code = 403 + + +class HTTPNotFound(HTTPClientError): + status_code = 404 + + +class HTTPMethodNotAllowed(HTTPClientError): + status_code = 405 + + def __init__(self, + method: str, + allowed_methods: Iterable[str], + *, + headers: Optional[LooseHeaders]=None, + reason: Optional[str]=None, + body: Any=None, + text: Optional[str]=None, + content_type: Optional[str]=None) -> None: + allow = ','.join(sorted(allowed_methods)) + super().__init__(headers=headers, reason=reason, + body=body, text=text, content_type=content_type) + self.headers['Allow'] = allow + self.allowed_methods = set(allowed_methods) # type: Set[str] + self.method = method.upper() + + +class HTTPNotAcceptable(HTTPClientError): + status_code = 406 + + +class HTTPProxyAuthenticationRequired(HTTPClientError): + status_code = 407 + + +class HTTPRequestTimeout(HTTPClientError): + status_code = 408 + + +class HTTPConflict(HTTPClientError): + status_code = 409 + + +class HTTPGone(HTTPClientError): + status_code = 410 + + +class HTTPLengthRequired(HTTPClientError): + status_code = 411 + + +class HTTPPreconditionFailed(HTTPClientError): + status_code = 412 + + +class HTTPRequestEntityTooLarge(HTTPClientError): + status_code = 413 + + def __init__(self, + max_size: float, + actual_size: float, + **kwargs: Any) -> None: + kwargs.setdefault( + 'text', + 'Maximum request body size {} exceeded, ' + 'actual body size {}'.format(max_size, actual_size) + ) + super().__init__(**kwargs) + + +class HTTPRequestURITooLong(HTTPClientError): + status_code = 414 + + +class HTTPUnsupportedMediaType(HTTPClientError): + status_code = 415 + + +class HTTPRequestRangeNotSatisfiable(HTTPClientError): + status_code = 416 + + +class HTTPExpectationFailed(HTTPClientError): + status_code = 417 + + +class HTTPMisdirectedRequest(HTTPClientError): + status_code = 421 + + +class HTTPUnprocessableEntity(HTTPClientError): + status_code = 422 + + +class HTTPFailedDependency(HTTPClientError): + status_code = 424 + + +class HTTPUpgradeRequired(HTTPClientError): + status_code = 426 + + +class HTTPPreconditionRequired(HTTPClientError): + status_code = 428 + + +class HTTPTooManyRequests(HTTPClientError): + status_code = 429 + + +class HTTPRequestHeaderFieldsTooLarge(HTTPClientError): + status_code = 431 + + +class HTTPUnavailableForLegalReasons(HTTPClientError): + status_code = 451 + + def __init__(self, + link: str, + *, + headers: Optional[LooseHeaders]=None, + reason: Optional[str]=None, + body: Any=None, + text: Optional[str]=None, + content_type: Optional[str]=None) -> None: + super().__init__(headers=headers, reason=reason, + body=body, text=text, content_type=content_type) + self.headers['Link'] = '<%s>; rel="blocked-by"' % link + self.link = link + + +############################################################ +# 5xx Server Error +############################################################ +# Response status codes beginning with the digit "5" indicate cases in +# which the server is aware that it has erred or is incapable of +# performing the request. Except when responding to a HEAD request, the +# server SHOULD include an entity containing an explanation of the error +# situation, and whether it is a temporary or permanent condition. User +# agents SHOULD display any included entity to the user. These response +# codes are applicable to any request method. + + +class HTTPServerError(HTTPError): + pass + + +class HTTPInternalServerError(HTTPServerError): + status_code = 500 + + +class HTTPNotImplemented(HTTPServerError): + status_code = 501 + + +class HTTPBadGateway(HTTPServerError): + status_code = 502 + + +class HTTPServiceUnavailable(HTTPServerError): + status_code = 503 + + +class HTTPGatewayTimeout(HTTPServerError): + status_code = 504 + + +class HTTPVersionNotSupported(HTTPServerError): + status_code = 505 + + +class HTTPVariantAlsoNegotiates(HTTPServerError): + status_code = 506 + + +class HTTPInsufficientStorage(HTTPServerError): + status_code = 507 + + +class HTTPNotExtended(HTTPServerError): + status_code = 510 + + +class HTTPNetworkAuthenticationRequired(HTTPServerError): + status_code = 511 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/web_fileresponse.py b/venv-linux/lib/python3.6/site-packages/aiohttp/web_fileresponse.py new file mode 100644 index 0000000..c6968cc --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/web_fileresponse.py @@ -0,0 +1,346 @@ +import asyncio +import mimetypes +import os +import pathlib +from functools import partial +from typing import ( # noqa + IO, + TYPE_CHECKING, + Any, + Awaitable, + Callable, + List, + Optional, + Union, + cast, +) + +from . import hdrs +from .abc import AbstractStreamWriter +from .base_protocol import BaseProtocol +from .helpers import set_exception, set_result +from .http_writer import StreamWriter +from .log import server_logger +from .typedefs import LooseHeaders +from .web_exceptions import ( + HTTPNotModified, + HTTPPartialContent, + HTTPPreconditionFailed, + HTTPRequestRangeNotSatisfiable, +) +from .web_response import StreamResponse + +__all__ = ('FileResponse',) + +if TYPE_CHECKING: # pragma: no cover + from .web_request import BaseRequest # noqa + + +_T_OnChunkSent = Optional[Callable[[bytes], Awaitable[None]]] + + +NOSENDFILE = bool(os.environ.get("AIOHTTP_NOSENDFILE")) + + +class SendfileStreamWriter(StreamWriter): + + def __init__(self, + protocol: BaseProtocol, + loop: asyncio.AbstractEventLoop, + fobj: IO[Any], + count: int, + on_chunk_sent: _T_OnChunkSent=None) -> None: + super().__init__(protocol, loop, on_chunk_sent) + self._sendfile_buffer = [] # type: List[bytes] + self._fobj = fobj + self._count = count + self._offset = fobj.tell() + self._in_fd = fobj.fileno() + + def _write(self, chunk: bytes) -> None: + # we overwrite StreamWriter._write, so nothing can be appended to + # _buffer, and nothing is written to the transport directly by the + # parent class + self.output_size += len(chunk) + self._sendfile_buffer.append(chunk) + + def _sendfile_cb(self, fut: 'asyncio.Future[None]', out_fd: int) -> None: + if fut.cancelled(): + return + try: + if self._do_sendfile(out_fd): + set_result(fut, None) + except Exception as exc: + set_exception(fut, exc) + + def _do_sendfile(self, out_fd: int) -> bool: + try: + n = os.sendfile(out_fd, + self._in_fd, + self._offset, + self._count) + if n == 0: # in_fd EOF reached + n = self._count + except (BlockingIOError, InterruptedError): + n = 0 + self.output_size += n + self._offset += n + self._count -= n + assert self._count >= 0 + return self._count == 0 + + def _done_fut(self, out_fd: int, fut: 'asyncio.Future[None]') -> None: + self.loop.remove_writer(out_fd) + + async def sendfile(self) -> None: + assert self.transport is not None + out_socket = self.transport.get_extra_info('socket').dup() + out_socket.setblocking(False) + out_fd = out_socket.fileno() + + loop = self.loop + data = b''.join(self._sendfile_buffer) + try: + await loop.sock_sendall(out_socket, data) + if not self._do_sendfile(out_fd): + fut = loop.create_future() + fut.add_done_callback(partial(self._done_fut, out_fd)) + loop.add_writer(out_fd, self._sendfile_cb, fut, out_fd) + await fut + except asyncio.CancelledError: + raise + except Exception: + server_logger.debug('Socket error') + self.transport.close() + finally: + out_socket.close() + + await super().write_eof() + + async def write_eof(self, chunk: bytes=b'') -> None: + pass + + +class FileResponse(StreamResponse): + """A response object can be used to send files.""" + + def __init__(self, path: Union[str, pathlib.Path], + chunk_size: int=256*1024, + status: int=200, + reason: Optional[str]=None, + headers: Optional[LooseHeaders]=None) -> None: + super().__init__(status=status, reason=reason, headers=headers) + + if isinstance(path, str): + path = pathlib.Path(path) + + self._path = path + self._chunk_size = chunk_size + + async def _sendfile_system(self, request: 'BaseRequest', + fobj: IO[Any], + count: int) -> AbstractStreamWriter: + # Write count bytes of fobj to resp using + # the os.sendfile system call. + # + # For details check + # https://github.com/KeepSafe/aiohttp/issues/1177 + # See https://github.com/KeepSafe/aiohttp/issues/958 for details + # + # request should be an aiohttp.web.Request instance. + # fobj should be an open file object. + # count should be an integer > 0. + + transport = request.transport + assert transport is not None + if (transport.get_extra_info("sslcontext") or + transport.get_extra_info("socket") is None or + self.compression): + writer = await self._sendfile_fallback(request, fobj, count) + else: + writer = SendfileStreamWriter( + request.protocol, + request._loop, + fobj, + count + ) + request._payload_writer = writer + + await super().prepare(request) + await writer.sendfile() + + return writer + + async def _sendfile_fallback(self, request: 'BaseRequest', + fobj: IO[Any], + count: int) -> AbstractStreamWriter: + # Mimic the _sendfile_system() method, but without using the + # os.sendfile() system call. This should be used on systems + # that don't support the os.sendfile(). + + # To keep memory usage low,fobj is transferred in chunks + # controlled by the constructor's chunk_size argument. + + writer = await super().prepare(request) + assert writer is not None + + chunk_size = self._chunk_size + loop = asyncio.get_event_loop() + + chunk = await loop.run_in_executor(None, fobj.read, chunk_size) + while chunk: + await writer.write(chunk) + count = count - chunk_size + if count <= 0: + break + chunk = await loop.run_in_executor( + None, fobj.read, min(chunk_size, count) + ) + + await writer.drain() + return writer + + if hasattr(os, "sendfile") and not NOSENDFILE: # pragma: no cover + _sendfile = _sendfile_system + else: # pragma: no cover + _sendfile = _sendfile_fallback + + async def prepare( + self, + request: 'BaseRequest' + ) -> Optional[AbstractStreamWriter]: + filepath = self._path + + gzip = False + if 'gzip' in request.headers.get(hdrs.ACCEPT_ENCODING, ''): + gzip_path = filepath.with_name(filepath.name + '.gz') + + if gzip_path.is_file(): + filepath = gzip_path + gzip = True + + loop = asyncio.get_event_loop() + st = await loop.run_in_executor(None, filepath.stat) + + modsince = request.if_modified_since + if modsince is not None and st.st_mtime <= modsince.timestamp(): + self.set_status(HTTPNotModified.status_code) + self._length_check = False + # Delete any Content-Length headers provided by user. HTTP 304 + # should always have empty response body + return await super().prepare(request) + + unmodsince = request.if_unmodified_since + if unmodsince is not None and st.st_mtime > unmodsince.timestamp(): + self.set_status(HTTPPreconditionFailed.status_code) + return await super().prepare(request) + + if hdrs.CONTENT_TYPE not in self.headers: + ct, encoding = mimetypes.guess_type(str(filepath)) + if not ct: + ct = 'application/octet-stream' + should_set_ct = True + else: + encoding = 'gzip' if gzip else None + should_set_ct = False + + status = self._status + file_size = st.st_size + count = file_size + + start = None + + ifrange = request.if_range + if ifrange is None or st.st_mtime <= ifrange.timestamp(): + # If-Range header check: + # condition = cached date >= last modification date + # return 206 if True else 200. + # if False: + # Range header would not be processed, return 200 + # if True but Range header missing + # return 200 + try: + rng = request.http_range + start = rng.start + end = rng.stop + except ValueError: + # https://tools.ietf.org/html/rfc7233: + # A server generating a 416 (Range Not Satisfiable) response to + # a byte-range request SHOULD send a Content-Range header field + # with an unsatisfied-range value. + # The complete-length in a 416 response indicates the current + # length of the selected representation. + # + # Will do the same below. Many servers ignore this and do not + # send a Content-Range header with HTTP 416 + self.headers[hdrs.CONTENT_RANGE] = 'bytes */{0}'.format( + file_size) + self.set_status(HTTPRequestRangeNotSatisfiable.status_code) + return await super().prepare(request) + + # If a range request has been made, convert start, end slice + # notation into file pointer offset and count + if start is not None or end is not None: + if start < 0 and end is None: # return tail of file + start += file_size + if start < 0: + # if Range:bytes=-1000 in request header but file size + # is only 200, there would be trouble without this + start = 0 + count = file_size - start + else: + # rfc7233:If the last-byte-pos value is + # absent, or if the value is greater than or equal to + # the current length of the representation data, + # the byte range is interpreted as the remainder + # of the representation (i.e., the server replaces the + # value of last-byte-pos with a value that is one less than + # the current length of the selected representation). + count = min(end if end is not None else file_size, + file_size) - start + + if start >= file_size: + # HTTP 416 should be returned in this case. + # + # According to https://tools.ietf.org/html/rfc7233: + # If a valid byte-range-set includes at least one + # byte-range-spec with a first-byte-pos that is less than + # the current length of the representation, or at least one + # suffix-byte-range-spec with a non-zero suffix-length, + # then the byte-range-set is satisfiable. Otherwise, the + # byte-range-set is unsatisfiable. + self.headers[hdrs.CONTENT_RANGE] = 'bytes */{0}'.format( + file_size) + self.set_status(HTTPRequestRangeNotSatisfiable.status_code) + return await super().prepare(request) + + status = HTTPPartialContent.status_code + # Even though you are sending the whole file, you should still + # return a HTTP 206 for a Range request. + self.set_status(status) + + if should_set_ct: + self.content_type = ct # type: ignore + if encoding: + self.headers[hdrs.CONTENT_ENCODING] = encoding + if gzip: + self.headers[hdrs.VARY] = hdrs.ACCEPT_ENCODING + self.last_modified = st.st_mtime # type: ignore + self.content_length = count + + self.headers[hdrs.ACCEPT_RANGES] = 'bytes' + + real_start = cast(int, start) + + if status == HTTPPartialContent.status_code: + self.headers[hdrs.CONTENT_RANGE] = 'bytes {0}-{1}/{2}'.format( + real_start, real_start + count - 1, file_size) + + fobj = await loop.run_in_executor(None, filepath.open, 'rb') + if start: # be aware that start could be None or int=0 here. + await loop.run_in_executor(None, fobj.seek, start) + + try: + return await self._sendfile(request, fobj, count) + finally: + await loop.run_in_executor(None, fobj.close) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/web_log.py b/venv-linux/lib/python3.6/site-packages/aiohttp/web_log.py new file mode 100644 index 0000000..5d7db16 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/web_log.py @@ -0,0 +1,235 @@ +import datetime +import functools +import logging +import os +import re +from collections import namedtuple +from typing import Any, Callable, Dict, Iterable, List, Tuple # noqa + +from .abc import AbstractAccessLogger +from .web_request import BaseRequest +from .web_response import StreamResponse + +KeyMethod = namedtuple('KeyMethod', 'key method') + + +class AccessLogger(AbstractAccessLogger): + """Helper object to log access. + + Usage: + log = logging.getLogger("spam") + log_format = "%a %{User-Agent}i" + access_logger = AccessLogger(log, log_format) + access_logger.log(request, response, time) + + Format: + %% The percent sign + %a Remote IP-address (IP-address of proxy if using reverse proxy) + %t Time when the request was started to process + %P The process ID of the child that serviced the request + %r First line of request + %s Response status code + %b Size of response in bytes, including HTTP headers + %T Time taken to serve the request, in seconds + %Tf Time taken to serve the request, in seconds with floating fraction + in .06f format + %D Time taken to serve the request, in microseconds + %{FOO}i request.headers['FOO'] + %{FOO}o response.headers['FOO'] + %{FOO}e os.environ['FOO'] + + """ + LOG_FORMAT_MAP = { + 'a': 'remote_address', + 't': 'request_start_time', + 'P': 'process_id', + 'r': 'first_request_line', + 's': 'response_status', + 'b': 'response_size', + 'T': 'request_time', + 'Tf': 'request_time_frac', + 'D': 'request_time_micro', + 'i': 'request_header', + 'o': 'response_header', + } + + LOG_FORMAT = '%a %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"' + FORMAT_RE = re.compile(r'%(\{([A-Za-z0-9\-_]+)\}([ioe])|[atPrsbOD]|Tf?)') + CLEANUP_RE = re.compile(r'(%[^s])') + _FORMAT_CACHE = {} # type: Dict[str, Tuple[str, List[KeyMethod]]] + + def __init__(self, logger: logging.Logger, + log_format: str=LOG_FORMAT) -> None: + """Initialise the logger. + + logger is a logger object to be used for logging. + log_format is a string with apache compatible log format description. + + """ + super().__init__(logger, log_format=log_format) + + _compiled_format = AccessLogger._FORMAT_CACHE.get(log_format) + if not _compiled_format: + _compiled_format = self.compile_format(log_format) + AccessLogger._FORMAT_CACHE[log_format] = _compiled_format + + self._log_format, self._methods = _compiled_format + + def compile_format(self, log_format: str) -> Tuple[str, List[KeyMethod]]: + """Translate log_format into form usable by modulo formatting + + All known atoms will be replaced with %s + Also methods for formatting of those atoms will be added to + _methods in appropriate order + + For example we have log_format = "%a %t" + This format will be translated to "%s %s" + Also contents of _methods will be + [self._format_a, self._format_t] + These method will be called and results will be passed + to translated string format. + + Each _format_* method receive 'args' which is list of arguments + given to self.log + + Exceptions are _format_e, _format_i and _format_o methods which + also receive key name (by functools.partial) + + """ + # list of (key, method) tuples, we don't use an OrderedDict as users + # can repeat the same key more than once + methods = list() + + for atom in self.FORMAT_RE.findall(log_format): + if atom[1] == '': + format_key1 = self.LOG_FORMAT_MAP[atom[0]] + m = getattr(AccessLogger, '_format_%s' % atom[0]) + key_method = KeyMethod(format_key1, m) + else: + format_key2 = (self.LOG_FORMAT_MAP[atom[2]], atom[1]) + m = getattr(AccessLogger, '_format_%s' % atom[2]) + key_method = KeyMethod(format_key2, + functools.partial(m, atom[1])) + + methods.append(key_method) + + log_format = self.FORMAT_RE.sub(r'%s', log_format) + log_format = self.CLEANUP_RE.sub(r'%\1', log_format) + return log_format, methods + + @staticmethod + def _format_i(key: str, + request: BaseRequest, + response: StreamResponse, + time: float) -> str: + if request is None: + return '(no headers)' + + # suboptimal, make istr(key) once + return request.headers.get(key, '-') + + @staticmethod + def _format_o(key: str, + request: BaseRequest, + response: StreamResponse, + time: float) -> str: + # suboptimal, make istr(key) once + return response.headers.get(key, '-') + + @staticmethod + def _format_a(request: BaseRequest, + response: StreamResponse, + time: float) -> str: + if request is None: + return '-' + ip = request.remote + return ip if ip is not None else '-' + + @staticmethod + def _format_t(request: BaseRequest, + response: StreamResponse, + time: float) -> str: + now = datetime.datetime.utcnow() + start_time = now - datetime.timedelta(seconds=time) + return start_time.strftime('[%d/%b/%Y:%H:%M:%S +0000]') + + @staticmethod + def _format_P(request: BaseRequest, + response: StreamResponse, + time: float) -> str: + return "<%s>" % os.getpid() + + @staticmethod + def _format_r(request: BaseRequest, + response: StreamResponse, + time: float) -> str: + if request is None: + return '-' + return '%s %s HTTP/%s.%s' % (request.method, request.path_qs, + request.version.major, + request.version.minor) + + @staticmethod + def _format_s(request: BaseRequest, + response: StreamResponse, + time: float) -> int: + return response.status + + @staticmethod + def _format_b(request: BaseRequest, + response: StreamResponse, + time: float) -> int: + return response.body_length + + @staticmethod + def _format_T(request: BaseRequest, + response: StreamResponse, + time: float) -> str: + return str(round(time)) + + @staticmethod + def _format_Tf(request: BaseRequest, + response: StreamResponse, + time: float) -> str: + return '%06f' % time + + @staticmethod + def _format_D(request: BaseRequest, + response: StreamResponse, + time: float) -> str: + return str(round(time * 1000000)) + + def _format_line(self, + request: BaseRequest, + response: StreamResponse, + time: float) -> Iterable[Tuple[str, + Callable[[BaseRequest, + StreamResponse, + float], + str]]]: + return [(key, method(request, response, time)) + for key, method in self._methods] + + def log(self, + request: BaseRequest, + response: StreamResponse, + time: float) -> None: + try: + fmt_info = self._format_line(request, response, time) + + values = list() + extra = dict() + for key, value in fmt_info: + values.append(value) + + if key.__class__ is str: + extra[key] = value + else: + k1, k2 = key + dct = extra.get(k1, {}) # type: Any + dct[k2] = value + extra[k1] = dct + + self.logger.info(self._log_format % tuple(values), extra=extra) + except Exception: + self.logger.exception("Error in logging") diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/web_middlewares.py b/venv-linux/lib/python3.6/site-packages/aiohttp/web_middlewares.py new file mode 100644 index 0000000..2c7bf97 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/web_middlewares.py @@ -0,0 +1,120 @@ +import re +from typing import TYPE_CHECKING, Awaitable, Callable, Tuple, Type, TypeVar + +from .web_exceptions import HTTPPermanentRedirect, _HTTPMove +from .web_request import Request +from .web_response import StreamResponse +from .web_urldispatcher import SystemRoute + +__all__ = ( + 'middleware', + 'normalize_path_middleware', +) + +if TYPE_CHECKING: # pragma: no cover + from .web_app import Application # noqa + +_Func = TypeVar('_Func') + + +async def _check_request_resolves(request: Request, + path: str) -> Tuple[bool, Request]: + alt_request = request.clone(rel_url=path) + + match_info = await request.app.router.resolve(alt_request) + alt_request._match_info = match_info # type: ignore + + if match_info.http_exception is None: + return True, alt_request + + return False, request + + +def middleware(f: _Func) -> _Func: + f.__middleware_version__ = 1 # type: ignore + return f + + +_Handler = Callable[[Request], Awaitable[StreamResponse]] +_Middleware = Callable[[Request, _Handler], Awaitable[StreamResponse]] + + +def normalize_path_middleware( + *, append_slash: bool=True, remove_slash: bool=False, + merge_slashes: bool=True, + redirect_class: Type[_HTTPMove]=HTTPPermanentRedirect) -> _Middleware: + """ + Middleware factory which produces a middleware that normalizes + the path of a request. By normalizing it means: + + - Add or remove a trailing slash to the path. + - Double slashes are replaced by one. + + The middleware returns as soon as it finds a path that resolves + correctly. The order if both merge and append/remove are enabled is + 1) merge slashes + 2) append/remove slash + 3) both merge slashes and append/remove slash. + If the path resolves with at least one of those conditions, it will + redirect to the new path. + + Only one of `append_slash` and `remove_slash` can be enabled. If both + are `True` the factory will raise an assertion error + + If `append_slash` is `True` the middleware will append a slash when + needed. If a resource is defined with trailing slash and the request + comes without it, it will append it automatically. + + If `remove_slash` is `True`, `append_slash` must be `False`. When enabled + the middleware will remove trailing slashes and redirect if the resource + is defined + + If merge_slashes is True, merge multiple consecutive slashes in the + path into one. + """ + + correct_configuration = not (append_slash and remove_slash) + assert correct_configuration, "Cannot both remove and append slash" + + @middleware + async def impl(request: Request, handler: _Handler) -> StreamResponse: + if isinstance(request.match_info.route, SystemRoute): + paths_to_check = [] + if '?' in request.raw_path: + path, query = request.raw_path.split('?', 1) + query = '?' + query + else: + query = '' + path = request.raw_path + + if merge_slashes: + paths_to_check.append(re.sub('//+', '/', path)) + if append_slash and not request.path.endswith('/'): + paths_to_check.append(path + '/') + if remove_slash and request.path.endswith('/'): + paths_to_check.append(path[:-1]) + if merge_slashes and append_slash: + paths_to_check.append( + re.sub('//+', '/', path + '/')) + if merge_slashes and remove_slash: + merged_slashes = re.sub('//+', '/', path) + paths_to_check.append(merged_slashes[:-1]) + + for path in paths_to_check: + resolves, request = await _check_request_resolves( + request, path) + if resolves: + raise redirect_class(request.raw_path + query) + + return await handler(request) + + return impl + + +def _fix_request_current_app(app: 'Application') -> _Middleware: + + @middleware + async def impl(request: Request, handler: _Handler) -> StreamResponse: + with request.match_info.set_current_app(app): + return await handler(request) + return impl diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/web_protocol.py b/venv-linux/lib/python3.6/site-packages/aiohttp/web_protocol.py new file mode 100644 index 0000000..6119288 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/web_protocol.py @@ -0,0 +1,599 @@ +import asyncio +import asyncio.streams +import traceback +import warnings +from collections import deque +from contextlib import suppress +from html import escape as html_escape +from http import HTTPStatus +from logging import Logger +from typing import ( + TYPE_CHECKING, + Any, + Awaitable, + Callable, + Optional, + Type, + cast, +) + +import yarl + +from .abc import AbstractAccessLogger, AbstractStreamWriter +from .base_protocol import BaseProtocol +from .helpers import CeilTimeout, current_task +from .http import ( + HttpProcessingError, + HttpRequestParser, + HttpVersion10, + RawRequestMessage, + StreamWriter, +) +from .log import access_logger, server_logger +from .streams import EMPTY_PAYLOAD, StreamReader +from .tcp_helpers import tcp_keepalive +from .web_exceptions import HTTPException +from .web_log import AccessLogger +from .web_request import BaseRequest +from .web_response import Response, StreamResponse + +__all__ = ('RequestHandler', 'RequestPayloadError', 'PayloadAccessError') + +if TYPE_CHECKING: # pragma: no cover + from .web_server import Server # noqa + + +_RequestFactory = Callable[[RawRequestMessage, + StreamReader, + 'RequestHandler', + AbstractStreamWriter, + 'asyncio.Task[None]'], + BaseRequest] + +_RequestHandler = Callable[[BaseRequest], Awaitable[StreamResponse]] + + +ERROR = RawRequestMessage( + 'UNKNOWN', '/', HttpVersion10, {}, + {}, True, False, False, False, yarl.URL('/')) + + +class RequestPayloadError(Exception): + """Payload parsing error.""" + + +class PayloadAccessError(Exception): + """Payload was accessed after response was sent.""" + + +class RequestHandler(BaseProtocol): + """HTTP protocol implementation. + + RequestHandler handles incoming HTTP request. It reads request line, + request headers and request payload and calls handle_request() method. + By default it always returns with 404 response. + + RequestHandler handles errors in incoming request, like bad + status line, bad headers or incomplete payload. If any error occurs, + connection gets closed. + + :param keepalive_timeout: number of seconds before closing + keep-alive connection + :type keepalive_timeout: int or None + + :param bool tcp_keepalive: TCP keep-alive is on, default is on + + :param bool debug: enable debug mode + + :param logger: custom logger object + :type logger: aiohttp.log.server_logger + + :param access_log_class: custom class for access_logger + :type access_log_class: aiohttp.abc.AbstractAccessLogger + + :param access_log: custom logging object + :type access_log: aiohttp.log.server_logger + + :param str access_log_format: access log format string + + :param loop: Optional event loop + + :param int max_line_size: Optional maximum header line size + + :param int max_field_size: Optional maximum header field size + + :param int max_headers: Optional maximum header size + + """ + KEEPALIVE_RESCHEDULE_DELAY = 1 + + __slots__ = ('_request_count', '_keepalive', '_manager', + '_request_handler', '_request_factory', '_tcp_keepalive', + '_keepalive_time', '_keepalive_handle', '_keepalive_timeout', + '_lingering_time', '_messages', '_message_tail', + '_waiter', '_error_handler', '_task_handler', + '_upgrade', '_payload_parser', '_request_parser', + '_reading_paused', 'logger', 'debug', 'access_log', + 'access_logger', '_close', '_force_close') + + def __init__(self, manager: 'Server', *, + loop: asyncio.AbstractEventLoop, + keepalive_timeout: float=75., # NGINX default is 75 secs + tcp_keepalive: bool=True, + logger: Logger=server_logger, + access_log_class: Type[AbstractAccessLogger]=AccessLogger, + access_log: Logger=access_logger, + access_log_format: str=AccessLogger.LOG_FORMAT, + debug: bool=False, + max_line_size: int=8190, + max_headers: int=32768, + max_field_size: int=8190, + lingering_time: float=10.0): + + super().__init__(loop) + + self._request_count = 0 + self._keepalive = False + self._manager = manager # type: Optional[Server] + self._request_handler = manager.request_handler # type: Optional[_RequestHandler] # noqa + self._request_factory = manager.request_factory # type: Optional[_RequestFactory] # noqa + + self._tcp_keepalive = tcp_keepalive + # placeholder to be replaced on keepalive timeout setup + self._keepalive_time = 0.0 + self._keepalive_handle = None # type: Optional[asyncio.Handle] + self._keepalive_timeout = keepalive_timeout + self._lingering_time = float(lingering_time) + + self._messages = deque() # type: Any # Python 3.5 has no typing.Deque + self._message_tail = b'' + + self._waiter = None # type: Optional[asyncio.Future[None]] + self._error_handler = None # type: Optional[asyncio.Task[None]] + self._task_handler = None # type: Optional[asyncio.Task[None]] + + self._upgrade = False + self._payload_parser = None # type: Any + self._request_parser = HttpRequestParser( + self, loop, + max_line_size=max_line_size, + max_field_size=max_field_size, + max_headers=max_headers, + payload_exception=RequestPayloadError) # type: Optional[HttpRequestParser] # noqa + + self.logger = logger + self.debug = debug + self.access_log = access_log + if access_log: + self.access_logger = access_log_class( + access_log, access_log_format) # type: Optional[AbstractAccessLogger] # noqa + else: + self.access_logger = None + + self._close = False + self._force_close = False + + def __repr__(self) -> str: + return "<{} {}>".format( + self.__class__.__name__, + 'connected' if self.transport is not None else 'disconnected') + + @property + def keepalive_timeout(self) -> float: + return self._keepalive_timeout + + async def shutdown(self, timeout: Optional[float]=15.0) -> None: + """Worker process is about to exit, we need cleanup everything and + stop accepting requests. It is especially important for keep-alive + connections.""" + self._force_close = True + + if self._keepalive_handle is not None: + self._keepalive_handle.cancel() + + if self._waiter: + self._waiter.cancel() + + # wait for handlers + with suppress(asyncio.CancelledError, asyncio.TimeoutError): + with CeilTimeout(timeout, loop=self._loop): + if (self._error_handler is not None and + not self._error_handler.done()): + await self._error_handler + + if (self._task_handler is not None and + not self._task_handler.done()): + await self._task_handler + + # force-close non-idle handler + if self._task_handler is not None: + self._task_handler.cancel() + + if self.transport is not None: + self.transport.close() + self.transport = None + + def connection_made(self, transport: asyncio.BaseTransport) -> None: + super().connection_made(transport) + + real_transport = cast(asyncio.Transport, transport) + if self._tcp_keepalive: + tcp_keepalive(real_transport) + + self._task_handler = self._loop.create_task(self.start()) + assert self._manager is not None + self._manager.connection_made(self, real_transport) + + def connection_lost(self, exc: Optional[BaseException]) -> None: + if self._manager is None: + return + self._manager.connection_lost(self, exc) + + super().connection_lost(exc) + + self._manager = None + self._force_close = True + self._request_factory = None + self._request_handler = None + self._request_parser = None + + if self._keepalive_handle is not None: + self._keepalive_handle.cancel() + + if self._task_handler is not None: + self._task_handler.cancel() + + if self._error_handler is not None: + self._error_handler.cancel() + + self._task_handler = None + + if self._payload_parser is not None: + self._payload_parser.feed_eof() + self._payload_parser = None + + def set_parser(self, parser: Any) -> None: + # Actual type is WebReader + assert self._payload_parser is None + + self._payload_parser = parser + + if self._message_tail: + self._payload_parser.feed_data(self._message_tail) + self._message_tail = b'' + + def eof_received(self) -> None: + pass + + def data_received(self, data: bytes) -> None: + if self._force_close or self._close: + return + # parse http messages + if self._payload_parser is None and not self._upgrade: + assert self._request_parser is not None + try: + messages, upgraded, tail = self._request_parser.feed_data(data) + except HttpProcessingError as exc: + # something happened during parsing + self._error_handler = self._loop.create_task( + self.handle_parse_error( + StreamWriter(self, self._loop), + 400, exc, exc.message)) + self.close() + except Exception as exc: + # 500: internal error + self._error_handler = self._loop.create_task( + self.handle_parse_error( + StreamWriter(self, self._loop), + 500, exc)) + self.close() + else: + if messages: + # sometimes the parser returns no messages + for (msg, payload) in messages: + self._request_count += 1 + self._messages.append((msg, payload)) + + waiter = self._waiter + if waiter is not None: + if not waiter.done(): + # don't set result twice + waiter.set_result(None) + + self._upgrade = upgraded + if upgraded and tail: + self._message_tail = tail + + # no parser, just store + elif self._payload_parser is None and self._upgrade and data: + self._message_tail += data + + # feed payload + elif data: + eof, tail = self._payload_parser.feed_data(data) + if eof: + self.close() + + def keep_alive(self, val: bool) -> None: + """Set keep-alive connection mode. + + :param bool val: new state. + """ + self._keepalive = val + if self._keepalive_handle: + self._keepalive_handle.cancel() + self._keepalive_handle = None + + def close(self) -> None: + """Stop accepting new pipelinig messages and close + connection when handlers done processing messages""" + self._close = True + if self._waiter: + self._waiter.cancel() + + def force_close(self) -> None: + """Force close connection""" + self._force_close = True + if self._waiter: + self._waiter.cancel() + if self.transport is not None: + self.transport.close() + self.transport = None + + def log_access(self, + request: BaseRequest, + response: StreamResponse, + time: float) -> None: + if self.access_logger is not None: + self.access_logger.log(request, response, time) + + def log_debug(self, *args: Any, **kw: Any) -> None: + if self.debug: + self.logger.debug(*args, **kw) + + def log_exception(self, *args: Any, **kw: Any) -> None: + self.logger.exception(*args, **kw) + + def _process_keepalive(self) -> None: + if self._force_close or not self._keepalive: + return + + next = self._keepalive_time + self._keepalive_timeout + + # handler in idle state + if self._waiter: + if self._loop.time() > next: + self.force_close() + return + + # not all request handlers are done, + # reschedule itself to next second + self._keepalive_handle = self._loop.call_later( + self.KEEPALIVE_RESCHEDULE_DELAY, self._process_keepalive) + + async def start(self) -> None: + """Process incoming request. + + It reads request line, request headers and request payload, then + calls handle_request() method. Subclass has to override + handle_request(). start() handles various exceptions in request + or response handling. Connection is being closed always unless + keep_alive(True) specified. + """ + loop = self._loop + handler = self._task_handler + assert handler is not None + manager = self._manager + assert manager is not None + keepalive_timeout = self._keepalive_timeout + resp = None + assert self._request_factory is not None + assert self._request_handler is not None + + while not self._force_close: + if not self._messages: + try: + # wait for next request + self._waiter = loop.create_future() + await self._waiter + except asyncio.CancelledError: + break + finally: + self._waiter = None + + message, payload = self._messages.popleft() + + if self.access_log: + now = loop.time() + + manager.requests_count += 1 + writer = StreamWriter(self, loop) + request = self._request_factory( + message, payload, self, writer, handler) + try: + # a new task is used for copy context vars (#3406) + task = self._loop.create_task( + self._request_handler(request)) + try: + resp = await task + except HTTPException as exc: + resp = exc + except (asyncio.CancelledError, ConnectionError): + self.log_debug('Ignored premature client disconnection') + break + except asyncio.TimeoutError as exc: + self.log_debug('Request handler timed out.', exc_info=exc) + resp = self.handle_error(request, 504) + except Exception as exc: + resp = self.handle_error(request, 500, exc) + else: + # Deprecation warning (See #2415) + if getattr(resp, '__http_exception__', False): + warnings.warn( + "returning HTTPException object is deprecated " + "(#2415) and will be removed, " + "please raise the exception instead", + DeprecationWarning) + + # Drop the processed task from asyncio.Task.all_tasks() early + del task + + if self.debug: + if not isinstance(resp, StreamResponse): + if resp is None: + raise RuntimeError("Missing return " + "statement on request handler") + else: + raise RuntimeError("Web-handler should return " + "a response instance, " + "got {!r}".format(resp)) + try: + prepare_meth = resp.prepare + except AttributeError: + if resp is None: + raise RuntimeError("Missing return " + "statement on request handler") + else: + raise RuntimeError("Web-handler should return " + "a response instance, " + "got {!r}".format(resp)) + try: + await prepare_meth(request) + await resp.write_eof() + except ConnectionError: + self.log_debug('Ignored premature client disconnection 2') + break + + # notify server about keep-alive + self._keepalive = bool(resp.keep_alive) + + # log access + if self.access_log: + self.log_access(request, resp, loop.time() - now) + + # check payload + if not payload.is_eof(): + lingering_time = self._lingering_time + if not self._force_close and lingering_time: + self.log_debug( + 'Start lingering close timer for %s sec.', + lingering_time) + + now = loop.time() + end_t = now + lingering_time + + with suppress( + asyncio.TimeoutError, asyncio.CancelledError): + while not payload.is_eof() and now < end_t: + with CeilTimeout(end_t - now, loop=loop): + # read and ignore + await payload.readany() + now = loop.time() + + # if payload still uncompleted + if not payload.is_eof() and not self._force_close: + self.log_debug('Uncompleted request.') + self.close() + + payload.set_exception(PayloadAccessError()) + + except asyncio.CancelledError: + self.log_debug('Ignored premature client disconnection ') + break + except RuntimeError as exc: + if self.debug: + self.log_exception( + 'Unhandled runtime exception', exc_info=exc) + self.force_close() + except Exception as exc: + self.log_exception('Unhandled exception', exc_info=exc) + self.force_close() + finally: + if self.transport is None and resp is not None: + self.log_debug('Ignored premature client disconnection.') + elif not self._force_close: + if self._keepalive and not self._close: + # start keep-alive timer + if keepalive_timeout is not None: + now = self._loop.time() + self._keepalive_time = now + if self._keepalive_handle is None: + self._keepalive_handle = loop.call_at( + now + keepalive_timeout, + self._process_keepalive) + else: + break + + # remove handler, close transport if no handlers left + if not self._force_close: + self._task_handler = None + if self.transport is not None and self._error_handler is None: + self.transport.close() + + def handle_error(self, + request: BaseRequest, + status: int=500, + exc: Optional[BaseException]=None, + message: Optional[str]=None) -> StreamResponse: + """Handle errors. + + Returns HTTP response with specific status code. Logs additional + information. It always closes current connection.""" + self.log_exception("Error handling request", exc_info=exc) + + ct = 'text/plain' + if status == HTTPStatus.INTERNAL_SERVER_ERROR: + title = '{0.value} {0.phrase}'.format( + HTTPStatus.INTERNAL_SERVER_ERROR + ) + msg = HTTPStatus.INTERNAL_SERVER_ERROR.description + tb = None + if self.debug: + with suppress(Exception): + tb = traceback.format_exc() + + if 'text/html' in request.headers.get('Accept', ''): + if tb: + tb = html_escape(tb) + msg = '

    Traceback:

    \n
    {}
    '.format(tb) + message = ( + "" + "{title}" + "\n

    {title}

    " + "\n{msg}\n\n" + ).format(title=title, msg=msg) + ct = 'text/html' + else: + if tb: + msg = tb + message = title + '\n\n' + msg + + resp = Response(status=status, text=message, content_type=ct) + resp.force_close() + + # some data already got sent, connection is broken + if request.writer.output_size > 0 or self.transport is None: + self.force_close() + + return resp + + async def handle_parse_error(self, + writer: AbstractStreamWriter, + status: int, + exc: Optional[BaseException]=None, + message: Optional[str]=None) -> None: + request = BaseRequest( # type: ignore + ERROR, + EMPTY_PAYLOAD, + self, writer, + current_task(), + self._loop) + + resp = self.handle_error(request, status, exc, message) + await resp.prepare(request) + await resp.write_eof() + + if self.transport is not None: + self.transport.close() + + self._error_handler = None diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/web_request.py b/venv-linux/lib/python3.6/site-packages/aiohttp/web_request.py new file mode 100644 index 0000000..596ff4b --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/web_request.py @@ -0,0 +1,754 @@ +import asyncio +import datetime +import io +import re +import socket +import string +import tempfile +import types +import warnings +from email.utils import parsedate +from http.cookies import SimpleCookie +from types import MappingProxyType +from typing import ( # noqa + TYPE_CHECKING, + Any, + Dict, + Iterator, + Mapping, + MutableMapping, + Optional, + Tuple, + Union, + cast, +) +from urllib.parse import parse_qsl + +import attr +from multidict import CIMultiDict, CIMultiDictProxy, MultiDict, MultiDictProxy +from yarl import URL + +from . import hdrs +from .abc import AbstractStreamWriter +from .helpers import DEBUG, ChainMapProxy, HeadersMixin, reify, sentinel +from .http_parser import RawRequestMessage +from .multipart import BodyPartReader, MultipartReader +from .streams import EmptyStreamReader, StreamReader +from .typedefs import ( + DEFAULT_JSON_DECODER, + JSONDecoder, + LooseHeaders, + RawHeaders, + StrOrURL, +) +from .web_exceptions import HTTPRequestEntityTooLarge +from .web_response import StreamResponse + +__all__ = ('BaseRequest', 'FileField', 'Request') + + +if TYPE_CHECKING: # pragma: no cover + from .web_app import Application # noqa + from .web_urldispatcher import UrlMappingMatchInfo # noqa + from .web_protocol import RequestHandler # noqa + + +@attr.s(frozen=True, slots=True) +class FileField: + name = attr.ib(type=str) + filename = attr.ib(type=str) + file = attr.ib(type=io.BufferedReader) + content_type = attr.ib(type=str) + headers = attr.ib(type=CIMultiDictProxy) # type: CIMultiDictProxy[str] + + +_TCHAR = string.digits + string.ascii_letters + r"!#$%&'*+.^_`|~-" +# '-' at the end to prevent interpretation as range in a char class + +_TOKEN = r'[{tchar}]+'.format(tchar=_TCHAR) + +_QDTEXT = r'[{}]'.format( + r''.join(chr(c) for c in (0x09, 0x20, 0x21) + tuple(range(0x23, 0x7F)))) +# qdtext includes 0x5C to escape 0x5D ('\]') +# qdtext excludes obs-text (because obsoleted, and encoding not specified) + +_QUOTED_PAIR = r'\\[\t !-~]' + +_QUOTED_STRING = r'"(?:{quoted_pair}|{qdtext})*"'.format( + qdtext=_QDTEXT, quoted_pair=_QUOTED_PAIR) + +_FORWARDED_PAIR = ( + r'({token})=({token}|{quoted_string})(:\d{{1,4}})?'.format( + token=_TOKEN, + quoted_string=_QUOTED_STRING)) + +_QUOTED_PAIR_REPLACE_RE = re.compile(r'\\([\t !-~])') +# same pattern as _QUOTED_PAIR but contains a capture group + +_FORWARDED_PAIR_RE = re.compile(_FORWARDED_PAIR) + +############################################################ +# HTTP Request +############################################################ + + +class BaseRequest(MutableMapping[str, Any], HeadersMixin): + + POST_METHODS = {hdrs.METH_PATCH, hdrs.METH_POST, hdrs.METH_PUT, + hdrs.METH_TRACE, hdrs.METH_DELETE} + + ATTRS = HeadersMixin.ATTRS | frozenset([ + '_message', '_protocol', '_payload_writer', '_payload', '_headers', + '_method', '_version', '_rel_url', '_post', '_read_bytes', + '_state', '_cache', '_task', '_client_max_size', '_loop', + '_transport_sslcontext', '_transport_peername']) + + def __init__(self, message: RawRequestMessage, + payload: StreamReader, protocol: 'RequestHandler', + payload_writer: AbstractStreamWriter, + task: 'asyncio.Task[None]', + loop: asyncio.AbstractEventLoop, + *, client_max_size: int=1024**2, + state: Optional[Dict[str, Any]]=None, + scheme: Optional[str]=None, + host: Optional[str]=None, + remote: Optional[str]=None) -> None: + if state is None: + state = {} + self._message = message + self._protocol = protocol + self._payload_writer = payload_writer + + self._payload = payload + self._headers = message.headers + self._method = message.method + self._version = message.version + self._rel_url = message.url + self._post = None # type: Optional[MultiDictProxy[Union[str, bytes, FileField]]] # noqa + self._read_bytes = None # type: Optional[bytes] + + self._state = state + self._cache = {} # type: Dict[str, Any] + self._task = task + self._client_max_size = client_max_size + self._loop = loop + + transport = self._protocol.transport + assert transport is not None + self._transport_sslcontext = transport.get_extra_info('sslcontext') + self._transport_peername = transport.get_extra_info('peername') + + if scheme is not None: + self._cache['scheme'] = scheme + if host is not None: + self._cache['host'] = host + if remote is not None: + self._cache['remote'] = remote + + def clone(self, *, method: str=sentinel, rel_url: StrOrURL=sentinel, + headers: LooseHeaders=sentinel, scheme: str=sentinel, + host: str=sentinel, + remote: str=sentinel) -> 'BaseRequest': + """Clone itself with replacement some attributes. + + Creates and returns a new instance of Request object. If no parameters + are given, an exact copy is returned. If a parameter is not passed, it + will reuse the one from the current request object. + + """ + + if self._read_bytes: + raise RuntimeError("Cannot clone request " + "after reading its content") + + dct = {} # type: Dict[str, Any] + if method is not sentinel: + dct['method'] = method + if rel_url is not sentinel: + new_url = URL(rel_url) + dct['url'] = new_url + dct['path'] = str(new_url) + if headers is not sentinel: + # a copy semantic + dct['headers'] = CIMultiDictProxy(CIMultiDict(headers)) + dct['raw_headers'] = tuple((k.encode('utf-8'), v.encode('utf-8')) + for k, v in headers.items()) + + message = self._message._replace(**dct) + + kwargs = {} + if scheme is not sentinel: + kwargs['scheme'] = scheme + if host is not sentinel: + kwargs['host'] = host + if remote is not sentinel: + kwargs['remote'] = remote + + return self.__class__( + message, + self._payload, + self._protocol, + self._payload_writer, + self._task, + self._loop, + client_max_size=self._client_max_size, + state=self._state.copy(), + **kwargs) + + @property + def task(self) -> 'asyncio.Task[None]': + return self._task + + @property + def protocol(self) -> 'RequestHandler': + return self._protocol + + @property + def transport(self) -> Optional[asyncio.Transport]: + if self._protocol is None: + return None + return self._protocol.transport + + @property + def writer(self) -> AbstractStreamWriter: + return self._payload_writer + + @reify + def message(self) -> RawRequestMessage: + warnings.warn("Request.message is deprecated", + DeprecationWarning, + stacklevel=3) + return self._message + + @reify + def rel_url(self) -> URL: + return self._rel_url + + @reify + def loop(self) -> asyncio.AbstractEventLoop: + warnings.warn("request.loop property is deprecated", + DeprecationWarning, + stacklevel=2) + return self._loop + + # MutableMapping API + + def __getitem__(self, key: str) -> Any: + return self._state[key] + + def __setitem__(self, key: str, value: Any) -> None: + self._state[key] = value + + def __delitem__(self, key: str) -> None: + del self._state[key] + + def __len__(self) -> int: + return len(self._state) + + def __iter__(self) -> Iterator[str]: + return iter(self._state) + + ######## + + @reify + def secure(self) -> bool: + """A bool indicating if the request is handled with SSL.""" + return self.scheme == 'https' + + @reify + def forwarded(self) -> Tuple[Mapping[str, str], ...]: + """A tuple containing all parsed Forwarded header(s). + + Makes an effort to parse Forwarded headers as specified by RFC 7239: + + - It adds one (immutable) dictionary per Forwarded 'field-value', ie + per proxy. The element corresponds to the data in the Forwarded + field-value added by the first proxy encountered by the client. Each + subsequent item corresponds to those added by later proxies. + - It checks that every value has valid syntax in general as specified + in section 4: either a 'token' or a 'quoted-string'. + - It un-escapes found escape sequences. + - It does NOT validate 'by' and 'for' contents as specified in section + 6. + - It does NOT validate 'host' contents (Host ABNF). + - It does NOT validate 'proto' contents for valid URI scheme names. + + Returns a tuple containing one or more immutable dicts + """ + elems = [] + for field_value in self._message.headers.getall(hdrs.FORWARDED, ()): + length = len(field_value) + pos = 0 + need_separator = False + elem = {} # type: Dict[str, str] + elems.append(types.MappingProxyType(elem)) + while 0 <= pos < length: + match = _FORWARDED_PAIR_RE.match(field_value, pos) + if match is not None: # got a valid forwarded-pair + if need_separator: + # bad syntax here, skip to next comma + pos = field_value.find(',', pos) + else: + name, value, port = match.groups() + if value[0] == '"': + # quoted string: remove quotes and unescape + value = _QUOTED_PAIR_REPLACE_RE.sub(r'\1', + value[1:-1]) + if port: + value += port + elem[name.lower()] = value + pos += len(match.group(0)) + need_separator = True + elif field_value[pos] == ',': # next forwarded-element + need_separator = False + elem = {} + elems.append(types.MappingProxyType(elem)) + pos += 1 + elif field_value[pos] == ';': # next forwarded-pair + need_separator = False + pos += 1 + elif field_value[pos] in ' \t': + # Allow whitespace even between forwarded-pairs, though + # RFC 7239 doesn't. This simplifies code and is in line + # with Postel's law. + pos += 1 + else: + # bad syntax here, skip to next comma + pos = field_value.find(',', pos) + return tuple(elems) + + @reify + def scheme(self) -> str: + """A string representing the scheme of the request. + + Hostname is resolved in this order: + + - overridden value by .clone(scheme=new_scheme) call. + - type of connection to peer: HTTPS if socket is SSL, HTTP otherwise. + + 'http' or 'https'. + """ + if self._transport_sslcontext: + return 'https' + else: + return 'http' + + @reify + def method(self) -> str: + """Read only property for getting HTTP method. + + The value is upper-cased str like 'GET', 'POST', 'PUT' etc. + """ + return self._method + + @reify + def version(self) -> Tuple[int, int]: + """Read only property for getting HTTP version of request. + + Returns aiohttp.protocol.HttpVersion instance. + """ + return self._version + + @reify + def host(self) -> str: + """Hostname of the request. + + Hostname is resolved in this order: + + - overridden value by .clone(host=new_host) call. + - HOST HTTP header + - socket.getfqdn() value + """ + host = self._message.headers.get(hdrs.HOST) + if host is not None: + return host + else: + return socket.getfqdn() + + @reify + def remote(self) -> Optional[str]: + """Remote IP of client initiated HTTP request. + + The IP is resolved in this order: + + - overridden value by .clone(remote=new_remote) call. + - peername of opened socket + """ + if isinstance(self._transport_peername, (list, tuple)): + return self._transport_peername[0] + else: + return self._transport_peername + + @reify + def url(self) -> URL: + url = URL.build(scheme=self.scheme, host=self.host) + return url.join(self._rel_url) + + @reify + def path(self) -> str: + """The URL including *PATH INFO* without the host or scheme. + + E.g., ``/app/blog`` + """ + return self._rel_url.path + + @reify + def path_qs(self) -> str: + """The URL including PATH_INFO and the query string. + + E.g, /app/blog?id=10 + """ + return str(self._rel_url) + + @reify + def raw_path(self) -> str: + """ The URL including raw *PATH INFO* without the host or scheme. + Warning, the path is unquoted and may contains non valid URL characters + + E.g., ``/my%2Fpath%7Cwith%21some%25strange%24characters`` + """ + return self._message.path + + @reify + def query(self) -> 'MultiDictProxy[str]': + """A multidict with all the variables in the query string.""" + return self._rel_url.query + + @reify + def query_string(self) -> str: + """The query string in the URL. + + E.g., id=10 + """ + return self._rel_url.query_string + + @reify + def headers(self) -> 'CIMultiDictProxy[str]': + """A case-insensitive multidict proxy with all headers.""" + return self._headers + + @reify + def raw_headers(self) -> RawHeaders: + """A sequence of pairs for all headers.""" + return self._message.raw_headers + + @staticmethod + def _http_date(_date_str: str) -> Optional[datetime.datetime]: + """Process a date string, return a datetime object + """ + if _date_str is not None: + timetuple = parsedate(_date_str) + if timetuple is not None: + return datetime.datetime(*timetuple[:6], + tzinfo=datetime.timezone.utc) + return None + + @reify + def if_modified_since(self) -> Optional[datetime.datetime]: + """The value of If-Modified-Since HTTP header, or None. + + This header is represented as a `datetime` object. + """ + return self._http_date(self.headers.get(hdrs.IF_MODIFIED_SINCE)) + + @reify + def if_unmodified_since(self) -> Optional[datetime.datetime]: + """The value of If-Unmodified-Since HTTP header, or None. + + This header is represented as a `datetime` object. + """ + return self._http_date(self.headers.get(hdrs.IF_UNMODIFIED_SINCE)) + + @reify + def if_range(self) -> Optional[datetime.datetime]: + """The value of If-Range HTTP header, or None. + + This header is represented as a `datetime` object. + """ + return self._http_date(self.headers.get(hdrs.IF_RANGE)) + + @reify + def keep_alive(self) -> bool: + """Is keepalive enabled by client?""" + return not self._message.should_close + + @reify + def cookies(self) -> Mapping[str, str]: + """Return request cookies. + + A read-only dictionary-like object. + """ + raw = self.headers.get(hdrs.COOKIE, '') + parsed = SimpleCookie(raw) + return MappingProxyType( + {key: val.value for key, val in parsed.items()}) + + @reify + def http_range(self) -> slice: + """The content of Range HTTP header. + + Return a slice instance. + + """ + rng = self._headers.get(hdrs.RANGE) + start, end = None, None + if rng is not None: + try: + pattern = r'^bytes=(\d*)-(\d*)$' + start, end = re.findall(pattern, rng)[0] + except IndexError: # pattern was not found in header + raise ValueError("range not in acceptable format") + + end = int(end) if end else None + start = int(start) if start else None + + if start is None and end is not None: + # end with no start is to return tail of content + start = -end + end = None + + if start is not None and end is not None: + # end is inclusive in range header, exclusive for slice + end += 1 + + if start >= end: + raise ValueError('start cannot be after end') + + if start is end is None: # No valid range supplied + raise ValueError('No start or end of range specified') + + return slice(start, end, 1) + + @reify + def content(self) -> StreamReader: + """Return raw payload stream.""" + return self._payload + + @property + def has_body(self) -> bool: + """Return True if request's HTTP BODY can be read, False otherwise.""" + warnings.warn( + "Deprecated, use .can_read_body #2005", + DeprecationWarning, stacklevel=2) + return not self._payload.at_eof() + + @property + def can_read_body(self) -> bool: + """Return True if request's HTTP BODY can be read, False otherwise.""" + return not self._payload.at_eof() + + @reify + def body_exists(self) -> bool: + """Return True if request has HTTP BODY, False otherwise.""" + return type(self._payload) is not EmptyStreamReader + + async def release(self) -> None: + """Release request. + + Eat unread part of HTTP BODY if present. + """ + while not self._payload.at_eof(): + await self._payload.readany() + + async def read(self) -> bytes: + """Read request body if present. + + Returns bytes object with full request content. + """ + if self._read_bytes is None: + body = bytearray() + while True: + chunk = await self._payload.readany() + body.extend(chunk) + if self._client_max_size: + body_size = len(body) + if body_size >= self._client_max_size: + raise HTTPRequestEntityTooLarge( + max_size=self._client_max_size, + actual_size=body_size + ) + if not chunk: + break + self._read_bytes = bytes(body) + return self._read_bytes + + async def text(self) -> str: + """Return BODY as text using encoding from .charset.""" + bytes_body = await self.read() + encoding = self.charset or 'utf-8' + return bytes_body.decode(encoding) + + async def json(self, *, loads: JSONDecoder=DEFAULT_JSON_DECODER) -> Any: + """Return BODY as JSON.""" + body = await self.text() + return loads(body) + + async def multipart(self) -> MultipartReader: + """Return async iterator to process BODY as multipart.""" + return MultipartReader(self._headers, self._payload) + + async def post(self) -> 'MultiDictProxy[Union[str, bytes, FileField]]': + """Return POST parameters.""" + if self._post is not None: + return self._post + if self._method not in self.POST_METHODS: + self._post = MultiDictProxy(MultiDict()) + return self._post + + content_type = self.content_type + if (content_type not in ('', + 'application/x-www-form-urlencoded', + 'multipart/form-data')): + self._post = MultiDictProxy(MultiDict()) + return self._post + + out = MultiDict() # type: MultiDict[Union[str, bytes, FileField]] + + if content_type == 'multipart/form-data': + multipart = await self.multipart() + max_size = self._client_max_size + + field = await multipart.next() + while field is not None: + size = 0 + field_ct = field.headers.get(hdrs.CONTENT_TYPE) + + if isinstance(field, BodyPartReader): + if field.filename and field_ct: + # store file in temp file + tmp = tempfile.TemporaryFile() + chunk = await field.read_chunk(size=2**16) + while chunk: + chunk = field.decode(chunk) + tmp.write(chunk) + size += len(chunk) + if 0 < max_size < size: + raise HTTPRequestEntityTooLarge( + max_size=max_size, + actual_size=size + ) + chunk = await field.read_chunk(size=2**16) + tmp.seek(0) + + ff = FileField(field.name, field.filename, + cast(io.BufferedReader, tmp), + field_ct, field.headers) + out.add(field.name, ff) + else: + # deal with ordinary data + value = await field.read(decode=True) + if field_ct is None or \ + field_ct.startswith('text/'): + charset = field.get_charset(default='utf-8') + out.add(field.name, value.decode(charset)) + else: + out.add(field.name, value) + size += len(value) + if 0 < max_size < size: + raise HTTPRequestEntityTooLarge( + max_size=max_size, + actual_size=size + ) + else: + raise ValueError( + 'To decode nested multipart you need ' + 'to use custom reader', + ) + + field = await multipart.next() + else: + data = await self.read() + if data: + charset = self.charset or 'utf-8' + out.extend( + parse_qsl( + data.rstrip().decode(charset), + keep_blank_values=True, + encoding=charset)) + + self._post = MultiDictProxy(out) + return self._post + + def __repr__(self) -> str: + ascii_encodable_path = self.path.encode('ascii', 'backslashreplace') \ + .decode('ascii') + return "<{} {} {} >".format(self.__class__.__name__, + self._method, ascii_encodable_path) + + def __eq__(self, other: object) -> bool: + return id(self) == id(other) + + def __bool__(self) -> bool: + return True + + async def _prepare_hook(self, response: StreamResponse) -> None: + return + + +class Request(BaseRequest): + + ATTRS = BaseRequest.ATTRS | frozenset(['_match_info']) + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + # matchdict, route_name, handler + # or information about traversal lookup + + # initialized after route resolving + self._match_info = None # type: Optional[UrlMappingMatchInfo] + + if DEBUG: + def __setattr__(self, name: str, val: Any) -> None: + if name not in self.ATTRS: + warnings.warn("Setting custom {}.{} attribute " + "is discouraged".format(self.__class__.__name__, + name), + DeprecationWarning, + stacklevel=2) + super().__setattr__(name, val) + + def clone(self, *, method: str=sentinel, rel_url: + StrOrURL=sentinel, headers: LooseHeaders=sentinel, + scheme: str=sentinel, host: str=sentinel, remote: + str=sentinel) -> 'Request': + ret = super().clone(method=method, + rel_url=rel_url, + headers=headers, + scheme=scheme, + host=host, + remote=remote) + new_ret = cast(Request, ret) + new_ret._match_info = self._match_info + return new_ret + + @reify + def match_info(self) -> 'UrlMappingMatchInfo': + """Result of route resolving.""" + match_info = self._match_info + assert match_info is not None + return match_info + + @property + def app(self) -> 'Application': + """Application instance.""" + match_info = self._match_info + assert match_info is not None + return match_info.current_app + + @property + def config_dict(self) -> ChainMapProxy: + match_info = self._match_info + assert match_info is not None + lst = match_info.apps + app = self.app + idx = lst.index(app) + sublist = list(reversed(lst[:idx + 1])) + return ChainMapProxy(sublist) + + async def _prepare_hook(self, response: StreamResponse) -> None: + match_info = self._match_info + if match_info is None: + return + for app in match_info._apps: + await app.on_response_prepare.send(self, response) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/web_response.py b/venv-linux/lib/python3.6/site-packages/aiohttp/web_response.py new file mode 100644 index 0000000..fbe03cb --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/web_response.py @@ -0,0 +1,717 @@ +import asyncio # noqa +import collections.abc # noqa +import datetime +import enum +import json +import math +import time +import warnings +import zlib +from concurrent.futures import Executor +from email.utils import parsedate +from http.cookies import SimpleCookie +from typing import ( # noqa + TYPE_CHECKING, + Any, + Dict, + Iterator, + Mapping, + MutableMapping, + Optional, + Tuple, + Union, + cast, +) + +from multidict import CIMultiDict, istr + +from . import hdrs, payload +from .abc import AbstractStreamWriter +from .helpers import HeadersMixin, rfc822_formatted_time, sentinel +from .http import RESPONSES, SERVER_SOFTWARE, HttpVersion10, HttpVersion11 +from .payload import Payload +from .typedefs import JSONEncoder, LooseHeaders + +__all__ = ('ContentCoding', 'StreamResponse', 'Response', 'json_response') + + +if TYPE_CHECKING: # pragma: no cover + from .web_request import BaseRequest # noqa + BaseClass = MutableMapping[str, Any] +else: + BaseClass = collections.abc.MutableMapping + + +class ContentCoding(enum.Enum): + # The content codings that we have support for. + # + # Additional registered codings are listed at: + # https://www.iana.org/assignments/http-parameters/http-parameters.xhtml#content-coding + deflate = 'deflate' + gzip = 'gzip' + identity = 'identity' + + +############################################################ +# HTTP Response classes +############################################################ + + +class StreamResponse(BaseClass, HeadersMixin): + + _length_check = True + + def __init__(self, *, + status: int=200, + reason: Optional[str]=None, + headers: Optional[LooseHeaders]=None) -> None: + self._body = None + self._keep_alive = None # type: Optional[bool] + self._chunked = False + self._compression = False + self._compression_force = None # type: Optional[ContentCoding] + self._cookies = SimpleCookie() + + self._req = None # type: Optional[BaseRequest] + self._payload_writer = None # type: Optional[AbstractStreamWriter] + self._eof_sent = False + self._body_length = 0 + self._state = {} # type: Dict[str, Any] + + if headers is not None: + self._headers = CIMultiDict(headers) # type: CIMultiDict[str] + else: + self._headers = CIMultiDict() + + self.set_status(status, reason) + + @property + def prepared(self) -> bool: + return self._payload_writer is not None + + @property + def task(self) -> 'asyncio.Task[None]': + return getattr(self._req, 'task', None) + + @property + def status(self) -> int: + return self._status + + @property + def chunked(self) -> bool: + return self._chunked + + @property + def compression(self) -> bool: + return self._compression + + @property + def reason(self) -> str: + return self._reason + + def set_status(self, status: int, + reason: Optional[str]=None, + _RESPONSES: Mapping[int, + Tuple[str, str]]=RESPONSES) -> None: + assert not self.prepared, \ + 'Cannot change the response status code after ' \ + 'the headers have been sent' + self._status = int(status) + if reason is None: + try: + reason = _RESPONSES[self._status][0] + except Exception: + reason = '' + self._reason = reason + + @property + def keep_alive(self) -> Optional[bool]: + return self._keep_alive + + def force_close(self) -> None: + self._keep_alive = False + + @property + def body_length(self) -> int: + return self._body_length + + @property + def output_length(self) -> int: + warnings.warn('output_length is deprecated', DeprecationWarning) + assert self._payload_writer + return self._payload_writer.buffer_size + + def enable_chunked_encoding(self, chunk_size: Optional[int]=None) -> None: + """Enables automatic chunked transfer encoding.""" + self._chunked = True + + if hdrs.CONTENT_LENGTH in self._headers: + raise RuntimeError("You can't enable chunked encoding when " + "a content length is set") + if chunk_size is not None: + warnings.warn('Chunk size is deprecated #1615', DeprecationWarning) + + def enable_compression(self, + force: Optional[Union[bool, ContentCoding]]=None + ) -> None: + """Enables response compression encoding.""" + # Backwards compatibility for when force was a bool <0.17. + if type(force) == bool: + force = ContentCoding.deflate if force else ContentCoding.identity + warnings.warn("Using boolean for force is deprecated #3318", + DeprecationWarning) + elif force is not None: + assert isinstance(force, ContentCoding), ("force should one of " + "None, bool or " + "ContentEncoding") + + self._compression = True + self._compression_force = force + + @property + def headers(self) -> 'CIMultiDict[str]': + return self._headers + + @property + def cookies(self) -> SimpleCookie: + return self._cookies + + def set_cookie(self, name: str, value: str, *, + expires: Optional[str]=None, + domain: Optional[str]=None, + max_age: Optional[Union[int, str]]=None, + path: str='/', + secure: Optional[str]=None, + httponly: Optional[str]=None, + version: Optional[str]=None) -> None: + """Set or update response cookie. + + Sets new cookie or updates existent with new value. + Also updates only those params which are not None. + """ + + old = self._cookies.get(name) + if old is not None and old.coded_value == '': + # deleted cookie + self._cookies.pop(name, None) + + self._cookies[name] = value + c = self._cookies[name] + + if expires is not None: + c['expires'] = expires + elif c.get('expires') == 'Thu, 01 Jan 1970 00:00:00 GMT': + del c['expires'] + + if domain is not None: + c['domain'] = domain + + if max_age is not None: + c['max-age'] = str(max_age) + elif 'max-age' in c: + del c['max-age'] + + c['path'] = path + + if secure is not None: + c['secure'] = secure + if httponly is not None: + c['httponly'] = httponly + if version is not None: + c['version'] = version + + def del_cookie(self, name: str, *, + domain: Optional[str]=None, + path: str='/') -> None: + """Delete cookie. + + Creates new empty expired cookie. + """ + # TODO: do we need domain/path here? + self._cookies.pop(name, None) + self.set_cookie(name, '', max_age=0, + expires="Thu, 01 Jan 1970 00:00:00 GMT", + domain=domain, path=path) + + @property + def content_length(self) -> Optional[int]: + # Just a placeholder for adding setter + return super().content_length + + @content_length.setter + def content_length(self, value: Optional[int]) -> None: + if value is not None: + value = int(value) + if self._chunked: + raise RuntimeError("You can't set content length when " + "chunked encoding is enable") + self._headers[hdrs.CONTENT_LENGTH] = str(value) + else: + self._headers.pop(hdrs.CONTENT_LENGTH, None) + + @property + def content_type(self) -> str: + # Just a placeholder for adding setter + return super().content_type + + @content_type.setter + def content_type(self, value: str) -> None: + self.content_type # read header values if needed + self._content_type = str(value) + self._generate_content_type_header() + + @property + def charset(self) -> Optional[str]: + # Just a placeholder for adding setter + return super().charset + + @charset.setter + def charset(self, value: Optional[str]) -> None: + ctype = self.content_type # read header values if needed + if ctype == 'application/octet-stream': + raise RuntimeError("Setting charset for application/octet-stream " + "doesn't make sense, setup content_type first") + assert self._content_dict is not None + if value is None: + self._content_dict.pop('charset', None) + else: + self._content_dict['charset'] = str(value).lower() + self._generate_content_type_header() + + @property + def last_modified(self) -> Optional[datetime.datetime]: + """The value of Last-Modified HTTP header, or None. + + This header is represented as a `datetime` object. + """ + httpdate = self._headers.get(hdrs.LAST_MODIFIED) + if httpdate is not None: + timetuple = parsedate(httpdate) + if timetuple is not None: + return datetime.datetime(*timetuple[:6], + tzinfo=datetime.timezone.utc) + return None + + @last_modified.setter + def last_modified(self, + value: Optional[ + Union[int, float, datetime.datetime, str]]) -> None: + if value is None: + self._headers.pop(hdrs.LAST_MODIFIED, None) + elif isinstance(value, (int, float)): + self._headers[hdrs.LAST_MODIFIED] = time.strftime( + "%a, %d %b %Y %H:%M:%S GMT", time.gmtime(math.ceil(value))) + elif isinstance(value, datetime.datetime): + self._headers[hdrs.LAST_MODIFIED] = time.strftime( + "%a, %d %b %Y %H:%M:%S GMT", value.utctimetuple()) + elif isinstance(value, str): + self._headers[hdrs.LAST_MODIFIED] = value + + def _generate_content_type_header( + self, + CONTENT_TYPE: istr=hdrs.CONTENT_TYPE) -> None: + assert self._content_dict is not None + assert self._content_type is not None + params = '; '.join("{}={}".format(k, v) + for k, v in self._content_dict.items()) + if params: + ctype = self._content_type + '; ' + params + else: + ctype = self._content_type + self._headers[CONTENT_TYPE] = ctype + + async def _do_start_compression(self, coding: ContentCoding) -> None: + if coding != ContentCoding.identity: + assert self._payload_writer is not None + self._headers[hdrs.CONTENT_ENCODING] = coding.value + self._payload_writer.enable_compression(coding.value) + # Compressed payload may have different content length, + # remove the header + self._headers.popall(hdrs.CONTENT_LENGTH, None) + + async def _start_compression(self, request: 'BaseRequest') -> None: + if self._compression_force: + await self._do_start_compression(self._compression_force) + else: + accept_encoding = request.headers.get( + hdrs.ACCEPT_ENCODING, '').lower() + for coding in ContentCoding: + if coding.value in accept_encoding: + await self._do_start_compression(coding) + return + + async def prepare( + self, + request: 'BaseRequest' + ) -> Optional[AbstractStreamWriter]: + if self._eof_sent: + return None + if self._payload_writer is not None: + return self._payload_writer + + await request._prepare_hook(self) + return await self._start(request) + + async def _start(self, request: 'BaseRequest') -> AbstractStreamWriter: + self._req = request + + keep_alive = self._keep_alive + if keep_alive is None: + keep_alive = request.keep_alive + self._keep_alive = keep_alive + + version = request.version + writer = self._payload_writer = request._payload_writer + + headers = self._headers + for cookie in self._cookies.values(): + value = cookie.output(header='')[1:] + headers.add(hdrs.SET_COOKIE, value) + + if self._compression: + await self._start_compression(request) + + if self._chunked: + if version != HttpVersion11: + raise RuntimeError( + "Using chunked encoding is forbidden " + "for HTTP/{0.major}.{0.minor}".format(request.version)) + writer.enable_chunking() + headers[hdrs.TRANSFER_ENCODING] = 'chunked' + if hdrs.CONTENT_LENGTH in headers: + del headers[hdrs.CONTENT_LENGTH] + elif self._length_check: + writer.length = self.content_length + if writer.length is None: + if version >= HttpVersion11: + writer.enable_chunking() + headers[hdrs.TRANSFER_ENCODING] = 'chunked' + if hdrs.CONTENT_LENGTH in headers: + del headers[hdrs.CONTENT_LENGTH] + else: + keep_alive = False + + headers.setdefault(hdrs.CONTENT_TYPE, 'application/octet-stream') + headers.setdefault(hdrs.DATE, rfc822_formatted_time()) + headers.setdefault(hdrs.SERVER, SERVER_SOFTWARE) + + # connection header + if hdrs.CONNECTION not in headers: + if keep_alive: + if version == HttpVersion10: + headers[hdrs.CONNECTION] = 'keep-alive' + else: + if version == HttpVersion11: + headers[hdrs.CONNECTION] = 'close' + + # status line + status_line = 'HTTP/{}.{} {} {}'.format( + version[0], version[1], self._status, self._reason) + await writer.write_headers(status_line, headers) + + return writer + + async def write(self, data: bytes) -> None: + assert isinstance(data, (bytes, bytearray, memoryview)), \ + "data argument must be byte-ish (%r)" % type(data) + + if self._eof_sent: + raise RuntimeError("Cannot call write() after write_eof()") + if self._payload_writer is None: + raise RuntimeError("Cannot call write() before prepare()") + + await self._payload_writer.write(data) + + async def drain(self) -> None: + assert not self._eof_sent, "EOF has already been sent" + assert self._payload_writer is not None, \ + "Response has not been started" + warnings.warn("drain method is deprecated, use await resp.write()", + DeprecationWarning, + stacklevel=2) + await self._payload_writer.drain() + + async def write_eof(self, data: bytes=b'') -> None: + assert isinstance(data, (bytes, bytearray, memoryview)), \ + "data argument must be byte-ish (%r)" % type(data) + + if self._eof_sent: + return + + assert self._payload_writer is not None, \ + "Response has not been started" + + await self._payload_writer.write_eof(data) + self._eof_sent = True + self._req = None + self._body_length = self._payload_writer.output_size + self._payload_writer = None + + def __repr__(self) -> str: + if self._eof_sent: + info = "eof" + elif self.prepared: + assert self._req is not None + info = "{} {} ".format(self._req.method, self._req.path) + else: + info = "not prepared" + return "<{} {} {}>".format(self.__class__.__name__, + self.reason, info) + + def __getitem__(self, key: str) -> Any: + return self._state[key] + + def __setitem__(self, key: str, value: Any) -> None: + self._state[key] = value + + def __delitem__(self, key: str) -> None: + del self._state[key] + + def __len__(self) -> int: + return len(self._state) + + def __iter__(self) -> Iterator[str]: + return iter(self._state) + + def __hash__(self) -> int: + return hash(id(self)) + + def __eq__(self, other: object) -> bool: + return self is other + + +class Response(StreamResponse): + + def __init__(self, *, + body: Any=None, + status: int=200, + reason: Optional[str]=None, + text: Optional[str]=None, + headers: Optional[LooseHeaders]=None, + content_type: Optional[str]=None, + charset: Optional[str]=None, + zlib_executor_size: Optional[int]=None, + zlib_executor: Executor=None) -> None: + if body is not None and text is not None: + raise ValueError("body and text are not allowed together") + + if headers is None: + real_headers = CIMultiDict() # type: CIMultiDict[str] + elif not isinstance(headers, CIMultiDict): + real_headers = CIMultiDict(headers) + else: + real_headers = headers # = cast('CIMultiDict[str]', headers) + + if content_type is not None and "charset" in content_type: + raise ValueError("charset must not be in content_type " + "argument") + + if text is not None: + if hdrs.CONTENT_TYPE in real_headers: + if content_type or charset: + raise ValueError("passing both Content-Type header and " + "content_type or charset params " + "is forbidden") + else: + # fast path for filling headers + if not isinstance(text, str): + raise TypeError("text argument must be str (%r)" % + type(text)) + if content_type is None: + content_type = 'text/plain' + if charset is None: + charset = 'utf-8' + real_headers[hdrs.CONTENT_TYPE] = ( + content_type + '; charset=' + charset) + body = text.encode(charset) + text = None + else: + if hdrs.CONTENT_TYPE in real_headers: + if content_type is not None or charset is not None: + raise ValueError("passing both Content-Type header and " + "content_type or charset params " + "is forbidden") + else: + if content_type is not None: + if charset is not None: + content_type += '; charset=' + charset + real_headers[hdrs.CONTENT_TYPE] = content_type + + super().__init__(status=status, reason=reason, headers=real_headers) + + if text is not None: + self.text = text + else: + self.body = body + + self._compressed_body = None # type: Optional[bytes] + self._zlib_executor_size = zlib_executor_size + self._zlib_executor = zlib_executor + + @property + def body(self) -> Optional[Union[bytes, Payload]]: + return self._body + + @body.setter + def body(self, body: bytes, + CONTENT_TYPE: istr=hdrs.CONTENT_TYPE, + CONTENT_LENGTH: istr=hdrs.CONTENT_LENGTH) -> None: + if body is None: + self._body = None # type: Optional[bytes] + self._body_payload = False # type: bool + elif isinstance(body, (bytes, bytearray)): + self._body = body + self._body_payload = False + else: + try: + self._body = body = payload.PAYLOAD_REGISTRY.get(body) + except payload.LookupError: + raise ValueError('Unsupported body type %r' % type(body)) + + self._body_payload = True + + headers = self._headers + + # set content-length header if needed + if not self._chunked and CONTENT_LENGTH not in headers: + size = body.size + if size is not None: + headers[CONTENT_LENGTH] = str(size) + + # set content-type + if CONTENT_TYPE not in headers: + headers[CONTENT_TYPE] = body.content_type + + # copy payload headers + if body.headers: + for (key, value) in body.headers.items(): + if key not in headers: + headers[key] = value + + self._compressed_body = None + + @property + def text(self) -> Optional[str]: + if self._body is None: + return None + return self._body.decode(self.charset or 'utf-8') + + @text.setter + def text(self, text: str) -> None: + assert text is None or isinstance(text, str), \ + "text argument must be str (%r)" % type(text) + + if self.content_type == 'application/octet-stream': + self.content_type = 'text/plain' + if self.charset is None: + self.charset = 'utf-8' + + self._body = text.encode(self.charset) + self._body_payload = False + self._compressed_body = None + + @property + def content_length(self) -> Optional[int]: + if self._chunked: + return None + + if hdrs.CONTENT_LENGTH in self._headers: + return super().content_length + + if self._compressed_body is not None: + # Return length of the compressed body + return len(self._compressed_body) + elif self._body_payload: + # A payload without content length, or a compressed payload + return None + elif self._body is not None: + return len(self._body) + else: + return 0 + + @content_length.setter + def content_length(self, value: Optional[int]) -> None: + raise RuntimeError("Content length is set automatically") + + async def write_eof(self, data: bytes=b'') -> None: + if self._eof_sent: + return + if self._compressed_body is None: + body = self._body # type: Optional[Union[bytes, Payload]] + else: + body = self._compressed_body + assert not data, "data arg is not supported, got {!r}".format(data) + assert self._req is not None + assert self._payload_writer is not None + if body is not None: + if (self._req._method == hdrs.METH_HEAD or + self._status in [204, 304]): + await super().write_eof() + elif self._body_payload: + payload = cast(Payload, body) + await payload.write(self._payload_writer) + await super().write_eof() + else: + await super().write_eof(cast(bytes, body)) + else: + await super().write_eof() + + async def _start(self, request: 'BaseRequest') -> AbstractStreamWriter: + if not self._chunked and hdrs.CONTENT_LENGTH not in self._headers: + if not self._body_payload: + if self._body is not None: + self._headers[hdrs.CONTENT_LENGTH] = str(len(self._body)) + else: + self._headers[hdrs.CONTENT_LENGTH] = '0' + + return await super()._start(request) + + def _compress_body(self, zlib_mode: int) -> None: + compressobj = zlib.compressobj(wbits=zlib_mode) + body_in = self._body + assert body_in is not None + self._compressed_body = \ + compressobj.compress(body_in) + compressobj.flush() + + async def _do_start_compression(self, coding: ContentCoding) -> None: + if self._body_payload or self._chunked: + return await super()._do_start_compression(coding) + + if coding != ContentCoding.identity: + # Instead of using _payload_writer.enable_compression, + # compress the whole body + zlib_mode = (16 + zlib.MAX_WBITS + if coding == ContentCoding.gzip else -zlib.MAX_WBITS) + body_in = self._body + assert body_in is not None + if self._zlib_executor_size is not None and \ + len(body_in) > self._zlib_executor_size: + await asyncio.get_event_loop().run_in_executor( + self._zlib_executor, self._compress_body, zlib_mode) + else: + self._compress_body(zlib_mode) + + body_out = self._compressed_body + assert body_out is not None + + self._headers[hdrs.CONTENT_ENCODING] = coding.value + self._headers[hdrs.CONTENT_LENGTH] = str(len(body_out)) + + +def json_response(data: Any=sentinel, *, + text: str=None, + body: bytes=None, + status: int=200, + reason: Optional[str]=None, + headers: LooseHeaders=None, + content_type: str='application/json', + dumps: JSONEncoder=json.dumps) -> Response: + if data is not sentinel: + if text or body: + raise ValueError( + "only one of data, text, or body should be specified" + ) + else: + text = dumps(data) + return Response(text=text, body=body, status=status, reason=reason, + headers=headers, content_type=content_type) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/web_routedef.py b/venv-linux/lib/python3.6/site-packages/aiohttp/web_routedef.py new file mode 100644 index 0000000..91b5ef0 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/web_routedef.py @@ -0,0 +1,194 @@ +import abc +import os # noqa +from typing import ( + TYPE_CHECKING, + Any, + Awaitable, + Callable, + Dict, + Iterator, + List, + Optional, + Sequence, + Type, + Union, + overload, +) + +import attr + +from . import hdrs +from .abc import AbstractView +from .typedefs import PathLike + +if TYPE_CHECKING: # pragma: no cover + from .web_urldispatcher import UrlDispatcher + from .web_request import Request + from .web_response import StreamResponse +else: + Request = StreamResponse = UrlDispatcher = None + + +__all__ = ('AbstractRouteDef', 'RouteDef', 'StaticDef', 'RouteTableDef', + 'head', 'options', 'get', 'post', 'patch', 'put', 'delete', + 'route', 'view', 'static') + + +class AbstractRouteDef(abc.ABC): + @abc.abstractmethod + def register(self, router: UrlDispatcher) -> None: + pass # pragma: no cover + + +_SimpleHandler = Callable[[Request], Awaitable[StreamResponse]] +_HandlerType = Union[Type[AbstractView], _SimpleHandler] + + +@attr.s(frozen=True, repr=False, slots=True) +class RouteDef(AbstractRouteDef): + method = attr.ib(type=str) + path = attr.ib(type=str) + handler = attr.ib() # type: _HandlerType + kwargs = attr.ib(type=Dict[str, Any]) + + def __repr__(self) -> str: + info = [] + for name, value in sorted(self.kwargs.items()): + info.append(", {}={!r}".format(name, value)) + return (" {handler.__name__!r}" + "{info}>".format(method=self.method, path=self.path, + handler=self.handler, info=''.join(info))) + + def register(self, router: UrlDispatcher) -> None: + if self.method in hdrs.METH_ALL: + reg = getattr(router, 'add_'+self.method.lower()) + reg(self.path, self.handler, **self.kwargs) + else: + router.add_route(self.method, self.path, self.handler, + **self.kwargs) + + +@attr.s(frozen=True, repr=False, slots=True) +class StaticDef(AbstractRouteDef): + prefix = attr.ib(type=str) + path = attr.ib() # type: PathLike + kwargs = attr.ib(type=Dict[str, Any]) + + def __repr__(self) -> str: + info = [] + for name, value in sorted(self.kwargs.items()): + info.append(", {}={!r}".format(name, value)) + return (" {path}" + "{info}>".format(prefix=self.prefix, path=self.path, + info=''.join(info))) + + def register(self, router: UrlDispatcher) -> None: + router.add_static(self.prefix, self.path, **self.kwargs) + + +def route(method: str, path: str, handler: _HandlerType, + **kwargs: Any) -> RouteDef: + return RouteDef(method, path, handler, kwargs) + + +def head(path: str, handler: _HandlerType, **kwargs: Any) -> RouteDef: + return route(hdrs.METH_HEAD, path, handler, **kwargs) + + +def options(path: str, handler: _HandlerType, **kwargs: Any) -> RouteDef: + return route(hdrs.METH_OPTIONS, path, handler, **kwargs) + + +def get(path: str, handler: _HandlerType, *, name: Optional[str]=None, + allow_head: bool=True, **kwargs: Any) -> RouteDef: + return route(hdrs.METH_GET, path, handler, name=name, + allow_head=allow_head, **kwargs) + + +def post(path: str, handler: _HandlerType, **kwargs: Any) -> RouteDef: + return route(hdrs.METH_POST, path, handler, **kwargs) + + +def put(path: str, handler: _HandlerType, **kwargs: Any) -> RouteDef: + return route(hdrs.METH_PUT, path, handler, **kwargs) + + +def patch(path: str, handler: _HandlerType, **kwargs: Any) -> RouteDef: + return route(hdrs.METH_PATCH, path, handler, **kwargs) + + +def delete(path: str, handler: _HandlerType, **kwargs: Any) -> RouteDef: + return route(hdrs.METH_DELETE, path, handler, **kwargs) + + +def view(path: str, handler: Type[AbstractView], **kwargs: Any) -> RouteDef: + return route(hdrs.METH_ANY, path, handler, **kwargs) + + +def static(prefix: str, path: PathLike, + **kwargs: Any) -> StaticDef: + return StaticDef(prefix, path, kwargs) + + +_Deco = Callable[[_HandlerType], _HandlerType] + + +class RouteTableDef(Sequence[AbstractRouteDef]): + """Route definition table""" + def __init__(self) -> None: + self._items = [] # type: List[AbstractRouteDef] + + def __repr__(self) -> str: + return "".format(len(self._items)) + + @overload + def __getitem__(self, index: int) -> AbstractRouteDef: ... # noqa + + @overload # noqa + def __getitem__(self, index: slice) -> List[AbstractRouteDef]: ... # noqa + + def __getitem__(self, index): # type: ignore # noqa + return self._items[index] + + def __iter__(self) -> Iterator[AbstractRouteDef]: + return iter(self._items) + + def __len__(self) -> int: + return len(self._items) + + def __contains__(self, item: object) -> bool: + return item in self._items + + def route(self, + method: str, + path: str, + **kwargs: Any) -> _Deco: + def inner(handler: _HandlerType) -> _HandlerType: + self._items.append(RouteDef(method, path, handler, kwargs)) + return handler + return inner + + def head(self, path: str, **kwargs: Any) -> _Deco: + return self.route(hdrs.METH_HEAD, path, **kwargs) + + def get(self, path: str, **kwargs: Any) -> _Deco: + return self.route(hdrs.METH_GET, path, **kwargs) + + def post(self, path: str, **kwargs: Any) -> _Deco: + return self.route(hdrs.METH_POST, path, **kwargs) + + def put(self, path: str, **kwargs: Any) -> _Deco: + return self.route(hdrs.METH_PUT, path, **kwargs) + + def patch(self, path: str, **kwargs: Any) -> _Deco: + return self.route(hdrs.METH_PATCH, path, **kwargs) + + def delete(self, path: str, **kwargs: Any) -> _Deco: + return self.route(hdrs.METH_DELETE, path, **kwargs) + + def view(self, path: str, **kwargs: Any) -> _Deco: + return self.route(hdrs.METH_ANY, path, **kwargs) + + def static(self, prefix: str, path: PathLike, + **kwargs: Any) -> None: + self._items.append(StaticDef(prefix, path, kwargs)) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/web_runner.py b/venv-linux/lib/python3.6/site-packages/aiohttp/web_runner.py new file mode 100644 index 0000000..e9bd2c4 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/web_runner.py @@ -0,0 +1,337 @@ +import asyncio +import signal +import socket +from abc import ABC, abstractmethod +from typing import Any, List, Optional, Set + +from yarl import URL + +from .web_app import Application +from .web_server import Server + +try: + from ssl import SSLContext +except ImportError: + SSLContext = object # type: ignore + + +__all__ = ('BaseSite', 'TCPSite', 'UnixSite', 'NamedPipeSite', 'SockSite', + 'BaseRunner', 'AppRunner', 'ServerRunner', 'GracefulExit') + + +class GracefulExit(SystemExit): + code = 1 + + +def _raise_graceful_exit() -> None: + raise GracefulExit() + + +class BaseSite(ABC): + __slots__ = ('_runner', '_shutdown_timeout', '_ssl_context', '_backlog', + '_server') + + def __init__(self, runner: 'BaseRunner', *, + shutdown_timeout: float=60.0, + ssl_context: Optional[SSLContext]=None, + backlog: int=128) -> None: + if runner.server is None: + raise RuntimeError("Call runner.setup() before making a site") + self._runner = runner + self._shutdown_timeout = shutdown_timeout + self._ssl_context = ssl_context + self._backlog = backlog + self._server = None # type: Optional[asyncio.AbstractServer] + + @property + @abstractmethod + def name(self) -> str: + pass # pragma: no cover + + @abstractmethod + async def start(self) -> None: + self._runner._reg_site(self) + + async def stop(self) -> None: + self._runner._check_site(self) + if self._server is None: + self._runner._unreg_site(self) + return # not started yet + self._server.close() + # named pipes do not have wait_closed property + if hasattr(self._server, 'wait_closed'): + await self._server.wait_closed() + await self._runner.shutdown() + assert self._runner.server + await self._runner.server.shutdown(self._shutdown_timeout) + self._runner._unreg_site(self) + + +class TCPSite(BaseSite): + __slots__ = ('_host', '_port', '_reuse_address', '_reuse_port') + + def __init__(self, runner: 'BaseRunner', + host: str=None, port: int=None, *, + shutdown_timeout: float=60.0, + ssl_context: Optional[SSLContext]=None, + backlog: int=128, reuse_address: Optional[bool]=None, + reuse_port: Optional[bool]=None) -> None: + super().__init__(runner, shutdown_timeout=shutdown_timeout, + ssl_context=ssl_context, backlog=backlog) + if host is None: + host = "0.0.0.0" + self._host = host + if port is None: + port = 8443 if self._ssl_context else 8080 + self._port = port + self._reuse_address = reuse_address + self._reuse_port = reuse_port + + @property + def name(self) -> str: + scheme = 'https' if self._ssl_context else 'http' + return str(URL.build(scheme=scheme, host=self._host, port=self._port)) + + async def start(self) -> None: + await super().start() + loop = asyncio.get_event_loop() + server = self._runner.server + assert server is not None + self._server = await loop.create_server( # type: ignore + server, self._host, self._port, + ssl=self._ssl_context, backlog=self._backlog, + reuse_address=self._reuse_address, + reuse_port=self._reuse_port) + + +class UnixSite(BaseSite): + __slots__ = ('_path', ) + + def __init__(self, runner: 'BaseRunner', path: str, *, + shutdown_timeout: float=60.0, + ssl_context: Optional[SSLContext]=None, + backlog: int=128) -> None: + super().__init__(runner, shutdown_timeout=shutdown_timeout, + ssl_context=ssl_context, backlog=backlog) + self._path = path + + @property + def name(self) -> str: + scheme = 'https' if self._ssl_context else 'http' + return '{}://unix:{}:'.format(scheme, self._path) + + async def start(self) -> None: + await super().start() + loop = asyncio.get_event_loop() + server = self._runner.server + assert server is not None + self._server = await loop.create_unix_server( + server, self._path, + ssl=self._ssl_context, backlog=self._backlog) + + +class NamedPipeSite(BaseSite): + __slots__ = ('_path', ) + + def __init__(self, runner: 'BaseRunner', path: str, *, + shutdown_timeout: float=60.0) -> None: + loop = asyncio.get_event_loop() + if not isinstance(loop, asyncio.ProactorEventLoop): # type: ignore + raise RuntimeError("Named Pipes only available in proactor" + "loop under windows") + super().__init__(runner, shutdown_timeout=shutdown_timeout) + self._path = path + + @property + def name(self) -> str: + return self._path + + async def start(self) -> None: + await super().start() + loop = asyncio.get_event_loop() + server = self._runner.server + assert server is not None + _server = await loop.start_serving_pipe( # type: ignore + server, self._path + ) + self._server = _server[0] + + +class SockSite(BaseSite): + __slots__ = ('_sock', '_name') + + def __init__(self, runner: 'BaseRunner', sock: socket.socket, *, + shutdown_timeout: float=60.0, + ssl_context: Optional[SSLContext]=None, + backlog: int=128) -> None: + super().__init__(runner, shutdown_timeout=shutdown_timeout, + ssl_context=ssl_context, backlog=backlog) + self._sock = sock + scheme = 'https' if self._ssl_context else 'http' + if hasattr(socket, 'AF_UNIX') and sock.family == socket.AF_UNIX: + name = '{}://unix:{}:'.format(scheme, sock.getsockname()) + else: + host, port = sock.getsockname()[:2] + name = str(URL.build(scheme=scheme, host=host, port=port)) + self._name = name + + @property + def name(self) -> str: + return self._name + + async def start(self) -> None: + await super().start() + loop = asyncio.get_event_loop() + server = self._runner.server + assert server is not None + self._server = await loop.create_server( # type: ignore + server, sock=self._sock, + ssl=self._ssl_context, backlog=self._backlog) + + +class BaseRunner(ABC): + __slots__ = ('_handle_signals', '_kwargs', '_server', '_sites') + + def __init__(self, *, handle_signals: bool=False, **kwargs: Any) -> None: + self._handle_signals = handle_signals + self._kwargs = kwargs + self._server = None # type: Optional[Server] + self._sites = [] # type: List[BaseSite] + + @property + def server(self) -> Optional[Server]: + return self._server + + @property + def addresses(self) -> List[str]: + ret = [] # type: List[str] + for site in self._sites: + server = site._server + if server is not None: + sockets = server.sockets + if sockets is not None: + for sock in sockets: + ret.append(sock.getsockname()) + return ret + + @property + def sites(self) -> Set[BaseSite]: + return set(self._sites) + + async def setup(self) -> None: + loop = asyncio.get_event_loop() + + if self._handle_signals: + try: + loop.add_signal_handler(signal.SIGINT, _raise_graceful_exit) + loop.add_signal_handler(signal.SIGTERM, _raise_graceful_exit) + except NotImplementedError: # pragma: no cover + # add_signal_handler is not implemented on Windows + pass + + self._server = await self._make_server() + + @abstractmethod + async def shutdown(self) -> None: + pass # pragma: no cover + + async def cleanup(self) -> None: + loop = asyncio.get_event_loop() + + if self._server is None: + # no started yet, do nothing + return + + # The loop over sites is intentional, an exception on gather() + # leaves self._sites in unpredictable state. + # The loop guaranties that a site is either deleted on success or + # still present on failure + for site in list(self._sites): + await site.stop() + await self._cleanup_server() + self._server = None + if self._handle_signals: + try: + loop.remove_signal_handler(signal.SIGINT) + loop.remove_signal_handler(signal.SIGTERM) + except NotImplementedError: # pragma: no cover + # remove_signal_handler is not implemented on Windows + pass + + @abstractmethod + async def _make_server(self) -> Server: + pass # pragma: no cover + + @abstractmethod + async def _cleanup_server(self) -> None: + pass # pragma: no cover + + def _reg_site(self, site: BaseSite) -> None: + if site in self._sites: + raise RuntimeError("Site {} is already registered in runner {}" + .format(site, self)) + self._sites.append(site) + + def _check_site(self, site: BaseSite) -> None: + if site not in self._sites: + raise RuntimeError("Site {} is not registered in runner {}" + .format(site, self)) + + def _unreg_site(self, site: BaseSite) -> None: + if site not in self._sites: + raise RuntimeError("Site {} is not registered in runner {}" + .format(site, self)) + self._sites.remove(site) + + +class ServerRunner(BaseRunner): + """Low-level web server runner""" + + __slots__ = ('_web_server',) + + def __init__(self, web_server: Server, *, + handle_signals: bool=False, **kwargs: Any) -> None: + super().__init__(handle_signals=handle_signals, **kwargs) + self._web_server = web_server + + async def shutdown(self) -> None: + pass + + async def _make_server(self) -> Server: + return self._web_server + + async def _cleanup_server(self) -> None: + pass + + +class AppRunner(BaseRunner): + """Web Application runner""" + + __slots__ = ('_app',) + + def __init__(self, app: Application, *, + handle_signals: bool=False, **kwargs: Any) -> None: + super().__init__(handle_signals=handle_signals, **kwargs) + if not isinstance(app, Application): + raise TypeError("The first argument should be web.Application " + "instance, got {!r}".format(app)) + self._app = app + + @property + def app(self) -> Application: + return self._app + + async def shutdown(self) -> None: + await self._app.shutdown() + + async def _make_server(self) -> Server: + loop = asyncio.get_event_loop() + self._app._set_loop(loop) + self._app.on_startup.freeze() + await self._app.startup() + self._app.freeze() + + return self._app._make_handler(loop=loop, **self._kwargs) + + async def _cleanup_server(self) -> None: + await self._app.cleanup() diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/web_server.py b/venv-linux/lib/python3.6/site-packages/aiohttp/web_server.py new file mode 100644 index 0000000..ad746ed --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/web_server.py @@ -0,0 +1,57 @@ +"""Low level HTTP server.""" +import asyncio +from typing import Any, Awaitable, Callable, Dict, List, Optional # noqa + +from .abc import AbstractStreamWriter +from .helpers import get_running_loop +from .http_parser import RawRequestMessage +from .streams import StreamReader +from .web_protocol import RequestHandler, _RequestFactory, _RequestHandler +from .web_request import BaseRequest + +__all__ = ('Server',) + + +class Server: + + def __init__(self, + handler: _RequestHandler, + *, + request_factory: Optional[_RequestFactory]=None, + loop: Optional[asyncio.AbstractEventLoop]=None, + **kwargs: Any) -> None: + self._loop = get_running_loop(loop) + self._connections = {} # type: Dict[RequestHandler, asyncio.Transport] + self._kwargs = kwargs + self.requests_count = 0 + self.request_handler = handler + self.request_factory = request_factory or self._make_request + + @property + def connections(self) -> List[RequestHandler]: + return list(self._connections.keys()) + + def connection_made(self, handler: RequestHandler, + transport: asyncio.Transport) -> None: + self._connections[handler] = transport + + def connection_lost(self, handler: RequestHandler, + exc: Optional[BaseException]=None) -> None: + if handler in self._connections: + del self._connections[handler] + + def _make_request(self, message: RawRequestMessage, + payload: StreamReader, + protocol: RequestHandler, + writer: AbstractStreamWriter, + task: 'asyncio.Task[None]') -> BaseRequest: + return BaseRequest( + message, payload, protocol, writer, task, self._loop) + + async def shutdown(self, timeout: Optional[float]=None) -> None: + coros = [conn.shutdown(timeout) for conn in self._connections] + await asyncio.gather(*coros, loop=self._loop) + self._connections.clear() + + def __call__(self) -> RequestHandler: + return RequestHandler(self, loop=self._loop, **self._kwargs) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/web_urldispatcher.py b/venv-linux/lib/python3.6/site-packages/aiohttp/web_urldispatcher.py new file mode 100644 index 0000000..db3fb3a --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/web_urldispatcher.py @@ -0,0 +1,1135 @@ +import abc +import asyncio +import base64 +import hashlib +import inspect +import keyword +import os +import re +import warnings +from contextlib import contextmanager +from functools import wraps +from pathlib import Path +from types import MappingProxyType +from typing import ( # noqa + TYPE_CHECKING, + Any, + Awaitable, + Callable, + Container, + Dict, + Generator, + Iterable, + Iterator, + List, + Mapping, + Optional, + Set, + Sized, + Tuple, + Type, + Union, + cast, +) + +from yarl import URL + +from . import hdrs +from .abc import AbstractMatchInfo, AbstractRouter, AbstractView +from .helpers import DEBUG +from .http import HttpVersion11 +from .typedefs import PathLike +from .web_exceptions import ( + HTTPException, + HTTPExpectationFailed, + HTTPForbidden, + HTTPMethodNotAllowed, + HTTPNotFound, +) +from .web_fileresponse import FileResponse +from .web_request import Request +from .web_response import Response, StreamResponse +from .web_routedef import AbstractRouteDef + +__all__ = ('UrlDispatcher', 'UrlMappingMatchInfo', + 'AbstractResource', 'Resource', 'PlainResource', 'DynamicResource', + 'AbstractRoute', 'ResourceRoute', + 'StaticResource', 'View') + + +if TYPE_CHECKING: # pragma: no cover + from .web_app import Application # noqa + BaseDict = Dict[str, str] +else: + BaseDict = dict + +HTTP_METHOD_RE = re.compile(r"^[0-9A-Za-z!#\$%&'\*\+\-\.\^_`\|~]+$") +ROUTE_RE = re.compile(r'(\{[_a-zA-Z][^{}]*(?:\{[^{}]*\}[^{}]*)*\})') +PATH_SEP = re.escape('/') + + +_WebHandler = Callable[[Request], Awaitable[StreamResponse]] +_ExpectHandler = Callable[[Request], Awaitable[None]] +_Resolve = Tuple[Optional[AbstractMatchInfo], Set[str]] + + +class AbstractResource(Sized, Iterable['AbstractRoute']): + + def __init__(self, *, name: Optional[str]=None) -> None: + self._name = name + + @property + def name(self) -> Optional[str]: + return self._name + + @property + @abc.abstractmethod + def canonical(self) -> str: + """Exposes the resource's canonical path. + + For example '/foo/bar/{name}' + + """ + + @abc.abstractmethod # pragma: no branch + def url_for(self, **kwargs: str) -> URL: + """Construct url for resource with additional params.""" + + @abc.abstractmethod # pragma: no branch + async def resolve(self, request: Request) -> _Resolve: + """Resolve resource + + Return (UrlMappingMatchInfo, allowed_methods) pair.""" + + @abc.abstractmethod + def add_prefix(self, prefix: str) -> None: + """Add a prefix to processed URLs. + + Required for subapplications support. + + """ + + @abc.abstractmethod + def get_info(self) -> Dict[str, Any]: + """Return a dict with additional info useful for introspection""" + + def freeze(self) -> None: + pass + + @abc.abstractmethod + def raw_match(self, path: str) -> bool: + """Perform a raw match against path""" + + +class AbstractRoute(abc.ABC): + + def __init__(self, method: str, + handler: Union[_WebHandler, Type[AbstractView]], *, + expect_handler: _ExpectHandler=None, + resource: AbstractResource=None) -> None: + + if expect_handler is None: + expect_handler = _default_expect_handler + + assert asyncio.iscoroutinefunction(expect_handler), \ + 'Coroutine is expected, got {!r}'.format(expect_handler) + + method = method.upper() + if not HTTP_METHOD_RE.match(method): + raise ValueError("{} is not allowed HTTP method".format(method)) + + assert callable(handler), handler + if asyncio.iscoroutinefunction(handler): + pass + elif inspect.isgeneratorfunction(handler): + warnings.warn("Bare generators are deprecated, " + "use @coroutine wrapper", DeprecationWarning) + elif (isinstance(handler, type) and + issubclass(handler, AbstractView)): + pass + else: + warnings.warn("Bare functions are deprecated, " + "use async ones", DeprecationWarning) + + @wraps(handler) + async def handler_wrapper(request: Request) -> StreamResponse: + result = old_handler(request) + if asyncio.iscoroutine(result): + return await result + return result # type: ignore + old_handler = handler + handler = handler_wrapper + + self._method = method + self._handler = handler + self._expect_handler = expect_handler + self._resource = resource + + @property + def method(self) -> str: + return self._method + + @property + def handler(self) -> _WebHandler: + return self._handler + + @property + @abc.abstractmethod + def name(self) -> Optional[str]: + """Optional route's name, always equals to resource's name.""" + + @property + def resource(self) -> Optional[AbstractResource]: + return self._resource + + @abc.abstractmethod + def get_info(self) -> Dict[str, Any]: + """Return a dict with additional info useful for introspection""" + + @abc.abstractmethod # pragma: no branch + def url_for(self, *args: str, **kwargs: str) -> URL: + """Construct url for route with additional params.""" + + async def handle_expect_header(self, request: Request) -> None: + await self._expect_handler(request) + + +class UrlMappingMatchInfo(BaseDict, AbstractMatchInfo): + + def __init__(self, match_dict: Dict[str, str], route: AbstractRoute): + super().__init__(match_dict) + self._route = route + self._apps = [] # type: List[Application] + self._current_app = None # type: Optional[Application] + self._frozen = False + + @property + def handler(self) -> _WebHandler: + return self._route.handler + + @property + def route(self) -> AbstractRoute: + return self._route + + @property + def expect_handler(self) -> _ExpectHandler: + return self._route.handle_expect_header + + @property + def http_exception(self) -> Optional[HTTPException]: + return None + + def get_info(self) -> Dict[str, str]: + return self._route.get_info() + + @property + def apps(self) -> Tuple['Application', ...]: + return tuple(self._apps) + + def add_app(self, app: 'Application') -> None: + if self._frozen: + raise RuntimeError("Cannot change apps stack after .freeze() call") + if self._current_app is None: + self._current_app = app + self._apps.insert(0, app) + + @property + def current_app(self) -> 'Application': + app = self._current_app + assert app is not None + return app + + @contextmanager + def set_current_app(self, + app: 'Application') -> Generator[None, None, None]: + if DEBUG: # pragma: no cover + if app not in self._apps: + raise RuntimeError( + "Expected one of the following apps {!r}, got {!r}" + .format(self._apps, app)) + prev = self._current_app + self._current_app = app + try: + yield + finally: + self._current_app = prev + + def freeze(self) -> None: + self._frozen = True + + def __repr__(self) -> str: + return "".format(super().__repr__(), self._route) + + +class MatchInfoError(UrlMappingMatchInfo): + + def __init__(self, http_exception: HTTPException) -> None: + self._exception = http_exception + super().__init__({}, SystemRoute(self._exception)) + + @property + def http_exception(self) -> HTTPException: + return self._exception + + def __repr__(self) -> str: + return "".format(self._exception.status, + self._exception.reason) + + +async def _default_expect_handler(request: Request) -> None: + """Default handler for Expect header. + + Just send "100 Continue" to client. + raise HTTPExpectationFailed if value of header is not "100-continue" + """ + expect = request.headers.get(hdrs.EXPECT) + if request.version == HttpVersion11: + if expect.lower() == "100-continue": + await request.writer.write(b"HTTP/1.1 100 Continue\r\n\r\n") + else: + raise HTTPExpectationFailed(text="Unknown Expect: %s" % expect) + + +class Resource(AbstractResource): + + def __init__(self, *, name: Optional[str]=None) -> None: + super().__init__(name=name) + self._routes = [] # type: List[ResourceRoute] + + def add_route(self, method: str, + handler: Union[Type[AbstractView], _WebHandler], *, + expect_handler: Optional[_ExpectHandler]=None + ) -> 'ResourceRoute': + + for route_obj in self._routes: + if route_obj.method == method or route_obj.method == hdrs.METH_ANY: + raise RuntimeError("Added route will never be executed, " + "method {route.method} is already " + "registered".format(route=route_obj)) + + route_obj = ResourceRoute(method, handler, self, + expect_handler=expect_handler) + self.register_route(route_obj) + return route_obj + + def register_route(self, route: 'ResourceRoute') -> None: + assert isinstance(route, ResourceRoute), \ + 'Instance of Route class is required, got {!r}'.format(route) + self._routes.append(route) + + async def resolve(self, request: Request) -> _Resolve: + allowed_methods = set() # type: Set[str] + + match_dict = self._match(request.rel_url.raw_path) + if match_dict is None: + return None, allowed_methods + + for route_obj in self._routes: + route_method = route_obj.method + allowed_methods.add(route_method) + + if (route_method == request.method or + route_method == hdrs.METH_ANY): + return (UrlMappingMatchInfo(match_dict, route_obj), + allowed_methods) + else: + return None, allowed_methods + + @abc.abstractmethod + def _match(self, path: str) -> Optional[Dict[str, str]]: + pass # pragma: no cover + + def __len__(self) -> int: + return len(self._routes) + + def __iter__(self) -> Iterator[AbstractRoute]: + return iter(self._routes) + + # TODO: implement all abstract methods + + +class PlainResource(Resource): + + def __init__(self, path: str, *, name: Optional[str]=None) -> None: + super().__init__(name=name) + assert not path or path.startswith('/') + self._path = path + + @property + def canonical(self) -> str: + return self._path + + def freeze(self) -> None: + if not self._path: + self._path = '/' + + def add_prefix(self, prefix: str) -> None: + assert prefix.startswith('/') + assert not prefix.endswith('/') + assert len(prefix) > 1 + self._path = prefix + self._path + + def _match(self, path: str) -> Optional[Dict[str, str]]: + # string comparison is about 10 times faster than regexp matching + if self._path == path: + return {} + else: + return None + + def raw_match(self, path: str) -> bool: + return self._path == path + + def get_info(self) -> Dict[str, Any]: + return {'path': self._path} + + def url_for(self) -> URL: # type: ignore + return URL.build(path=self._path, encoded=True) + + def __repr__(self) -> str: + name = "'" + self.name + "' " if self.name is not None else "" + return "".format(name=name, + path=self._path) + + +class DynamicResource(Resource): + + DYN = re.compile(r'\{(?P[_a-zA-Z][_a-zA-Z0-9]*)\}') + DYN_WITH_RE = re.compile( + r'\{(?P[_a-zA-Z][_a-zA-Z0-9]*):(?P.+)\}') + GOOD = r'[^{}/]+' + + def __init__(self, path: str, *, name: Optional[str]=None) -> None: + super().__init__(name=name) + pattern = '' + formatter = '' + for part in ROUTE_RE.split(path): + match = self.DYN.fullmatch(part) + if match: + pattern += '(?P<{}>{})'.format(match.group('var'), self.GOOD) + formatter += '{' + match.group('var') + '}' + continue + + match = self.DYN_WITH_RE.fullmatch(part) + if match: + pattern += '(?P<{var}>{re})'.format(**match.groupdict()) + formatter += '{' + match.group('var') + '}' + continue + + if '{' in part or '}' in part: + raise ValueError("Invalid path '{}'['{}']".format(path, part)) + + path = URL.build(path=part).raw_path + formatter += path + pattern += re.escape(path) + + try: + compiled = re.compile(pattern) + except re.error as exc: + raise ValueError( + "Bad pattern '{}': {}".format(pattern, exc)) from None + assert compiled.pattern.startswith(PATH_SEP) + assert formatter.startswith('/') + self._pattern = compiled + self._formatter = formatter + + @property + def canonical(self) -> str: + return self._formatter + + def add_prefix(self, prefix: str) -> None: + assert prefix.startswith('/') + assert not prefix.endswith('/') + assert len(prefix) > 1 + self._pattern = re.compile(re.escape(prefix)+self._pattern.pattern) + self._formatter = prefix + self._formatter + + def _match(self, path: str) -> Optional[Dict[str, str]]: + match = self._pattern.fullmatch(path) + if match is None: + return None + else: + return {key: URL.build(path=value, encoded=True).path + for key, value in match.groupdict().items()} + + def raw_match(self, path: str) -> bool: + return self._formatter == path + + def get_info(self) -> Dict[str, Any]: + return {'formatter': self._formatter, + 'pattern': self._pattern} + + def url_for(self, **parts: str) -> URL: + url = self._formatter.format_map({k: URL.build(path=v).raw_path + for k, v in parts.items()}) + return URL.build(path=url) + + def __repr__(self) -> str: + name = "'" + self.name + "' " if self.name is not None else "" + return ("" + .format(name=name, formatter=self._formatter)) + + +class PrefixResource(AbstractResource): + + def __init__(self, prefix: str, *, name: Optional[str]=None) -> None: + assert not prefix or prefix.startswith('/'), prefix + assert prefix in ('', '/') or not prefix.endswith('/'), prefix + super().__init__(name=name) + self._prefix = URL.build(path=prefix).raw_path + + @property + def canonical(self) -> str: + return self._prefix + + def add_prefix(self, prefix: str) -> None: + assert prefix.startswith('/') + assert not prefix.endswith('/') + assert len(prefix) > 1 + self._prefix = prefix + self._prefix + + def raw_match(self, prefix: str) -> bool: + return False + + # TODO: impl missing abstract methods + + +class StaticResource(PrefixResource): + VERSION_KEY = 'v' + + def __init__(self, prefix: str, directory: PathLike, + *, name: Optional[str]=None, + expect_handler: Optional[_ExpectHandler]=None, + chunk_size: int=256 * 1024, + show_index: bool=False, follow_symlinks: bool=False, + append_version: bool=False) -> None: + super().__init__(prefix, name=name) + try: + directory = Path(directory) + if str(directory).startswith('~'): + directory = Path(os.path.expanduser(str(directory))) + directory = directory.resolve() + if not directory.is_dir(): + raise ValueError('Not a directory') + except (FileNotFoundError, ValueError) as error: + raise ValueError( + "No directory exists at '{}'".format(directory)) from error + self._directory = directory + self._show_index = show_index + self._chunk_size = chunk_size + self._follow_symlinks = follow_symlinks + self._expect_handler = expect_handler + self._append_version = append_version + + self._routes = {'GET': ResourceRoute('GET', self._handle, self, + expect_handler=expect_handler), + + 'HEAD': ResourceRoute('HEAD', self._handle, self, + expect_handler=expect_handler)} + + def url_for(self, *, filename: Union[str, Path], # type: ignore + append_version: Optional[bool]=None) -> URL: + if append_version is None: + append_version = self._append_version + if isinstance(filename, Path): + filename = str(filename) + while filename.startswith('/'): + filename = filename[1:] + filename = '/' + filename + + # filename is not encoded + url = URL.build(path=self._prefix + filename) + + if append_version: + try: + if filename.startswith('/'): + filename = filename[1:] + filepath = self._directory.joinpath(filename).resolve() + if not self._follow_symlinks: + filepath.relative_to(self._directory) + except (ValueError, FileNotFoundError): + # ValueError for case when path point to symlink + # with follow_symlinks is False + return url # relatively safe + if filepath.is_file(): + # TODO cache file content + # with file watcher for cache invalidation + with open(str(filepath), mode='rb') as f: + file_bytes = f.read() + h = self._get_file_hash(file_bytes) + url = url.with_query({self.VERSION_KEY: h}) + return url + return url + + @staticmethod + def _get_file_hash(byte_array: bytes) -> str: + m = hashlib.sha256() # todo sha256 can be configurable param + m.update(byte_array) + b64 = base64.urlsafe_b64encode(m.digest()) + return b64.decode('ascii') + + def get_info(self) -> Dict[str, Any]: + return {'directory': self._directory, + 'prefix': self._prefix} + + def set_options_route(self, handler: _WebHandler) -> None: + if 'OPTIONS' in self._routes: + raise RuntimeError('OPTIONS route was set already') + self._routes['OPTIONS'] = ResourceRoute( + 'OPTIONS', handler, self, + expect_handler=self._expect_handler) + + async def resolve(self, request: Request) -> _Resolve: + path = request.rel_url.raw_path + method = request.method + allowed_methods = set(self._routes) + if not path.startswith(self._prefix): + return None, set() + + if method not in allowed_methods: + return None, allowed_methods + + match_dict = {'filename': URL.build(path=path[len(self._prefix)+1:], + encoded=True).path} + return (UrlMappingMatchInfo(match_dict, self._routes[method]), + allowed_methods) + + def __len__(self) -> int: + return len(self._routes) + + def __iter__(self) -> Iterator[AbstractRoute]: + return iter(self._routes.values()) + + async def _handle(self, request: Request) -> StreamResponse: + rel_url = request.match_info['filename'] + try: + filename = Path(rel_url) + if filename.anchor: + # rel_url is an absolute name like + # /static/\\machine_name\c$ or /static/D:\path + # where the static dir is totally different + raise HTTPForbidden() + filepath = self._directory.joinpath(filename).resolve() + if not self._follow_symlinks: + filepath.relative_to(self._directory) + except (ValueError, FileNotFoundError) as error: + # relatively safe + raise HTTPNotFound() from error + except HTTPForbidden: + raise + except Exception as error: + # perm error or other kind! + request.app.logger.exception(error) + raise HTTPNotFound() from error + + # on opening a dir, load its contents if allowed + if filepath.is_dir(): + if self._show_index: + try: + return Response(text=self._directory_as_html(filepath), + content_type="text/html") + except PermissionError: + raise HTTPForbidden() + else: + raise HTTPForbidden() + elif filepath.is_file(): + return FileResponse(filepath, chunk_size=self._chunk_size) + else: + raise HTTPNotFound + + def _directory_as_html(self, filepath: Path) -> str: + # returns directory's index as html + + # sanity check + assert filepath.is_dir() + + relative_path_to_dir = filepath.relative_to(self._directory).as_posix() + index_of = "Index of /{}".format(relative_path_to_dir) + h1 = "

    {}

    ".format(index_of) + + index_list = [] + dir_index = filepath.iterdir() + for _file in sorted(dir_index): + # show file url as relative to static path + rel_path = _file.relative_to(self._directory).as_posix() + file_url = self._prefix + '/' + rel_path + + # if file is a directory, add '/' to the end of the name + if _file.is_dir(): + file_name = "{}/".format(_file.name) + else: + file_name = _file.name + + index_list.append( + '
    '.format(url=file_url, + name=file_name) + ) + ul = "
      \n{}\n
    ".format('\n'.join(index_list)) + body = "\n{}\n{}\n".format(h1, ul) + + head_str = "\n{}\n".format(index_of) + html = "\n{}\n{}\n".format(head_str, body) + + return html + + def __repr__(self) -> str: + name = "'" + self.name + "'" if self.name is not None else "" + return " {directory!r}>".format( + name=name, path=self._prefix, directory=self._directory) + + +class PrefixedSubAppResource(PrefixResource): + + def __init__(self, prefix: str, app: 'Application') -> None: + super().__init__(prefix) + self._app = app + for resource in app.router.resources(): + resource.add_prefix(prefix) + + def add_prefix(self, prefix: str) -> None: + super().add_prefix(prefix) + for resource in self._app.router.resources(): + resource.add_prefix(prefix) + + def url_for(self, *args: str, **kwargs: str) -> URL: + raise RuntimeError(".url_for() is not supported " + "by sub-application root") + + def get_info(self) -> Dict[str, Any]: + return {'app': self._app, + 'prefix': self._prefix} + + async def resolve(self, request: Request) -> _Resolve: + if not request.url.raw_path.startswith(self._prefix + '/') and \ + request.url.raw_path != self._prefix: + return None, set() + match_info = await self._app.router.resolve(request) + match_info.add_app(self._app) + if isinstance(match_info.http_exception, HTTPMethodNotAllowed): + methods = match_info.http_exception.allowed_methods + else: + methods = set() + return match_info, methods + + def __len__(self) -> int: + return len(self._app.router.routes()) + + def __iter__(self) -> Iterator[AbstractRoute]: + return iter(self._app.router.routes()) + + def __repr__(self) -> str: + return " {app!r}>".format( + prefix=self._prefix, app=self._app) + + +class AbstractRuleMatching(abc.ABC): + @abc.abstractmethod # pragma: no branch + async def match(self, request: Request) -> bool: + """Return bool if the request satisfies the criteria""" + + @abc.abstractmethod # pragma: no branch + def get_info(self) -> Dict[str, Any]: + """Return a dict with additional info useful for introspection""" + + @property + @abc.abstractmethod # pragma: no branch + def canonical(self) -> str: + """Return a str""" + + +class Domain(AbstractRuleMatching): + re_part = re.compile(r"(?!-)[a-z\d-]{1,63}(? None: + super().__init__() + self._domain = self.validation(domain) + + @property + def canonical(self) -> str: + return self._domain + + def validation(self, domain: str) -> str: + if not isinstance(domain, str): + raise TypeError("Domain must be str") + domain = domain.rstrip('.').lower() + if not domain: + raise ValueError("Domain cannot be empty") + elif '://' in domain: + raise ValueError("Scheme not supported") + url = URL('http://' + domain) + if not all( + self.re_part.fullmatch(x) + for x in url.raw_host.split(".")): # type: ignore + raise ValueError("Domain not valid") + if url.port == 80: + return url.raw_host # type: ignore + return '{}:{}'.format(url.raw_host, url.port) + + async def match(self, request: Request) -> bool: + host = request.headers.get(hdrs.HOST) + return host and self.match_domain(host) + + def match_domain(self, host: str) -> bool: + return host.lower() == self._domain + + def get_info(self) -> Dict[str, Any]: + return {'domain': self._domain} + + +class MaskDomain(Domain): + re_part = re.compile(r"(?!-)[a-z\d\*-]{1,63}(? None: + super().__init__(domain) + mask = self._domain.replace('.', r'\.').replace('*', '.*') + self._mask = re.compile(mask) + + @property + def canonical(self) -> str: + return self._mask.pattern + + def match_domain(self, host: str) -> bool: + return self._mask.fullmatch(host) is not None + + +class MatchedSubAppResource(PrefixedSubAppResource): + + def __init__(self, rule: AbstractRuleMatching, app: 'Application') -> None: + AbstractResource.__init__(self) + self._prefix = '' + self._app = app + self._rule = rule + + @property + def canonical(self) -> str: + return self._rule.canonical + + def get_info(self) -> Dict[str, Any]: + return {'app': self._app, + 'rule': self._rule} + + async def resolve(self, request: Request) -> _Resolve: + if not await self._rule.match(request): + return None, set() + match_info = await self._app.router.resolve(request) + match_info.add_app(self._app) + if isinstance(match_info.http_exception, HTTPMethodNotAllowed): + methods = match_info.http_exception.allowed_methods + else: + methods = set() + return match_info, methods + + def __repr__(self) -> str: + return " {app!r}>" \ + "".format(app=self._app) + + +class ResourceRoute(AbstractRoute): + """A route with resource""" + + def __init__(self, method: str, + handler: Union[_WebHandler, Type[AbstractView]], + resource: AbstractResource, *, + expect_handler: Optional[_ExpectHandler]=None) -> None: + super().__init__(method, handler, expect_handler=expect_handler, + resource=resource) + + def __repr__(self) -> str: + return " {handler!r}".format( + method=self.method, resource=self._resource, + handler=self.handler) + + @property + def name(self) -> Optional[str]: + return self._resource.name # type: ignore + + def url_for(self, *args: str, **kwargs: str) -> URL: + """Construct url for route with additional params.""" + return self._resource.url_for(*args, **kwargs) # type: ignore + + def get_info(self) -> Dict[str, Any]: + return self._resource.get_info() # type: ignore + + +class SystemRoute(AbstractRoute): + + def __init__(self, http_exception: HTTPException) -> None: + super().__init__(hdrs.METH_ANY, self._handle) + self._http_exception = http_exception + + def url_for(self, *args: str, **kwargs: str) -> URL: + raise RuntimeError(".url_for() is not allowed for SystemRoute") + + @property + def name(self) -> Optional[str]: + return None + + def get_info(self) -> Dict[str, Any]: + return {'http_exception': self._http_exception} + + async def _handle(self, request: Request) -> StreamResponse: + raise self._http_exception + + @property + def status(self) -> int: + return self._http_exception.status + + @property + def reason(self) -> str: + return self._http_exception.reason + + def __repr__(self) -> str: + return "".format(self=self) + + +class View(AbstractView): + + async def _iter(self) -> StreamResponse: + if self.request.method not in hdrs.METH_ALL: + self._raise_allowed_methods() + method = getattr(self, self.request.method.lower(), None) + if method is None: + self._raise_allowed_methods() + resp = await method() + return resp + + def __await__(self) -> Generator[Any, None, StreamResponse]: + return self._iter().__await__() + + def _raise_allowed_methods(self) -> None: + allowed_methods = { + m for m in hdrs.METH_ALL if hasattr(self, m.lower())} + raise HTTPMethodNotAllowed(self.request.method, allowed_methods) + + +class ResourcesView(Sized, + Iterable[AbstractResource], + Container[AbstractResource]): + + def __init__(self, resources: List[AbstractResource]) -> None: + self._resources = resources + + def __len__(self) -> int: + return len(self._resources) + + def __iter__(self) -> Iterator[AbstractResource]: + yield from self._resources + + def __contains__(self, resource: object) -> bool: + return resource in self._resources + + +class RoutesView(Sized, Iterable[AbstractRoute], Container[AbstractRoute]): + + def __init__(self, resources: List[AbstractResource]): + self._routes = [] # type: List[AbstractRoute] + for resource in resources: + for route in resource: + self._routes.append(route) + + def __len__(self) -> int: + return len(self._routes) + + def __iter__(self) -> Iterator[AbstractRoute]: + yield from self._routes + + def __contains__(self, route: object) -> bool: + return route in self._routes + + +class UrlDispatcher(AbstractRouter, Mapping[str, AbstractResource]): + + NAME_SPLIT_RE = re.compile(r'[.:-]') + + def __init__(self) -> None: + super().__init__() + self._resources = [] # type: List[AbstractResource] + self._named_resources = {} # type: Dict[str, AbstractResource] + + async def resolve(self, request: Request) -> AbstractMatchInfo: + method = request.method + allowed_methods = set() # type: Set[str] + + for resource in self._resources: + match_dict, allowed = await resource.resolve(request) + if match_dict is not None: + return match_dict + else: + allowed_methods |= allowed + else: + if allowed_methods: + return MatchInfoError(HTTPMethodNotAllowed(method, + allowed_methods)) + else: + return MatchInfoError(HTTPNotFound()) + + def __iter__(self) -> Iterator[str]: + return iter(self._named_resources) + + def __len__(self) -> int: + return len(self._named_resources) + + def __contains__(self, resource: object) -> bool: + return resource in self._named_resources + + def __getitem__(self, name: str) -> AbstractResource: + return self._named_resources[name] + + def resources(self) -> ResourcesView: + return ResourcesView(self._resources) + + def routes(self) -> RoutesView: + return RoutesView(self._resources) + + def named_resources(self) -> Mapping[str, AbstractResource]: + return MappingProxyType(self._named_resources) + + def register_resource(self, resource: AbstractResource) -> None: + assert isinstance(resource, AbstractResource), \ + 'Instance of AbstractResource class is required, got {!r}'.format( + resource) + if self.frozen: + raise RuntimeError( + "Cannot register a resource into frozen router.") + + name = resource.name + + if name is not None: + parts = self.NAME_SPLIT_RE.split(name) + for part in parts: + if not part.isidentifier() or keyword.iskeyword(part): + raise ValueError('Incorrect route name {!r}, ' + 'the name should be a sequence of ' + 'python identifiers separated ' + 'by dash, dot or column'.format(name)) + if name in self._named_resources: + raise ValueError('Duplicate {!r}, ' + 'already handled by {!r}' + .format(name, self._named_resources[name])) + self._named_resources[name] = resource + self._resources.append(resource) + + def add_resource(self, path: str, *, + name: Optional[str]=None) -> Resource: + if path and not path.startswith('/'): + raise ValueError("path should be started with / or be empty") + # Reuse last added resource if path and name are the same + if self._resources: + resource = self._resources[-1] + if resource.name == name and resource.raw_match(path): + return cast(Resource, resource) + if not ('{' in path or '}' in path or ROUTE_RE.search(path)): + url = URL.build(path=path) + resource = PlainResource(url.raw_path, name=name) + self.register_resource(resource) + return resource + resource = DynamicResource(path, name=name) + self.register_resource(resource) + return resource + + def add_route(self, method: str, path: str, + handler: Union[_WebHandler, Type[AbstractView]], + *, name: Optional[str]=None, + expect_handler: Optional[_ExpectHandler]=None + ) -> AbstractRoute: + resource = self.add_resource(path, name=name) + return resource.add_route(method, handler, + expect_handler=expect_handler) + + def add_static(self, prefix: str, path: PathLike, *, + name: Optional[str]=None, + expect_handler: Optional[_ExpectHandler]=None, + chunk_size: int=256 * 1024, + show_index: bool=False, follow_symlinks: bool=False, + append_version: bool=False) -> AbstractResource: + """Add static files view. + + prefix - url prefix + path - folder with files + + """ + assert prefix.startswith('/') + if prefix.endswith('/'): + prefix = prefix[:-1] + resource = StaticResource(prefix, path, + name=name, + expect_handler=expect_handler, + chunk_size=chunk_size, + show_index=show_index, + follow_symlinks=follow_symlinks, + append_version=append_version) + self.register_resource(resource) + return resource + + def add_head(self, path: str, handler: _WebHandler, + **kwargs: Any) -> AbstractRoute: + """ + Shortcut for add_route with method HEAD + """ + return self.add_route(hdrs.METH_HEAD, path, handler, **kwargs) + + def add_options(self, path: str, handler: _WebHandler, + **kwargs: Any) -> AbstractRoute: + """ + Shortcut for add_route with method OPTIONS + """ + return self.add_route(hdrs.METH_OPTIONS, path, handler, **kwargs) + + def add_get(self, path: str, handler: _WebHandler, *, + name: Optional[str]=None, allow_head: bool=True, + **kwargs: Any) -> AbstractRoute: + """ + Shortcut for add_route with method GET, if allow_head is true another + route is added allowing head requests to the same endpoint + """ + resource = self.add_resource(path, name=name) + if allow_head: + resource.add_route(hdrs.METH_HEAD, handler, **kwargs) + return resource.add_route(hdrs.METH_GET, handler, **kwargs) + + def add_post(self, path: str, handler: _WebHandler, + **kwargs: Any) -> AbstractRoute: + """ + Shortcut for add_route with method POST + """ + return self.add_route(hdrs.METH_POST, path, handler, **kwargs) + + def add_put(self, path: str, handler: _WebHandler, + **kwargs: Any) -> AbstractRoute: + """ + Shortcut for add_route with method PUT + """ + return self.add_route(hdrs.METH_PUT, path, handler, **kwargs) + + def add_patch(self, path: str, handler: _WebHandler, + **kwargs: Any) -> AbstractRoute: + """ + Shortcut for add_route with method PATCH + """ + return self.add_route(hdrs.METH_PATCH, path, handler, **kwargs) + + def add_delete(self, path: str, handler: _WebHandler, + **kwargs: Any) -> AbstractRoute: + """ + Shortcut for add_route with method DELETE + """ + return self.add_route(hdrs.METH_DELETE, path, handler, **kwargs) + + def add_view(self, path: str, handler: Type[AbstractView], + **kwargs: Any) -> AbstractRoute: + """ + Shortcut for add_route with ANY methods for a class-based view + """ + return self.add_route(hdrs.METH_ANY, path, handler, **kwargs) + + def freeze(self) -> None: + super().freeze() + for resource in self._resources: + resource.freeze() + + def add_routes(self, routes: Iterable[AbstractRouteDef]) -> None: + """Append routes to route table. + + Parameter should be a sequence of RouteDef objects. + """ + for route_def in routes: + route_def.register(self) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/web_ws.py b/venv-linux/lib/python3.6/site-packages/aiohttp/web_ws.py new file mode 100644 index 0000000..4c5e7ca --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/web_ws.py @@ -0,0 +1,456 @@ +import asyncio +import base64 +import binascii +import hashlib +import json +from typing import Any, Iterable, Optional, Tuple + +import async_timeout +import attr +from multidict import CIMultiDict + +from . import hdrs +from .abc import AbstractStreamWriter +from .helpers import call_later, set_result +from .http import ( + WS_CLOSED_MESSAGE, + WS_CLOSING_MESSAGE, + WS_KEY, + WebSocketError, + WebSocketReader, + WebSocketWriter, + WSMessage, +) +from .http import WSMsgType as WSMsgType +from .http import ws_ext_gen, ws_ext_parse +from .log import ws_logger +from .streams import EofStream, FlowControlDataQueue +from .typedefs import JSONDecoder, JSONEncoder +from .web_exceptions import HTTPBadRequest, HTTPException +from .web_request import BaseRequest +from .web_response import StreamResponse + +__all__ = ('WebSocketResponse', 'WebSocketReady', 'WSMsgType',) + +THRESHOLD_CONNLOST_ACCESS = 5 + + +@attr.s(frozen=True, slots=True) +class WebSocketReady: + ok = attr.ib(type=bool) + protocol = attr.ib(type=Optional[str]) + + def __bool__(self) -> bool: + return self.ok + + +class WebSocketResponse(StreamResponse): + + _length_check = False + + def __init__(self, *, + timeout: float=10.0, receive_timeout: Optional[float]=None, + autoclose: bool=True, autoping: bool=True, + heartbeat: Optional[float]=None, + protocols: Iterable[str]=(), + compress: bool=True, max_msg_size: int=4*1024*1024) -> None: + super().__init__(status=101) + self._protocols = protocols + self._ws_protocol = None # type: Optional[str] + self._writer = None # type: Optional[WebSocketWriter] + self._reader = None # type: Optional[FlowControlDataQueue[WSMessage]] + self._closed = False + self._closing = False + self._conn_lost = 0 + self._close_code = None # type: Optional[int] + self._loop = None # type: Optional[asyncio.AbstractEventLoop] + self._waiting = None # type: Optional[asyncio.Future[bool]] + self._exception = None # type: Optional[BaseException] + self._timeout = timeout + self._receive_timeout = receive_timeout + self._autoclose = autoclose + self._autoping = autoping + self._heartbeat = heartbeat + self._heartbeat_cb = None + if heartbeat is not None: + self._pong_heartbeat = heartbeat / 2.0 + self._pong_response_cb = None + self._compress = compress + self._max_msg_size = max_msg_size + + def _cancel_heartbeat(self) -> None: + if self._pong_response_cb is not None: + self._pong_response_cb.cancel() + self._pong_response_cb = None + + if self._heartbeat_cb is not None: + self._heartbeat_cb.cancel() + self._heartbeat_cb = None + + def _reset_heartbeat(self) -> None: + self._cancel_heartbeat() + + if self._heartbeat is not None: + self._heartbeat_cb = call_later( + self._send_heartbeat, self._heartbeat, self._loop) + + def _send_heartbeat(self) -> None: + if self._heartbeat is not None and not self._closed: + # fire-and-forget a task is not perfect but maybe ok for + # sending ping. Otherwise we need a long-living heartbeat + # task in the class. + self._loop.create_task(self._writer.ping()) # type: ignore + + if self._pong_response_cb is not None: + self._pong_response_cb.cancel() + self._pong_response_cb = call_later( + self._pong_not_received, self._pong_heartbeat, self._loop) + + def _pong_not_received(self) -> None: + if self._req is not None and self._req.transport is not None: + self._closed = True + self._close_code = 1006 + self._exception = asyncio.TimeoutError() + self._req.transport.close() + + async def prepare(self, request: BaseRequest) -> AbstractStreamWriter: + # make pre-check to don't hide it by do_handshake() exceptions + if self._payload_writer is not None: + return self._payload_writer + + protocol, writer = self._pre_start(request) + payload_writer = await super().prepare(request) + assert payload_writer is not None + self._post_start(request, protocol, writer) + await payload_writer.drain() + return payload_writer + + def _handshake(self, request: BaseRequest) -> Tuple['CIMultiDict[str]', + str, + bool, + bool]: + headers = request.headers + if 'websocket' != headers.get(hdrs.UPGRADE, '').lower().strip(): + raise HTTPBadRequest( + text=('No WebSocket UPGRADE hdr: {}\n Can ' + '"Upgrade" only to "WebSocket".') + .format(headers.get(hdrs.UPGRADE))) + + if 'upgrade' not in headers.get(hdrs.CONNECTION, '').lower(): + raise HTTPBadRequest( + text='No CONNECTION upgrade hdr: {}'.format( + headers.get(hdrs.CONNECTION))) + + # find common sub-protocol between client and server + protocol = None + if hdrs.SEC_WEBSOCKET_PROTOCOL in headers: + req_protocols = [str(proto.strip()) for proto in + headers[hdrs.SEC_WEBSOCKET_PROTOCOL].split(',')] + + for proto in req_protocols: + if proto in self._protocols: + protocol = proto + break + else: + # No overlap found: Return no protocol as per spec + ws_logger.warning( + 'Client protocols %r don’t overlap server-known ones %r', + req_protocols, self._protocols) + + # check supported version + version = headers.get(hdrs.SEC_WEBSOCKET_VERSION, '') + if version not in ('13', '8', '7'): + raise HTTPBadRequest( + text='Unsupported version: {}'.format(version)) + + # check client handshake for validity + key = headers.get(hdrs.SEC_WEBSOCKET_KEY) + try: + if not key or len(base64.b64decode(key)) != 16: + raise HTTPBadRequest( + text='Handshake error: {!r}'.format(key)) + except binascii.Error: + raise HTTPBadRequest( + text='Handshake error: {!r}'.format(key)) from None + + accept_val = base64.b64encode( + hashlib.sha1(key.encode() + WS_KEY).digest()).decode() + response_headers = CIMultiDict( # type: ignore + {hdrs.UPGRADE: 'websocket', + hdrs.CONNECTION: 'upgrade', + hdrs.SEC_WEBSOCKET_ACCEPT: accept_val}) + + notakeover = False + compress = 0 + if self._compress: + extensions = headers.get(hdrs.SEC_WEBSOCKET_EXTENSIONS) + # Server side always get return with no exception. + # If something happened, just drop compress extension + compress, notakeover = ws_ext_parse(extensions, isserver=True) + if compress: + enabledext = ws_ext_gen(compress=compress, isserver=True, + server_notakeover=notakeover) + response_headers[hdrs.SEC_WEBSOCKET_EXTENSIONS] = enabledext + + if protocol: + response_headers[hdrs.SEC_WEBSOCKET_PROTOCOL] = protocol + return (response_headers, # type: ignore + protocol, + compress, + notakeover) + + def _pre_start(self, request: BaseRequest) -> Tuple[str, WebSocketWriter]: + self._loop = request._loop + + headers, protocol, compress, notakeover = self._handshake( + request) + + self._reset_heartbeat() + + self.set_status(101) + self.headers.update(headers) + self.force_close() + self._compress = compress + transport = request._protocol.transport + assert transport is not None + writer = WebSocketWriter(request._protocol, + transport, + compress=compress, + notakeover=notakeover) + + return protocol, writer + + def _post_start(self, request: BaseRequest, + protocol: str, writer: WebSocketWriter) -> None: + self._ws_protocol = protocol + self._writer = writer + loop = self._loop + assert loop is not None + self._reader = FlowControlDataQueue( + request._protocol, limit=2 ** 16, loop=loop) + request.protocol.set_parser(WebSocketReader( + self._reader, self._max_msg_size, compress=self._compress)) + # disable HTTP keepalive for WebSocket + request.protocol.keep_alive(False) + + def can_prepare(self, request: BaseRequest) -> WebSocketReady: + if self._writer is not None: + raise RuntimeError('Already started') + try: + _, protocol, _, _ = self._handshake(request) + except HTTPException: + return WebSocketReady(False, None) + else: + return WebSocketReady(True, protocol) + + @property + def closed(self) -> bool: + return self._closed + + @property + def close_code(self) -> Optional[int]: + return self._close_code + + @property + def ws_protocol(self) -> Optional[str]: + return self._ws_protocol + + @property + def compress(self) -> bool: + return self._compress + + def exception(self) -> Optional[BaseException]: + return self._exception + + async def ping(self, message: bytes=b'') -> None: + if self._writer is None: + raise RuntimeError('Call .prepare() first') + await self._writer.ping(message) + + async def pong(self, message: bytes=b'') -> None: + # unsolicited pong + if self._writer is None: + raise RuntimeError('Call .prepare() first') + await self._writer.pong(message) + + async def send_str(self, data: str, compress: Optional[bool]=None) -> None: + if self._writer is None: + raise RuntimeError('Call .prepare() first') + if not isinstance(data, str): + raise TypeError('data argument must be str (%r)' % type(data)) + await self._writer.send(data, binary=False, compress=compress) + + async def send_bytes(self, data: bytes, + compress: Optional[bool]=None) -> None: + if self._writer is None: + raise RuntimeError('Call .prepare() first') + if not isinstance(data, (bytes, bytearray, memoryview)): + raise TypeError('data argument must be byte-ish (%r)' % + type(data)) + await self._writer.send(data, binary=True, compress=compress) + + async def send_json(self, data: Any, compress: Optional[bool]=None, *, + dumps: JSONEncoder=json.dumps) -> None: + await self.send_str(dumps(data), compress=compress) + + async def write_eof(self) -> None: # type: ignore + if self._eof_sent: + return + if self._payload_writer is None: + raise RuntimeError("Response has not been started") + + await self.close() + self._eof_sent = True + + async def close(self, *, code: int=1000, message: bytes=b'') -> bool: + if self._writer is None: + raise RuntimeError('Call .prepare() first') + + self._cancel_heartbeat() + reader = self._reader + assert reader is not None + + # we need to break `receive()` cycle first, + # `close()` may be called from different task + if self._waiting is not None and not self._closed: + reader.feed_data(WS_CLOSING_MESSAGE, 0) + await self._waiting + + if not self._closed: + self._closed = True + try: + await self._writer.close(code, message) + writer = self._payload_writer + assert writer is not None + await writer.drain() + except (asyncio.CancelledError, asyncio.TimeoutError): + self._close_code = 1006 + raise + except Exception as exc: + self._close_code = 1006 + self._exception = exc + return True + + if self._closing: + return True + + reader = self._reader + assert reader is not None + try: + with async_timeout.timeout(self._timeout, loop=self._loop): + msg = await reader.read() + except asyncio.CancelledError: + self._close_code = 1006 + raise + except Exception as exc: + self._close_code = 1006 + self._exception = exc + return True + + if msg.type == WSMsgType.CLOSE: + self._close_code = msg.data + return True + + self._close_code = 1006 + self._exception = asyncio.TimeoutError() + return True + else: + return False + + async def receive(self, timeout: Optional[float]=None) -> WSMessage: + if self._reader is None: + raise RuntimeError('Call .prepare() first') + + loop = self._loop + assert loop is not None + while True: + if self._waiting is not None: + raise RuntimeError( + 'Concurrent call to receive() is not allowed') + + if self._closed: + self._conn_lost += 1 + if self._conn_lost >= THRESHOLD_CONNLOST_ACCESS: + raise RuntimeError('WebSocket connection is closed.') + return WS_CLOSED_MESSAGE + elif self._closing: + return WS_CLOSING_MESSAGE + + try: + self._waiting = loop.create_future() + try: + with async_timeout.timeout( + timeout or self._receive_timeout, loop=self._loop): + msg = await self._reader.read() + self._reset_heartbeat() + finally: + waiter = self._waiting + set_result(waiter, True) + self._waiting = None + except (asyncio.CancelledError, asyncio.TimeoutError): + self._close_code = 1006 + raise + except EofStream: + self._close_code = 1000 + await self.close() + return WSMessage(WSMsgType.CLOSED, None, None) + except WebSocketError as exc: + self._close_code = exc.code + await self.close(code=exc.code) + return WSMessage(WSMsgType.ERROR, exc, None) + except Exception as exc: + self._exception = exc + self._closing = True + self._close_code = 1006 + await self.close() + return WSMessage(WSMsgType.ERROR, exc, None) + + if msg.type == WSMsgType.CLOSE: + self._closing = True + self._close_code = msg.data + if not self._closed and self._autoclose: + await self.close() + elif msg.type == WSMsgType.CLOSING: + self._closing = True + elif msg.type == WSMsgType.PING and self._autoping: + await self.pong(msg.data) + continue + elif msg.type == WSMsgType.PONG and self._autoping: + continue + + return msg + + async def receive_str(self, *, timeout: Optional[float]=None) -> str: + msg = await self.receive(timeout) + if msg.type != WSMsgType.TEXT: + raise TypeError( + "Received message {}:{!r} is not WSMsgType.TEXT".format( + msg.type, msg.data)) + return msg.data + + async def receive_bytes(self, *, timeout: Optional[float]=None) -> bytes: + msg = await self.receive(timeout) + if msg.type != WSMsgType.BINARY: + raise TypeError( + "Received message {}:{!r} is not bytes".format(msg.type, + msg.data)) + return msg.data + + async def receive_json(self, *, loads: JSONDecoder=json.loads, + timeout: Optional[float]=None) -> Any: + data = await self.receive_str(timeout=timeout) + return loads(data) + + async def write(self, data: bytes) -> None: + raise RuntimeError("Cannot call .write() for websocket") + + def __aiter__(self) -> 'WebSocketResponse': + return self + + async def __anext__(self) -> WSMessage: + msg = await self.receive() + if msg.type in (WSMsgType.CLOSE, + WSMsgType.CLOSING, + WSMsgType.CLOSED): + raise StopAsyncIteration # NOQA + return msg diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/worker.py b/venv-linux/lib/python3.6/site-packages/aiohttp/worker.py new file mode 100644 index 0000000..73ba6e3 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/worker.py @@ -0,0 +1,242 @@ +"""Async gunicorn worker for aiohttp.web""" + +import asyncio +import os +import re +import signal +import sys +from types import FrameType +from typing import Any, Awaitable, Callable, Optional, Union # noqa + +from gunicorn.config import AccessLogFormat as GunicornAccessLogFormat +from gunicorn.workers import base + +from aiohttp import web + +from .helpers import set_result +from .web_app import Application +from .web_log import AccessLogger + +try: + import ssl + SSLContext = ssl.SSLContext # noqa +except ImportError: # pragma: no cover + ssl = None # type: ignore + SSLContext = object # type: ignore + + +__all__ = ('GunicornWebWorker', + 'GunicornUVLoopWebWorker', + 'GunicornTokioWebWorker') + + +class GunicornWebWorker(base.Worker): + + DEFAULT_AIOHTTP_LOG_FORMAT = AccessLogger.LOG_FORMAT + DEFAULT_GUNICORN_LOG_FORMAT = GunicornAccessLogFormat.default + + def __init__(self, *args: Any, **kw: Any) -> None: # pragma: no cover + super().__init__(*args, **kw) + + self._task = None # type: Optional[asyncio.Task[None]] + self.exit_code = 0 + self._notify_waiter = None # type: Optional[asyncio.Future[bool]] + + def init_process(self) -> None: + # create new event_loop after fork + asyncio.get_event_loop().close() + + self.loop = asyncio.new_event_loop() + asyncio.set_event_loop(self.loop) + + super().init_process() + + def run(self) -> None: + self._task = self.loop.create_task(self._run()) + + try: # ignore all finalization problems + self.loop.run_until_complete(self._task) + except Exception: + self.log.exception("Exception in gunicorn worker") + if sys.version_info >= (3, 6): + self.loop.run_until_complete(self.loop.shutdown_asyncgens()) + self.loop.close() + + sys.exit(self.exit_code) + + async def _run(self) -> None: + if isinstance(self.wsgi, Application): + app = self.wsgi + elif asyncio.iscoroutinefunction(self.wsgi): + app = await self.wsgi() + else: + raise RuntimeError("wsgi app should be either Application or " + "async function returning Application, got {}" + .format(self.wsgi)) + access_log = self.log.access_log if self.cfg.accesslog else None + runner = web.AppRunner(app, + logger=self.log, + keepalive_timeout=self.cfg.keepalive, + access_log=access_log, + access_log_format=self._get_valid_log_format( + self.cfg.access_log_format)) + await runner.setup() + + ctx = self._create_ssl_context(self.cfg) if self.cfg.is_ssl else None + + runner = runner + assert runner is not None + server = runner.server + assert server is not None + for sock in self.sockets: + site = web.SockSite( + runner, sock, ssl_context=ctx, + shutdown_timeout=self.cfg.graceful_timeout / 100 * 95) + await site.start() + + # If our parent changed then we shut down. + pid = os.getpid() + try: + while self.alive: # type: ignore + self.notify() + + cnt = server.requests_count + if self.cfg.max_requests and cnt > self.cfg.max_requests: + self.alive = False + self.log.info("Max requests, shutting down: %s", self) + + elif pid == os.getpid() and self.ppid != os.getppid(): + self.alive = False + self.log.info("Parent changed, shutting down: %s", self) + else: + await self._wait_next_notify() + except BaseException: + pass + + await runner.cleanup() + + def _wait_next_notify(self) -> 'asyncio.Future[bool]': + self._notify_waiter_done() + + loop = self.loop + assert loop is not None + self._notify_waiter = waiter = loop.create_future() + self.loop.call_later(1.0, self._notify_waiter_done, waiter) + + return waiter + + def _notify_waiter_done(self, waiter: 'asyncio.Future[bool]'=None) -> None: + if waiter is None: + waiter = self._notify_waiter + if waiter is not None: + set_result(waiter, True) + + if waiter is self._notify_waiter: + self._notify_waiter = None + + def init_signals(self) -> None: + # Set up signals through the event loop API. + + self.loop.add_signal_handler(signal.SIGQUIT, self.handle_quit, + signal.SIGQUIT, None) + + self.loop.add_signal_handler(signal.SIGTERM, self.handle_exit, + signal.SIGTERM, None) + + self.loop.add_signal_handler(signal.SIGINT, self.handle_quit, + signal.SIGINT, None) + + self.loop.add_signal_handler(signal.SIGWINCH, self.handle_winch, + signal.SIGWINCH, None) + + self.loop.add_signal_handler(signal.SIGUSR1, self.handle_usr1, + signal.SIGUSR1, None) + + self.loop.add_signal_handler(signal.SIGABRT, self.handle_abort, + signal.SIGABRT, None) + + # Don't let SIGTERM and SIGUSR1 disturb active requests + # by interrupting system calls + signal.siginterrupt(signal.SIGTERM, False) + signal.siginterrupt(signal.SIGUSR1, False) + + def handle_quit(self, sig: int, frame: FrameType) -> None: + self.alive = False + + # worker_int callback + self.cfg.worker_int(self) + + # wakeup closing process + self._notify_waiter_done() + + def handle_abort(self, sig: int, frame: FrameType) -> None: + self.alive = False + self.exit_code = 1 + self.cfg.worker_abort(self) + sys.exit(1) + + @staticmethod + def _create_ssl_context(cfg: Any) -> 'SSLContext': + """ Creates SSLContext instance for usage in asyncio.create_server. + + See ssl.SSLSocket.__init__ for more details. + """ + if ssl is None: # pragma: no cover + raise RuntimeError('SSL is not supported.') + + ctx = ssl.SSLContext(cfg.ssl_version) + ctx.load_cert_chain(cfg.certfile, cfg.keyfile) + ctx.verify_mode = cfg.cert_reqs + if cfg.ca_certs: + ctx.load_verify_locations(cfg.ca_certs) + if cfg.ciphers: + ctx.set_ciphers(cfg.ciphers) + return ctx + + def _get_valid_log_format(self, source_format: str) -> str: + if source_format == self.DEFAULT_GUNICORN_LOG_FORMAT: + return self.DEFAULT_AIOHTTP_LOG_FORMAT + elif re.search(r'%\([^\)]+\)', source_format): + raise ValueError( + "Gunicorn's style options in form of `%(name)s` are not " + "supported for the log formatting. Please use aiohttp's " + "format specification to configure access log formatting: " + "http://docs.aiohttp.org/en/stable/logging.html" + "#format-specification" + ) + else: + return source_format + + +class GunicornUVLoopWebWorker(GunicornWebWorker): + + def init_process(self) -> None: + import uvloop + + # Close any existing event loop before setting a + # new policy. + asyncio.get_event_loop().close() + + # Setup uvloop policy, so that every + # asyncio.get_event_loop() will create an instance + # of uvloop event loop. + asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) + + super().init_process() + + +class GunicornTokioWebWorker(GunicornWebWorker): + + def init_process(self) -> None: # pragma: no cover + import tokio + + # Close any existing event loop before setting a + # new policy. + asyncio.get_event_loop().close() + + # Setup tokio policy, so that every + # asyncio.get_event_loop() will create an instance + # of tokio event loop. + asyncio.set_event_loop_policy(tokio.EventLoopPolicy()) + + super().init_process() diff --git a/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/INSTALLER b/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/LICENSE b/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/LICENSE new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/METADATA b/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/METADATA new file mode 100644 index 0000000..5ec05a2 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/METADATA @@ -0,0 +1,165 @@ +Metadata-Version: 2.1 +Name: async-timeout +Version: 3.0.1 +Summary: Timeout context manager for asyncio programs +Home-page: https://github.com/aio-libs/async_timeout/ +Author: Andrew Svetlov +Author-email: andrew.svetlov@gmail.com +License: Apache 2 +Platform: UNKNOWN +Classifier: License :: OSI Approved :: Apache Software License +Classifier: Intended Audience :: Developers +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Topic :: Internet :: WWW/HTTP +Classifier: Framework :: AsyncIO +Requires-Python: >=3.5.3 + +async-timeout +============= +.. image:: https://travis-ci.org/aio-libs/async-timeout.svg?branch=master + :target: https://travis-ci.org/aio-libs/async-timeout +.. image:: https://codecov.io/gh/aio-libs/async-timeout/branch/master/graph/badge.svg + :target: https://codecov.io/gh/aio-libs/async-timeout +.. image:: https://img.shields.io/pypi/v/async-timeout.svg + :target: https://pypi.python.org/pypi/async-timeout +.. image:: https://badges.gitter.im/Join%20Chat.svg + :target: https://gitter.im/aio-libs/Lobby + :alt: Chat on Gitter + +asyncio-compatible timeout context manager. + + +Usage example +------------- + + +The context manager is useful in cases when you want to apply timeout +logic around block of code or in cases when ``asyncio.wait_for()`` is +not suitable. Also it's much faster than ``asyncio.wait_for()`` +because ``timeout`` doesn't create a new task. + +The ``timeout(timeout, *, loop=None)`` call returns a context manager +that cancels a block on *timeout* expiring:: + + async with timeout(1.5): + await inner() + +1. If ``inner()`` is executed faster than in ``1.5`` seconds nothing + happens. +2. Otherwise ``inner()`` is cancelled internally by sending + ``asyncio.CancelledError`` into but ``asyncio.TimeoutError`` is + raised outside of context manager scope. + +*timeout* parameter could be ``None`` for skipping timeout functionality. + + +Context manager has ``.expired`` property for check if timeout happens +exactly in context manager:: + + async with timeout(1.5) as cm: + await inner() + print(cm.expired) + +The property is ``True`` if ``inner()`` execution is cancelled by +timeout context manager. + +If ``inner()`` call explicitly raises ``TimeoutError`` ``cm.expired`` +is ``False``. + +Installation +------------ + +:: + + $ pip install async-timeout + +The library is Python 3 only! + + + +Authors and License +------------------- + +The module is written by Andrew Svetlov. + +It's *Apache 2* licensed and freely available. + + +CHANGES +======= + +3.0.1 (2018-10-09) +------------------ + +- More aggressive typing (#48) + +3.0.0 (2018-05-05) +------------------ + +- Drop Python 3.4, the minimal supported version is Python 3.5.3 + +- Provide type annotations + +2.0.1 (2018-03-13) +------------------ + +* Fix ``PendingDeprecationWarning`` on Python 3.7 (#33) + + +2.0.0 (2017-10-09) +------------------ + +* Changed `timeout <= 0` behaviour + + * Backward incompatibility change, prior this version `0` was + shortcut for `None` + * when timeout <= 0 `TimeoutError` raised faster + +1.4.0 (2017-09-09) +------------------ + +* Implement `remaining` property (#20) + + * If timeout is not started yet or started unconstrained: + `remaining` is `None` + * If timeout is expired: `remaining` is `0.0` + * All others: roughly amount of time before `TimeoutError` is triggered + +1.3.0 (2017-08-23) +------------------ + +* Don't suppress nested exception on timeout. Exception context points + on cancelled line with suspended `await` (#13) + +* Introduce `.timeout` property (#16) + +* Add methods for using as async context manager (#9) + +1.2.1 (2017-05-02) +------------------ + +* Support unpublished event loop's "current_task" api. + + +1.2.0 (2017-03-11) +------------------ + +* Extra check on context manager exit + +* 0 is no-op timeout + + +1.1.0 (2016-10-20) +------------------ + +* Rename to `async-timeout` + +1.0.0 (2016-09-09) +------------------ + +* The first release. + + diff --git a/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/RECORD b/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/RECORD new file mode 100644 index 0000000..e14c68a --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/RECORD @@ -0,0 +1,9 @@ +async_timeout/__init__.py,sha256=mGvWOoRqLtScEU3kmzqtTSH7EQsHvu8zhgHxOTXCn7c,3654 +async_timeout/py.typed,sha256=9LJP7QJ0oxYYrBtmXuFirzMbS3D9_3Tz-d3tyUtNp0U,11 +async_timeout-3.0.1.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357 +async_timeout-3.0.1.dist-info/METADATA,sha256=_3ByJ8L0-cU5wWu75_Rl8n0ZkbSCgW15fMAu_DzwTm0,4013 +async_timeout-3.0.1.dist-info/WHEEL,sha256=-ZFxwj8mZJPIVcZGLrsQ8UGRcxVAOExzPLVBGR7u7bE,92 +async_timeout-3.0.1.dist-info/top_level.txt,sha256=9oM4e7Twq8iD_7_Q3Mz0E6GPIB6vJvRFo-UBwUQtBDU,14 +async_timeout-3.0.1.dist-info/RECORD,, +async_timeout-3.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +async_timeout/__pycache__/__init__.cpython-36.pyc,, diff --git a/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/WHEEL b/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/WHEEL new file mode 100644 index 0000000..f87af07 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.32.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/top_level.txt b/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/top_level.txt new file mode 100644 index 0000000..ad29955 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/async_timeout-3.0.1.dist-info/top_level.txt @@ -0,0 +1 @@ +async_timeout diff --git a/venv-linux/lib/python3.6/site-packages/async_timeout/__init__.py b/venv-linux/lib/python3.6/site-packages/async_timeout/__init__.py new file mode 100644 index 0000000..dcc55f0 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/async_timeout/__init__.py @@ -0,0 +1,115 @@ +import asyncio +import sys + +from types import TracebackType +from typing import Optional, Type, Any # noqa + + +__version__ = '3.0.1' + +PY_37 = sys.version_info >= (3, 7) + + +class timeout: + """timeout context manager. + + Useful in cases when you want to apply timeout logic around block + of code or in cases when asyncio.wait_for is not suitable. For example: + + >>> with timeout(0.001): + ... async with aiohttp.get('https://github.com') as r: + ... await r.text() + + + timeout - value in seconds or None to disable timeout logic + loop - asyncio compatible event loop + """ + def __init__(self, timeout: Optional[float], + *, loop: Optional[asyncio.AbstractEventLoop] = None) -> None: + self._timeout = timeout + if loop is None: + loop = asyncio.get_event_loop() + self._loop = loop + self._task = None # type: Optional[asyncio.Task[Any]] + self._cancelled = False + self._cancel_handler = None # type: Optional[asyncio.Handle] + self._cancel_at = None # type: Optional[float] + + def __enter__(self) -> 'timeout': + return self._do_enter() + + def __exit__(self, + exc_type: Type[BaseException], + exc_val: BaseException, + exc_tb: TracebackType) -> Optional[bool]: + self._do_exit(exc_type) + return None + + async def __aenter__(self) -> 'timeout': + return self._do_enter() + + async def __aexit__(self, + exc_type: Type[BaseException], + exc_val: BaseException, + exc_tb: TracebackType) -> None: + self._do_exit(exc_type) + + @property + def expired(self) -> bool: + return self._cancelled + + @property + def remaining(self) -> Optional[float]: + if self._cancel_at is not None: + return max(self._cancel_at - self._loop.time(), 0.0) + else: + return None + + def _do_enter(self) -> 'timeout': + # Support Tornado 5- without timeout + # Details: https://github.com/python/asyncio/issues/392 + if self._timeout is None: + return self + + self._task = current_task(self._loop) + if self._task is None: + raise RuntimeError('Timeout context manager should be used ' + 'inside a task') + + if self._timeout <= 0: + self._loop.call_soon(self._cancel_task) + return self + + self._cancel_at = self._loop.time() + self._timeout + self._cancel_handler = self._loop.call_at( + self._cancel_at, self._cancel_task) + return self + + def _do_exit(self, exc_type: Type[BaseException]) -> None: + if exc_type is asyncio.CancelledError and self._cancelled: + self._cancel_handler = None + self._task = None + raise asyncio.TimeoutError + if self._timeout is not None and self._cancel_handler is not None: + self._cancel_handler.cancel() + self._cancel_handler = None + self._task = None + return None + + def _cancel_task(self) -> None: + if self._task is not None: + self._task.cancel() + self._cancelled = True + + +def current_task(loop: asyncio.AbstractEventLoop) -> 'asyncio.Task[Any]': + if PY_37: + task = asyncio.current_task(loop=loop) # type: ignore + else: + task = asyncio.Task.current_task(loop=loop) + if task is None: + # this should be removed, tokio must use register_task and family API + if hasattr(loop, 'current_task'): + task = loop.current_task() # type: ignore + + return task diff --git a/venv-linux/lib/python3.6/site-packages/async_timeout/__pycache__/__init__.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/async_timeout/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3da5d617b41edc52ddf3dcabd271af476cfbce18 GIT binary patch literal 3425 zcma)9TW{n@6?WNfx7+FNT&5>;*#*3VV8#;ZWHd-X1Ywt9W_du_6$A+ksN{B45_jBo zQ+CfJQSS>quRQY-@y_qyUs&Rar}+y!@tv|e>C8pKEg#qARMk1(IrUZbvtG}O|M74B zvTqpwF;*T6<&Njq$#%?@43#vRc+ zYlYsIhG+}-jUn8H8LmlV+!Y<+U72D{bl=!vPq5z_LH{k*F%AP(^^Q~&%TW}c9bHUi zU{&r{(=y4kD6MR2sjM%ui_6xt;ok7+TQc))8zQFR%cq6H=Xi?>LKk=DA{K>LQ=ls!G;rr3I8FIc#R7QMc1y(0#?^-eR}U9pW(gL*d1bPq7y7Z1>O z7d5i%q4)%~ZD9hmPpfvBOk_SQqrWr5Xv%(^XQezZ{YjKXCsGYP&&Tt-LLSdjKgs+! zDrDimK9!k&k<#z!o(B7R zrQvW$X8U^LS}jWQ)3TfnPh|PzF_nt_-Q5#RFdGfyeDXMevafCr*He&Dz8VrLPXe!A zeCg(B49a9GKgV1A7-G)m1~=xWFwR`HU9z#cFupP8 zCR#0FK-z*dTDt6L*%k(}!aRH#xRuKr2dj1yny?StxHgWHIaO=CR}Dq+;jtOzxG@@vB{J zz)oXNU0YhW%XyL^WB71-0h^o3Cj`OcN}`cIC?Rn3qIJ zZ7Ly+Dn~bsYLjdli-*3~p#{-uljdx}h&`8vx!SPvqzvrZuKQ3_4@f*DK?tvy38*BL zVF%g^y^`&*Re0*|_i*_a>A#1I+D7w75b-#V8mISYa0AKK4J6C%_+5|nVjuBXQIP*X zXAzUAcIVl(0rqN4n%?)E)k)xB3?)H>v|6WiKOB6-ahfP8esaBxdAYvyv+29Fhy_Kx z$dhIf?ADI*OYF=sEozRfg>fIp=K_39!EScw3Dori05(ymtVwjPdQ`G$y^q+}QF0Pt zzhoyrgK9yZ8K%d!%^NVTH9l;o!U(cWvr2ysi?prgg1E#&54Z(<^MexXvS5GJehBl7 zsb6VtT96JUE{)VJ?S-E29wc{lO9zrl&VsngBhA1%y!_!&eN?@BJo&|GK1*@NNPkvH z0Ujeb700KK~Yn7-}L@^(RT5pJ7qPw7dXjmSz%`Wqpi&7uuEf7+Fl^3pQ#Z-FdYEsf$ z1;gok%>ZAcGH0bRW&rvTL8cyQ`fg|)JuMA9NFB-a5*iegrZfiN#2XYYE$tLHcJOuIwbhm#JOVjdphoTRv_$0R_2ru8p3mzT05 zY^6Wq+Wcq4m~J1pk4!R_Tz-zXIDjY(wM7?>If(0T>>HN#QL}F9b6lvAyZfaL4Rc|t zead27PuQI9@)i!-dYSKHvY=J9zWxJ$_9G3YqNdO$gR1svR77Q|8lys6Z_{@&kMt9~ z1*L?+Y}PmX%mwMWrk)Ffi3Sz@2?+XixUAx$s9JO~7j+~YltG$0usU9f{vuRsoWGK) wz@H1sg=I0xaD9DBbL!jL4wcA?55=W&e_AKg0TGq95!V$k#lW&n&+7l_f4&(5Gynhq literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/async_timeout/py.typed b/venv-linux/lib/python3.6/site-packages/async_timeout/py.typed new file mode 100644 index 0000000..f6e0339 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/async_timeout/py.typed @@ -0,0 +1 @@ +Placeholder \ No newline at end of file diff --git a/venv-linux/lib/python3.6/site-packages/attr/__init__.py b/venv-linux/lib/python3.6/site-packages/attr/__init__.py new file mode 100644 index 0000000..bf329ca --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/__init__.py @@ -0,0 +1,76 @@ +from __future__ import absolute_import, division, print_function + +import sys + +from functools import partial + +from . import converters, exceptions, filters, setters, validators +from ._config import get_run_validators, set_run_validators +from ._funcs import asdict, assoc, astuple, evolve, has, resolve_types +from ._make import ( + NOTHING, + Attribute, + Factory, + attrib, + attrs, + fields, + fields_dict, + make_class, + validate, +) +from ._version_info import VersionInfo + + +__version__ = "20.3.0" +__version_info__ = VersionInfo._from_version_string(__version__) + +__title__ = "attrs" +__description__ = "Classes Without Boilerplate" +__url__ = "https://www.attrs.org/" +__uri__ = __url__ +__doc__ = __description__ + " <" + __uri__ + ">" + +__author__ = "Hynek Schlawack" +__email__ = "hs@ox.cx" + +__license__ = "MIT" +__copyright__ = "Copyright (c) 2015 Hynek Schlawack" + + +s = attributes = attrs +ib = attr = attrib +dataclass = partial(attrs, auto_attribs=True) # happy Easter ;) + +__all__ = [ + "Attribute", + "Factory", + "NOTHING", + "asdict", + "assoc", + "astuple", + "attr", + "attrib", + "attributes", + "attrs", + "converters", + "evolve", + "exceptions", + "fields", + "fields_dict", + "filters", + "get_run_validators", + "has", + "ib", + "make_class", + "resolve_types", + "s", + "set_run_validators", + "setters", + "validate", + "validators", +] + +if sys.version_info[:2] >= (3, 6): + from ._next_gen import define, field, frozen, mutable + + __all__.extend((define, field, frozen, mutable)) diff --git a/venv-linux/lib/python3.6/site-packages/attr/__init__.pyi b/venv-linux/lib/python3.6/site-packages/attr/__init__.pyi new file mode 100644 index 0000000..442d6e7 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/__init__.pyi @@ -0,0 +1,433 @@ +from typing import ( + Any, + Callable, + Dict, + Generic, + List, + Optional, + Sequence, + Mapping, + Tuple, + Type, + TypeVar, + Union, + overload, +) + +# `import X as X` is required to make these public +from . import exceptions as exceptions +from . import filters as filters +from . import converters as converters +from . import setters as setters +from . import validators as validators + +from ._version_info import VersionInfo + +__version__: str +__version_info__: VersionInfo +__title__: str +__description__: str +__url__: str +__uri__: str +__author__: str +__email__: str +__license__: str +__copyright__: str + +_T = TypeVar("_T") +_C = TypeVar("_C", bound=type) + +_ValidatorType = Callable[[Any, Attribute[_T], _T], Any] +_ConverterType = Callable[[Any], Any] +_FilterType = Callable[[Attribute[_T], _T], bool] +_ReprType = Callable[[Any], str] +_ReprArgType = Union[bool, _ReprType] +_OnSetAttrType = Callable[[Any, Attribute[Any], Any], Any] +_OnSetAttrArgType = Union[ + _OnSetAttrType, List[_OnSetAttrType], setters._NoOpType +] +_FieldTransformer = Callable[[type, List[Attribute]], List[Attribute]] +# FIXME: in reality, if multiple validators are passed they must be in a list +# or tuple, but those are invariant and so would prevent subtypes of +# _ValidatorType from working when passed in a list or tuple. +_ValidatorArgType = Union[_ValidatorType[_T], Sequence[_ValidatorType[_T]]] + +# _make -- + +NOTHING: object + +# NOTE: Factory lies about its return type to make this possible: +# `x: List[int] # = Factory(list)` +# Work around mypy issue #4554 in the common case by using an overload. +@overload +def Factory(factory: Callable[[], _T]) -> _T: ... +@overload +def Factory( + factory: Union[Callable[[Any], _T], Callable[[], _T]], + takes_self: bool = ..., +) -> _T: ... + +class Attribute(Generic[_T]): + name: str + default: Optional[_T] + validator: Optional[_ValidatorType[_T]] + repr: _ReprArgType + cmp: bool + eq: bool + order: bool + hash: Optional[bool] + init: bool + converter: Optional[_ConverterType] + metadata: Dict[Any, Any] + type: Optional[Type[_T]] + kw_only: bool + on_setattr: _OnSetAttrType + +# NOTE: We had several choices for the annotation to use for type arg: +# 1) Type[_T] +# - Pros: Handles simple cases correctly +# - Cons: Might produce less informative errors in the case of conflicting +# TypeVars e.g. `attr.ib(default='bad', type=int)` +# 2) Callable[..., _T] +# - Pros: Better error messages than #1 for conflicting TypeVars +# - Cons: Terrible error messages for validator checks. +# e.g. attr.ib(type=int, validator=validate_str) +# -> error: Cannot infer function type argument +# 3) type (and do all of the work in the mypy plugin) +# - Pros: Simple here, and we could customize the plugin with our own errors. +# - Cons: Would need to write mypy plugin code to handle all the cases. +# We chose option #1. + +# `attr` lies about its return type to make the following possible: +# attr() -> Any +# attr(8) -> int +# attr(validator=) -> Whatever the callable expects. +# This makes this type of assignments possible: +# x: int = attr(8) +# +# This form catches explicit None or no default but with no other arguments +# returns Any. +@overload +def attrib( + default: None = ..., + validator: None = ..., + repr: _ReprArgType = ..., + cmp: Optional[bool] = ..., + hash: Optional[bool] = ..., + init: bool = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: None = ..., + converter: None = ..., + factory: None = ..., + kw_only: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., + on_setattr: Optional[_OnSetAttrArgType] = ..., +) -> Any: ... + +# This form catches an explicit None or no default and infers the type from the +# other arguments. +@overload +def attrib( + default: None = ..., + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: _ReprArgType = ..., + cmp: Optional[bool] = ..., + hash: Optional[bool] = ..., + init: bool = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: Optional[Type[_T]] = ..., + converter: Optional[_ConverterType] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., + on_setattr: Optional[_OnSetAttrArgType] = ..., +) -> _T: ... + +# This form catches an explicit default argument. +@overload +def attrib( + default: _T, + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: _ReprArgType = ..., + cmp: Optional[bool] = ..., + hash: Optional[bool] = ..., + init: bool = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: Optional[Type[_T]] = ..., + converter: Optional[_ConverterType] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., + on_setattr: Optional[_OnSetAttrArgType] = ..., +) -> _T: ... + +# This form covers type=non-Type: e.g. forward references (str), Any +@overload +def attrib( + default: Optional[_T] = ..., + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: _ReprArgType = ..., + cmp: Optional[bool] = ..., + hash: Optional[bool] = ..., + init: bool = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: object = ..., + converter: Optional[_ConverterType] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., + on_setattr: Optional[_OnSetAttrArgType] = ..., +) -> Any: ... +@overload +def field( + *, + default: None = ..., + validator: None = ..., + repr: _ReprArgType = ..., + hash: Optional[bool] = ..., + init: bool = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + converter: None = ..., + factory: None = ..., + kw_only: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., + on_setattr: Optional[_OnSetAttrArgType] = ..., +) -> Any: ... + +# This form catches an explicit None or no default and infers the type from the +# other arguments. +@overload +def field( + *, + default: None = ..., + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: _ReprArgType = ..., + hash: Optional[bool] = ..., + init: bool = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + converter: Optional[_ConverterType] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., + on_setattr: Optional[_OnSetAttrArgType] = ..., +) -> _T: ... + +# This form catches an explicit default argument. +@overload +def field( + *, + default: _T, + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: _ReprArgType = ..., + hash: Optional[bool] = ..., + init: bool = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + converter: Optional[_ConverterType] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., + on_setattr: Optional[_OnSetAttrArgType] = ..., +) -> _T: ... + +# This form covers type=non-Type: e.g. forward references (str), Any +@overload +def field( + *, + default: Optional[_T] = ..., + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: _ReprArgType = ..., + hash: Optional[bool] = ..., + init: bool = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + converter: Optional[_ConverterType] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., + on_setattr: Optional[_OnSetAttrArgType] = ..., +) -> Any: ... +@overload +def attrs( + maybe_cls: _C, + these: Optional[Dict[str, Any]] = ..., + repr_ns: Optional[str] = ..., + repr: bool = ..., + cmp: Optional[bool] = ..., + hash: Optional[bool] = ..., + init: bool = ..., + slots: bool = ..., + frozen: bool = ..., + weakref_slot: bool = ..., + str: bool = ..., + auto_attribs: bool = ..., + kw_only: bool = ..., + cache_hash: bool = ..., + auto_exc: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., + auto_detect: bool = ..., + collect_by_mro: bool = ..., + getstate_setstate: Optional[bool] = ..., + on_setattr: Optional[_OnSetAttrArgType] = ..., + field_transformer: Optional[_FieldTransformer] = ..., +) -> _C: ... +@overload +def attrs( + maybe_cls: None = ..., + these: Optional[Dict[str, Any]] = ..., + repr_ns: Optional[str] = ..., + repr: bool = ..., + cmp: Optional[bool] = ..., + hash: Optional[bool] = ..., + init: bool = ..., + slots: bool = ..., + frozen: bool = ..., + weakref_slot: bool = ..., + str: bool = ..., + auto_attribs: bool = ..., + kw_only: bool = ..., + cache_hash: bool = ..., + auto_exc: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., + auto_detect: bool = ..., + collect_by_mro: bool = ..., + getstate_setstate: Optional[bool] = ..., + on_setattr: Optional[_OnSetAttrArgType] = ..., + field_transformer: Optional[_FieldTransformer] = ..., +) -> Callable[[_C], _C]: ... +@overload +def define( + maybe_cls: _C, + *, + these: Optional[Dict[str, Any]] = ..., + repr: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + slots: bool = ..., + frozen: bool = ..., + weakref_slot: bool = ..., + str: bool = ..., + auto_attribs: bool = ..., + kw_only: bool = ..., + cache_hash: bool = ..., + auto_exc: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., + auto_detect: bool = ..., + getstate_setstate: Optional[bool] = ..., + on_setattr: Optional[_OnSetAttrArgType] = ..., + field_transformer: Optional[_FieldTransformer] = ..., +) -> _C: ... +@overload +def define( + maybe_cls: None = ..., + *, + these: Optional[Dict[str, Any]] = ..., + repr: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + slots: bool = ..., + frozen: bool = ..., + weakref_slot: bool = ..., + str: bool = ..., + auto_attribs: bool = ..., + kw_only: bool = ..., + cache_hash: bool = ..., + auto_exc: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., + auto_detect: bool = ..., + getstate_setstate: Optional[bool] = ..., + on_setattr: Optional[_OnSetAttrArgType] = ..., + field_transformer: Optional[_FieldTransformer] = ..., +) -> Callable[[_C], _C]: ... + +mutable = define +frozen = define # they differ only in their defaults + +# TODO: add support for returning NamedTuple from the mypy plugin +class _Fields(Tuple[Attribute[Any], ...]): + def __getattr__(self, name: str) -> Attribute[Any]: ... + +def fields(cls: type) -> _Fields: ... +def fields_dict(cls: type) -> Dict[str, Attribute[Any]]: ... +def validate(inst: Any) -> None: ... +def resolve_types( + cls: _C, + globalns: Optional[Dict[str, Any]] = ..., + localns: Optional[Dict[str, Any]] = ..., +) -> _C: ... + +# TODO: add support for returning a proper attrs class from the mypy plugin +# we use Any instead of _CountingAttr so that e.g. `make_class('Foo', +# [attr.ib()])` is valid +def make_class( + name: str, + attrs: Union[List[str], Tuple[str, ...], Dict[str, Any]], + bases: Tuple[type, ...] = ..., + repr_ns: Optional[str] = ..., + repr: bool = ..., + cmp: Optional[bool] = ..., + hash: Optional[bool] = ..., + init: bool = ..., + slots: bool = ..., + frozen: bool = ..., + weakref_slot: bool = ..., + str: bool = ..., + auto_attribs: bool = ..., + kw_only: bool = ..., + cache_hash: bool = ..., + auto_exc: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., + collect_by_mro: bool = ..., + on_setattr: Optional[_OnSetAttrArgType] = ..., + field_transformer: Optional[_FieldTransformer] = ..., +) -> type: ... + +# _funcs -- + +# TODO: add support for returning TypedDict from the mypy plugin +# FIXME: asdict/astuple do not honor their factory args. Waiting on one of +# these: +# https://github.com/python/mypy/issues/4236 +# https://github.com/python/typing/issues/253 +def asdict( + inst: Any, + recurse: bool = ..., + filter: Optional[_FilterType[Any]] = ..., + dict_factory: Type[Mapping[Any, Any]] = ..., + retain_collection_types: bool = ..., + value_serializer: Optional[Callable[[type, Attribute, Any], Any]] = ..., +) -> Dict[str, Any]: ... + +# TODO: add support for returning NamedTuple from the mypy plugin +def astuple( + inst: Any, + recurse: bool = ..., + filter: Optional[_FilterType[Any]] = ..., + tuple_factory: Type[Sequence[Any]] = ..., + retain_collection_types: bool = ..., +) -> Tuple[Any, ...]: ... +def has(cls: type) -> bool: ... +def assoc(inst: _T, **changes: Any) -> _T: ... +def evolve(inst: _T, **changes: Any) -> _T: ... + +# _config -- + +def set_run_validators(run: bool) -> None: ... +def get_run_validators() -> bool: ... + +# aliases -- + +s = attributes = attrs +ib = attr = attrib +dataclass = attrs # Technically, partial(attrs, auto_attribs=True) ;) diff --git a/venv-linux/lib/python3.6/site-packages/attr/__pycache__/__init__.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/attr/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e9623901dc369af5fcc8f5286b1a8324d0da5c3 GIT binary patch literal 1733 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 HT(9{bo3fK7 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/attr/__pycache__/_config.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/attr/__pycache__/_config.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6afb346ffc41f4fdf87e532750d83e51b1f62761 GIT binary patch literal 694 zcma)4J#X7E5aow#D?;4>PNq!U0s*yMARUXMXwj)ah9r{~f);50OXDUy=Q&~Ow)V% zh29axHA6vs|1lG2*9OGrTLZVo3F|~_LHxN+C}#vJSP1cMC$w3szJ?b9lXt(j2A2KF zIi{V9ruQILMy#x@7ngYwGAyn2pxV-eBu2y0&8{;aoU<+*|5aU114o+g#63gt5A!87 z-Lk8?`KqsKJ>P#aFF~!hO9kNkfJ<50c3o{2-Oi2h%u%d-j6jl%rmT#!CyU(~I+Nf8 z2=;*PF9!8j271^2M;nIhoVpAd28{`CYIq-gj1ffgs0gfE48j| literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/attr/__pycache__/_funcs.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/attr/__pycache__/_funcs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..827f12a23799efdc75a725376dbd5d71e6529994 GIT binary patch literal 9650 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 fK*&WOKPmxzvpmvc)V?81S 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 DZ-#fX literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/attr/__pycache__/_next_gen.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/attr/__pycache__/_next_gen.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea4664ee3c9d35d9ea48e6ff57dcd9d68e9c6630 GIT binary patch literal 3356 zcmb_eTW=$`6`q@<(O8x*>rFSk5{o9gQoQmeDO$itf&^{dZh+bb*4+eZgAp~PtXa)P zAt~E3X8X`xK(i0q*S-XOFVLUSUqPTxeac_xQ_tbZmo<6=8jW~{qxEEvSDCMg9c@v-%dZnUmP5(|2sFyNR26eGlp$t0lFx-mjZ_J!zzV z-%p$UW*YQ^bfv!n{Tr;Ye02)?YaNHP(1+bvDoc8XS#dN#IY(;arXLjJ)6bF`*eF2~}J?$g^a= zO(uMPnhUmU;n!|=D)N(9#(74QZkK#=_=u=6RY63PM3MnjO7!G_oW^QQSUehW!81h| zAJJK&$O%nmT=s(C@CpSnqyZsv3@BvCqdev0Zk$eYp$J0CyClyzIZkpB=QBwdo%e#T z!R}Va){Q9@Dy9ik-~4q(vn*Gz2lfffi-$ACe=bBWzP6WxC0DRP+3|E^|KRACkM@6| z*Ta#>&v_QYH?x|q<0~HOnrZGI?R7SFO^vza+7o;#v^S=5ti3pkm9EJoS5nt25ZyZE zbRzgD#BS|MC3K6t|c-wAZ8oO}TG$jY7k0!qv=6Ui3xjt!^JQ@+O5K%c99ElkpkX(?#9!(@4Y?D}3 zDsgG>KvjN5BL$i!@q}MGa1T)uK2l_`51t1Tuemn(s1kEr;26AFE>#1lcg-~P;p(ix z`Kqm6I;Ejl2Abi3UOXHi2S@oVV@5S9-*vs46rV}AI41IjHZ z@*xOi6;`=cw#r87m#by1Trb;&T{cUnv`e>KDIwIB^)e_u=DgYhCv^9ZI$OG#()o~w zQ6fbEC}IUg3&kpmHi|VA5Y;V#4V`cPS}I<34f^Q=w!!4EF*WqjGw9Sm}kA|T-R70#_A_9TXsQMw(~ze=eHqx z#~JT^kmL~MRcG#V`}YRnrF&?7x&4`ihdgNtR@&eU)^q2vH4m`P zJgj?`YD@xA+7>>h-@*RRVHP+`B8Ez=yb{j;hCHXBnEazIpajk zGDtErfrE|LlSpuiacJqy$dAuB0dwTb=`b6pQt{$J24Mk1+67|(H_m{mG32F7`jY*< z^N;sT=D8dg(d?cgGvM=8Xealtqn^@hSe@Qc#}_p)dcU@R5FQ+A|AL9S8HPg&bPYqj za*dFp0i$*B1T(S8i~vr91*@5kWqt(5-U3Yvta2)7q+vi(1oeHP#3&iVeiSNSe8zk-xqKdZ= z-Yj*i+7+_<8c7K@zY(TZwy9T}Me0ff2EVfL#Q@W(knGyHkP;3gMC1TdNPB7bc|{*3rky>?eLsl!|WCEnzy zIEJj2sVe0Pp5`Y=1B3b>(?X{u?tz}-K8hP5yn}rh$;3M-Oyqoh&k&D&`1JpQ7&obe zar2tFX8jIuCEC@x{qMr4*v7T({m!~>gdxi#;9+w#%ixG|$PSq3`fJ9Dl>s5PNJB+! z8A9t?n9>Osbr@(kYc^vtjB%QNW0{sK-@(3YRW|ARDVvxI+yK=M-%p3}m|zT-K- Q#{c%TpLlk=_OD0%6XpdxTL1t6 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/attr/__pycache__/_version_info.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/attr/__pycache__/_version_info.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f6098d7e503ef10d4ccc17748ee046e4cc799f00 GIT binary patch literal 2372 zcmb_eUvC^W5VyU5Zf|o*t26~7kT8`fy^vg*6d_u*Q31865=00pK&wjD=Im=WxBqJU zPRi-}!j;E<0wmsf;R9LXiKl!8o)~+R>!l43NbJRPbDr_|H~!5yduw?)?*H~DlMzCH zp@pXf`h6IRgW!nc92Gdh1xZNZB_6hOB=?IT2|)L_pNB;&X*oT}qoSR(i#Ulf5`l<$ z2%i>wqL=WO8%D#r*U2Il#rPG{Mk_#|BJ;62xHmy|YQJsq}F=48;%nnRoztzLXUEdJ# z%mi+U2~=KbWx|21CZg2?&7_%uzx(PCVg@fRmRv3FlgCu0^1=ofQ(a z2lE2C6ayZ*in?5BHK4gDpXx)pv$gffo!G_L+uNfy^WMS^H+F7s(w$9ubCX^h zWM!IP>r#669(D7(UAOMB9EtxF;BK=V!tPuUVVu!>7vtDHhhx4aEO;a0!!%c~K+Qdx z?cOlnJ4ldJBiU$Pf@h5-GPy9itMiTg`^r4U&G*iIMyfsrgPVE zPD|={jz;TSS4w3E`7zZpE!Cis1+@2BG|PB30{-){0O!Tna{#a}RcRs4?g8*RUH+;p zni8I(o3VbLD#e(zSH6kiqAit9%f2vy!)~tZSNc%_muVqNE%*Z|D=F8(87@~J z;0)j{wF$c#Xau#PmYHzp!CaVKm{KbsP}IQ@iLp=KgE3h@$LivWIh_{k5)4P@O;C*<7yiD!&G0H>xhF~O^N1&3s^dM*d&_CJ9~Z-AE@0ALZZ{McgOw8A#w z0s(+H*NlAwv*!`}uOqf@``ybXVyuMnVa&vg6%`-lR_`$OY?S7wmKI~Y>O;N2D+7}6 zTCrxuRV&^CVLa$z`L@-TTx}IXA68s`U>zI@TUP5?@d~lisGYM#(uSc{K}1)5s1^4i zo#p6C6gm5TciBQ5jNk?Yh|+ev^sKPOV%qKvp{jBv1NfbU?v+6`B_6OM9f}6N-N%H@ fe^(dyB19&-+nmLoy+Tz7#2V?44!-OW{0{yH58Xwp literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/attr/__pycache__/converters.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/attr/__pycache__/converters.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab0a0c71667b29f7f493736615d32c9481bff5b0 GIT binary patch literal 2319 zcma)7O>f*p81`3oz0T&NX$~NPG>0D86>*Xx1X`7<6@tmS~4wx<25 ztz9O(KY?4kgobJpjq21$^wgLbsW~xIYhvjdHK~J+WbIgLY{5wK?fg zn|7|WiNiXy7a7!{-79^vNqeuf!RGu!=gT}z^DMa_rC?E+kTB2A7?+F-*Le$@Y6G*{ z38o@XO3A!9Epjd^o5p9ci1V!4E_j?tFDkQ8LjSE^ujr0noP6_q{H*GJ9fUIH7nN1S z1>Md z*V7g;k+VROAW8CbL4u3~Qu25Tu!+pcl#%7OE_s@*I_)eKE*1oEkn>p_&PWJBV4YwR zBl!LpKKZ`usF|Z8;6Vy=k|dZWtc5WG9BbVg6~qOCDT#7U;G_r3U@8=z<19!@2Arz_ z*CmhyBsidy(b0$;f94*$N9yB>BqR%ox{oC7L$d&hoZ7rkwO86T^e&Moef&E#l?fZb zqqoX0--H!^A05iHIE36BOv^Z-2lG>QB!lSe5Xlp&JzOmjZgElVEot;t;~yY^4m6r> z>y|!$u$C`O^WwD> zhZ4vc3|wmx&;H&5WP(o#V!70R)YW*8AE|M8!nld!P5+5B7W$?BvnEZLX2gL-!GqS$wb?e^30Cw%*7l5Sl@-8KUbT})LAY>~EHQ6T93o>j)`_yfN@w(AGRw~ys8Olf_hoR(geO=M`F>MG3Ni$OWy36&02Kv& zyFQwOjId&tHKPhvMTDY|02V5Wq4z)m=7Irl$irIve>q}Pl{|=6~@%*E2OM%=9L243+-^d3N$cf)1#&_qR{?C~NOjRWe*>LB_ z>!Ls+F_$X=p~!F9y!#&(*5mz!vamPWB|O2xz`42&PH>1m)H{weVU=-kbd2i#TRXLO z^9(+>9%alQ-kRB3)vXV0h`Uka-$@zo3bjJKbh8>OM;mK#@;&IjxQS@c;b@^%ZzWyc z#l8bS+NNSBPFsDI(`ss9*6|UF3ccK1?W(NQflm+M7UgN;Z8@58wc({;1PZZ&S^wE#C6qSIM(5_ZXMJXL d_V)CZ{V2_8nXt#oy%C>f>>K-*fha8d{y)LndrbfU literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/attr/__pycache__/exceptions.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/attr/__pycache__/exceptions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf57888f4f03bd0dfd6053c211a8161c287b86b4 GIT binary patch literal 3259 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 (3, 6): + ordered_dict = dict +else: + from collections import OrderedDict + + ordered_dict = OrderedDict + + +if PY2: + from collections import Mapping, Sequence + + from UserDict import IterableUserDict + + # We 'bundle' isclass instead of using inspect as importing inspect is + # fairly expensive (order of 10-15 ms for a modern machine in 2016) + def isclass(klass): + return isinstance(klass, (type, types.ClassType)) + + # TYPE is used in exceptions, repr(int) is different on Python 2 and 3. + TYPE = "type" + + def iteritems(d): + return d.iteritems() + + # Python 2 is bereft of a read-only dict proxy, so we make one! + class ReadOnlyDict(IterableUserDict): + """ + Best-effort read-only dict wrapper. + """ + + def __setitem__(self, key, val): + # We gently pretend we're a Python 3 mappingproxy. + raise TypeError( + "'mappingproxy' object does not support item assignment" + ) + + def update(self, _): + # We gently pretend we're a Python 3 mappingproxy. + raise AttributeError( + "'mappingproxy' object has no attribute 'update'" + ) + + def __delitem__(self, _): + # We gently pretend we're a Python 3 mappingproxy. + raise TypeError( + "'mappingproxy' object does not support item deletion" + ) + + def clear(self): + # We gently pretend we're a Python 3 mappingproxy. + raise AttributeError( + "'mappingproxy' object has no attribute 'clear'" + ) + + def pop(self, key, default=None): + # We gently pretend we're a Python 3 mappingproxy. + raise AttributeError( + "'mappingproxy' object has no attribute 'pop'" + ) + + def popitem(self): + # We gently pretend we're a Python 3 mappingproxy. + raise AttributeError( + "'mappingproxy' object has no attribute 'popitem'" + ) + + def setdefault(self, key, default=None): + # We gently pretend we're a Python 3 mappingproxy. + raise AttributeError( + "'mappingproxy' object has no attribute 'setdefault'" + ) + + def __repr__(self): + # Override to be identical to the Python 3 version. + return "mappingproxy(" + repr(self.data) + ")" + + def metadata_proxy(d): + res = ReadOnlyDict() + res.data.update(d) # We blocked update, so we have to do it like this. + return res + + def just_warn(*args, **kw): # pragma: no cover + """ + We only warn on Python 3 because we are not aware of any concrete + consequences of not setting the cell on Python 2. + """ + + +else: # Python 3 and later. + from collections.abc import Mapping, Sequence # noqa + + def just_warn(*args, **kw): + """ + We only warn on Python 3 because we are not aware of any concrete + consequences of not setting the cell on Python 2. + """ + warnings.warn( + "Running interpreter doesn't sufficiently support code object " + "introspection. Some features like bare super() or accessing " + "__class__ will not work with slotted classes.", + RuntimeWarning, + stacklevel=2, + ) + + def isclass(klass): + return isinstance(klass, type) + + TYPE = "class" + + def iteritems(d): + return d.items() + + def metadata_proxy(d): + return types.MappingProxyType(dict(d)) + + +def make_set_closure_cell(): + """Return a function of two arguments (cell, value) which sets + the value stored in the closure cell `cell` to `value`. + """ + # pypy makes this easy. (It also supports the logic below, but + # why not do the easy/fast thing?) + if PYPY: + + def set_closure_cell(cell, value): + cell.__setstate__((value,)) + + return set_closure_cell + + # Otherwise gotta do it the hard way. + + # Create a function that will set its first cellvar to `value`. + def set_first_cellvar_to(value): + x = value + return + + # This function will be eliminated as dead code, but + # not before its reference to `x` forces `x` to be + # represented as a closure cell rather than a local. + def force_x_to_be_a_cell(): # pragma: no cover + return x + + try: + # Extract the code object and make sure our assumptions about + # the closure behavior are correct. + if PY2: + co = set_first_cellvar_to.func_code + else: + co = set_first_cellvar_to.__code__ + if co.co_cellvars != ("x",) or co.co_freevars != (): + raise AssertionError # pragma: no cover + + # Convert this code object to a code object that sets the + # function's first _freevar_ (not cellvar) to the argument. + if sys.version_info >= (3, 8): + # CPython 3.8+ has an incompatible CodeType signature + # (added a posonlyargcount argument) but also added + # CodeType.replace() to do this without counting parameters. + set_first_freevar_code = co.replace( + co_cellvars=co.co_freevars, co_freevars=co.co_cellvars + ) + else: + args = [co.co_argcount] + if not PY2: + args.append(co.co_kwonlyargcount) + args.extend( + [ + co.co_nlocals, + co.co_stacksize, + co.co_flags, + co.co_code, + co.co_consts, + co.co_names, + co.co_varnames, + co.co_filename, + co.co_name, + co.co_firstlineno, + co.co_lnotab, + # These two arguments are reversed: + co.co_cellvars, + co.co_freevars, + ] + ) + set_first_freevar_code = types.CodeType(*args) + + def set_closure_cell(cell, value): + # Create a function using the set_first_freevar_code, + # whose first closure cell is `cell`. Calling it will + # change the value of that cell. + setter = types.FunctionType( + set_first_freevar_code, {}, "setter", (), (cell,) + ) + # And call it to set the cell. + setter(value) + + # Make sure it works on this interpreter: + def make_func_with_cell(): + x = None + + def func(): + return x # pragma: no cover + + return func + + if PY2: + cell = make_func_with_cell().func_closure[0] + else: + cell = make_func_with_cell().__closure__[0] + set_closure_cell(cell, 100) + if cell.cell_contents != 100: + raise AssertionError # pragma: no cover + + except Exception: + return just_warn + else: + return set_closure_cell + + +set_closure_cell = make_set_closure_cell() diff --git a/venv-linux/lib/python3.6/site-packages/attr/_config.py b/venv-linux/lib/python3.6/site-packages/attr/_config.py new file mode 100644 index 0000000..8ec9209 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/_config.py @@ -0,0 +1,23 @@ +from __future__ import absolute_import, division, print_function + + +__all__ = ["set_run_validators", "get_run_validators"] + +_run_validators = True + + +def set_run_validators(run): + """ + Set whether or not validators are run. By default, they are run. + """ + if not isinstance(run, bool): + raise TypeError("'run' must be bool.") + global _run_validators + _run_validators = run + + +def get_run_validators(): + """ + Return whether or not validators are run. + """ + return _run_validators diff --git a/venv-linux/lib/python3.6/site-packages/attr/_funcs.py b/venv-linux/lib/python3.6/site-packages/attr/_funcs.py new file mode 100644 index 0000000..e6c930c --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/_funcs.py @@ -0,0 +1,390 @@ +from __future__ import absolute_import, division, print_function + +import copy + +from ._compat import iteritems +from ._make import NOTHING, _obj_setattr, fields +from .exceptions import AttrsAttributeNotFoundError + + +def asdict( + inst, + recurse=True, + filter=None, + dict_factory=dict, + retain_collection_types=False, + value_serializer=None, +): + """ + Return the ``attrs`` attribute values of *inst* as a dict. + + Optionally recurse into other ``attrs``-decorated classes. + + :param inst: Instance of an ``attrs``-decorated class. + :param bool recurse: Recurse into classes that are also + ``attrs``-decorated. + :param callable filter: A callable whose return code determines whether an + attribute or element is included (``True``) or dropped (``False``). Is + called with the `attr.Attribute` as the first argument and the + value as the second argument. + :param callable dict_factory: A callable to produce dictionaries from. For + example, to produce ordered dictionaries instead of normal Python + dictionaries, pass in ``collections.OrderedDict``. + :param bool retain_collection_types: Do not convert to ``list`` when + encountering an attribute whose type is ``tuple`` or ``set``. Only + meaningful if ``recurse`` is ``True``. + :param Optional[callable] value_serializer: A hook that is called for every + attribute or dict key/value. It receives the current instance, field + and value and must return the (updated) value. The hook is run *after* + the optional *filter* has been applied. + + :rtype: return type of *dict_factory* + + :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` + class. + + .. versionadded:: 16.0.0 *dict_factory* + .. versionadded:: 16.1.0 *retain_collection_types* + .. versionadded:: 20.3.0 *value_serializer* + """ + attrs = fields(inst.__class__) + rv = dict_factory() + for a in attrs: + v = getattr(inst, a.name) + if filter is not None and not filter(a, v): + continue + + if value_serializer is not None: + v = value_serializer(inst, a, v) + + if recurse is True: + if has(v.__class__): + rv[a.name] = asdict( + v, + True, + filter, + dict_factory, + retain_collection_types, + value_serializer, + ) + elif isinstance(v, (tuple, list, set, frozenset)): + cf = v.__class__ if retain_collection_types is True else list + rv[a.name] = cf( + [ + _asdict_anything( + i, + filter, + dict_factory, + retain_collection_types, + value_serializer, + ) + for i in v + ] + ) + elif isinstance(v, dict): + df = dict_factory + rv[a.name] = df( + ( + _asdict_anything( + kk, + filter, + df, + retain_collection_types, + value_serializer, + ), + _asdict_anything( + vv, + filter, + df, + retain_collection_types, + value_serializer, + ), + ) + for kk, vv in iteritems(v) + ) + else: + rv[a.name] = v + else: + rv[a.name] = v + return rv + + +def _asdict_anything( + val, + filter, + dict_factory, + retain_collection_types, + value_serializer, +): + """ + ``asdict`` only works on attrs instances, this works on anything. + """ + if getattr(val.__class__, "__attrs_attrs__", None) is not None: + # Attrs class. + rv = asdict( + val, + True, + filter, + dict_factory, + retain_collection_types, + value_serializer, + ) + elif isinstance(val, (tuple, list, set, frozenset)): + cf = val.__class__ if retain_collection_types is True else list + rv = cf( + [ + _asdict_anything( + i, + filter, + dict_factory, + retain_collection_types, + value_serializer, + ) + for i in val + ] + ) + elif isinstance(val, dict): + df = dict_factory + rv = df( + ( + _asdict_anything( + kk, filter, df, retain_collection_types, value_serializer + ), + _asdict_anything( + vv, filter, df, retain_collection_types, value_serializer + ), + ) + for kk, vv in iteritems(val) + ) + else: + rv = val + if value_serializer is not None: + rv = value_serializer(None, None, rv) + + return rv + + +def astuple( + inst, + recurse=True, + filter=None, + tuple_factory=tuple, + retain_collection_types=False, +): + """ + Return the ``attrs`` attribute values of *inst* as a tuple. + + Optionally recurse into other ``attrs``-decorated classes. + + :param inst: Instance of an ``attrs``-decorated class. + :param bool recurse: Recurse into classes that are also + ``attrs``-decorated. + :param callable filter: A callable whose return code determines whether an + attribute or element is included (``True``) or dropped (``False``). Is + called with the `attr.Attribute` as the first argument and the + value as the second argument. + :param callable tuple_factory: A callable to produce tuples from. For + example, to produce lists instead of tuples. + :param bool retain_collection_types: Do not convert to ``list`` + or ``dict`` when encountering an attribute which type is + ``tuple``, ``dict`` or ``set``. Only meaningful if ``recurse`` is + ``True``. + + :rtype: return type of *tuple_factory* + + :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` + class. + + .. versionadded:: 16.2.0 + """ + attrs = fields(inst.__class__) + rv = [] + retain = retain_collection_types # Very long. :/ + for a in attrs: + v = getattr(inst, a.name) + if filter is not None and not filter(a, v): + continue + if recurse is True: + if has(v.__class__): + rv.append( + astuple( + v, + recurse=True, + filter=filter, + tuple_factory=tuple_factory, + retain_collection_types=retain, + ) + ) + elif isinstance(v, (tuple, list, set, frozenset)): + cf = v.__class__ if retain is True else list + rv.append( + cf( + [ + astuple( + j, + recurse=True, + filter=filter, + tuple_factory=tuple_factory, + retain_collection_types=retain, + ) + if has(j.__class__) + else j + for j in v + ] + ) + ) + elif isinstance(v, dict): + df = v.__class__ if retain is True else dict + rv.append( + df( + ( + astuple( + kk, + tuple_factory=tuple_factory, + retain_collection_types=retain, + ) + if has(kk.__class__) + else kk, + astuple( + vv, + tuple_factory=tuple_factory, + retain_collection_types=retain, + ) + if has(vv.__class__) + else vv, + ) + for kk, vv in iteritems(v) + ) + ) + else: + rv.append(v) + else: + rv.append(v) + + return rv if tuple_factory is list else tuple_factory(rv) + + +def has(cls): + """ + Check whether *cls* is a class with ``attrs`` attributes. + + :param type cls: Class to introspect. + :raise TypeError: If *cls* is not a class. + + :rtype: bool + """ + return getattr(cls, "__attrs_attrs__", None) is not None + + +def assoc(inst, **changes): + """ + Copy *inst* and apply *changes*. + + :param inst: Instance of a class with ``attrs`` attributes. + :param changes: Keyword changes in the new copy. + + :return: A copy of inst with *changes* incorporated. + + :raise attr.exceptions.AttrsAttributeNotFoundError: If *attr_name* couldn't + be found on *cls*. + :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` + class. + + .. deprecated:: 17.1.0 + Use `evolve` instead. + """ + import warnings + + warnings.warn( + "assoc is deprecated and will be removed after 2018/01.", + DeprecationWarning, + stacklevel=2, + ) + new = copy.copy(inst) + attrs = fields(inst.__class__) + for k, v in iteritems(changes): + a = getattr(attrs, k, NOTHING) + if a is NOTHING: + raise AttrsAttributeNotFoundError( + "{k} is not an attrs attribute on {cl}.".format( + k=k, cl=new.__class__ + ) + ) + _obj_setattr(new, k, v) + return new + + +def evolve(inst, **changes): + """ + Create a new instance, based on *inst* with *changes* applied. + + :param inst: Instance of a class with ``attrs`` attributes. + :param changes: Keyword changes in the new copy. + + :return: A copy of inst with *changes* incorporated. + + :raise TypeError: If *attr_name* couldn't be found in the class + ``__init__``. + :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` + class. + + .. versionadded:: 17.1.0 + """ + cls = inst.__class__ + attrs = fields(cls) + for a in attrs: + if not a.init: + continue + attr_name = a.name # To deal with private attributes. + init_name = attr_name if attr_name[0] != "_" else attr_name[1:] + if init_name not in changes: + changes[init_name] = getattr(inst, attr_name) + + return cls(**changes) + + +def resolve_types(cls, globalns=None, localns=None): + """ + Resolve any strings and forward annotations in type annotations. + + This is only required if you need concrete types in `Attribute`'s *type* + field. In other words, you don't need to resolve your types if you only + use them for static type checking. + + With no arguments, names will be looked up in the module in which the class + was created. If this is not what you want, e.g. if the name only exists + inside a method, you may pass *globalns* or *localns* to specify other + dictionaries in which to look up these names. See the docs of + `typing.get_type_hints` for more details. + + :param type cls: Class to resolve. + :param Optional[dict] globalns: Dictionary containing global variables. + :param Optional[dict] localns: Dictionary containing local variables. + + :raise TypeError: If *cls* is not a class. + :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` + class. + :raise NameError: If types cannot be resolved because of missing variables. + + :returns: *cls* so you can use this function also as a class decorator. + Please note that you have to apply it **after** `attr.s`. That means + the decorator has to come in the line **before** `attr.s`. + + .. versionadded:: 20.1.0 + """ + try: + # Since calling get_type_hints is expensive we cache whether we've + # done it already. + cls.__attrs_types_resolved__ + except AttributeError: + import typing + + hints = typing.get_type_hints(cls, globalns=globalns, localns=localns) + for field in fields(cls): + if field.name in hints: + # Since fields have been frozen we must work around it. + _obj_setattr(field, "type", hints[field.name]) + cls.__attrs_types_resolved__ = True + + # Return the class so you can use it as a decorator too. + return cls diff --git a/venv-linux/lib/python3.6/site-packages/attr/_make.py b/venv-linux/lib/python3.6/site-packages/attr/_make.py new file mode 100644 index 0000000..49484f9 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/_make.py @@ -0,0 +1,2765 @@ +from __future__ import absolute_import, division, print_function + +import copy +import linecache +import sys +import threading +import uuid +import warnings + +from operator import itemgetter + +from . import _config, setters +from ._compat import ( + PY2, + PYPY, + isclass, + iteritems, + metadata_proxy, + ordered_dict, + set_closure_cell, +) +from .exceptions import ( + DefaultAlreadySetError, + FrozenInstanceError, + NotAnAttrsClassError, + PythonTooOldError, + UnannotatedAttributeError, +) + + +# This is used at least twice, so cache it here. +_obj_setattr = object.__setattr__ +_init_converter_pat = "__attr_converter_%s" +_init_factory_pat = "__attr_factory_{}" +_tuple_property_pat = ( + " {attr_name} = _attrs_property(_attrs_itemgetter({index}))" +) +_classvar_prefixes = ("typing.ClassVar", "t.ClassVar", "ClassVar") +# we don't use a double-underscore prefix because that triggers +# name mangling when trying to create a slot for the field +# (when slots=True) +_hash_cache_field = "_attrs_cached_hash" + +_empty_metadata_singleton = metadata_proxy({}) + +# Unique object for unequivocal getattr() defaults. +_sentinel = object() + + +class _Nothing(object): + """ + Sentinel class to indicate the lack of a value when ``None`` is ambiguous. + + ``_Nothing`` is a singleton. There is only ever one of it. + """ + + _singleton = None + + def __new__(cls): + if _Nothing._singleton is None: + _Nothing._singleton = super(_Nothing, cls).__new__(cls) + return _Nothing._singleton + + def __repr__(self): + return "NOTHING" + + +NOTHING = _Nothing() +""" +Sentinel to indicate the lack of a value when ``None`` is ambiguous. +""" + + +class _CacheHashWrapper(int): + """ + An integer subclass that pickles / copies as None + + This is used for non-slots classes with ``cache_hash=True``, to avoid + serializing a potentially (even likely) invalid hash value. Since ``None`` + is the default value for uncalculated hashes, whenever this is copied, + the copy's value for the hash should automatically reset. + + See GH #613 for more details. + """ + + if PY2: + # For some reason `type(None)` isn't callable in Python 2, but we don't + # actually need a constructor for None objects, we just need any + # available function that returns None. + def __reduce__(self, _none_constructor=getattr, _args=(0, "", None)): + return _none_constructor, _args + + else: + + def __reduce__(self, _none_constructor=type(None), _args=()): + return _none_constructor, _args + + +def attrib( + default=NOTHING, + validator=None, + repr=True, + cmp=None, + hash=None, + init=True, + metadata=None, + type=None, + converter=None, + factory=None, + kw_only=False, + eq=None, + order=None, + on_setattr=None, +): + """ + Create a new attribute on a class. + + .. warning:: + + Does *not* do anything unless the class is also decorated with + `attr.s`! + + :param default: A value that is used if an ``attrs``-generated ``__init__`` + is used and no value is passed while instantiating or the attribute is + excluded using ``init=False``. + + If the value is an instance of `Factory`, its callable will be + used to construct a new value (useful for mutable data types like lists + or dicts). + + If a default is not set (or set manually to `attr.NOTHING`), a value + *must* be supplied when instantiating; otherwise a `TypeError` + will be raised. + + The default can also be set using decorator notation as shown below. + + :type default: Any value + + :param callable factory: Syntactic sugar for + ``default=attr.Factory(factory)``. + + :param validator: `callable` that is called by ``attrs``-generated + ``__init__`` methods after the instance has been initialized. They + receive the initialized instance, the `Attribute`, and the + passed value. + + The return value is *not* inspected so the validator has to throw an + exception itself. + + If a `list` is passed, its items are treated as validators and must + all pass. + + Validators can be globally disabled and re-enabled using + `get_run_validators`. + + The validator can also be set using decorator notation as shown below. + + :type validator: `callable` or a `list` of `callable`\\ s. + + :param repr: Include this attribute in the generated ``__repr__`` + method. If ``True``, include the attribute; if ``False``, omit it. By + default, the built-in ``repr()`` function is used. To override how the + attribute value is formatted, pass a ``callable`` that takes a single + value and returns a string. Note that the resulting string is used + as-is, i.e. it will be used directly *instead* of calling ``repr()`` + (the default). + :type repr: a `bool` or a `callable` to use a custom function. + :param bool eq: If ``True`` (default), include this attribute in the + generated ``__eq__`` and ``__ne__`` methods that check two instances + for equality. + :param bool order: If ``True`` (default), include this attributes in the + generated ``__lt__``, ``__le__``, ``__gt__`` and ``__ge__`` methods. + :param bool cmp: Setting to ``True`` is equivalent to setting ``eq=True, + order=True``. Deprecated in favor of *eq* and *order*. + :param Optional[bool] hash: Include this attribute in the generated + ``__hash__`` method. If ``None`` (default), mirror *eq*'s value. This + is the correct behavior according the Python spec. Setting this value + to anything else than ``None`` is *discouraged*. + :param bool init: Include this attribute in the generated ``__init__`` + method. It is possible to set this to ``False`` and set a default + value. In that case this attributed is unconditionally initialized + with the specified default value or factory. + :param callable converter: `callable` that is called by + ``attrs``-generated ``__init__`` methods to convert attribute's value + to the desired format. It is given the passed-in value, and the + returned value will be used as the new value of the attribute. The + value is converted before being passed to the validator, if any. + :param metadata: An arbitrary mapping, to be used by third-party + components. See `extending_metadata`. + :param type: The type of the attribute. In Python 3.6 or greater, the + preferred method to specify the type is using a variable annotation + (see `PEP 526 `_). + This argument is provided for backward compatibility. + Regardless of the approach used, the type will be stored on + ``Attribute.type``. + + Please note that ``attrs`` doesn't do anything with this metadata by + itself. You can use it as part of your own code or for + `static type checking `. + :param kw_only: Make this attribute keyword-only (Python 3+) + in the generated ``__init__`` (if ``init`` is ``False``, this + parameter is ignored). + :param on_setattr: Allows to overwrite the *on_setattr* setting from + `attr.s`. If left `None`, the *on_setattr* value from `attr.s` is used. + Set to `attr.setters.NO_OP` to run **no** `setattr` hooks for this + attribute -- regardless of the setting in `attr.s`. + :type on_setattr: `callable`, or a list of callables, or `None`, or + `attr.setters.NO_OP` + + .. versionadded:: 15.2.0 *convert* + .. versionadded:: 16.3.0 *metadata* + .. versionchanged:: 17.1.0 *validator* can be a ``list`` now. + .. versionchanged:: 17.1.0 + *hash* is ``None`` and therefore mirrors *eq* by default. + .. versionadded:: 17.3.0 *type* + .. deprecated:: 17.4.0 *convert* + .. versionadded:: 17.4.0 *converter* as a replacement for the deprecated + *convert* to achieve consistency with other noun-based arguments. + .. versionadded:: 18.1.0 + ``factory=f`` is syntactic sugar for ``default=attr.Factory(f)``. + .. versionadded:: 18.2.0 *kw_only* + .. versionchanged:: 19.2.0 *convert* keyword argument removed + .. versionchanged:: 19.2.0 *repr* also accepts a custom callable. + .. deprecated:: 19.2.0 *cmp* Removal on or after 2021-06-01. + .. versionadded:: 19.2.0 *eq* and *order* + .. versionadded:: 20.1.0 *on_setattr* + .. versionchanged:: 20.3.0 *kw_only* backported to Python 2 + """ + eq, order = _determine_eq_order(cmp, eq, order, True) + + if hash is not None and hash is not True and hash is not False: + raise TypeError( + "Invalid value for hash. Must be True, False, or None." + ) + + if factory is not None: + if default is not NOTHING: + raise ValueError( + "The `default` and `factory` arguments are mutually " + "exclusive." + ) + if not callable(factory): + raise ValueError("The `factory` argument must be a callable.") + default = Factory(factory) + + if metadata is None: + metadata = {} + + # Apply syntactic sugar by auto-wrapping. + if isinstance(on_setattr, (list, tuple)): + on_setattr = setters.pipe(*on_setattr) + + if validator and isinstance(validator, (list, tuple)): + validator = and_(*validator) + + if converter and isinstance(converter, (list, tuple)): + converter = pipe(*converter) + + return _CountingAttr( + default=default, + validator=validator, + repr=repr, + cmp=None, + hash=hash, + init=init, + converter=converter, + metadata=metadata, + type=type, + kw_only=kw_only, + eq=eq, + order=order, + on_setattr=on_setattr, + ) + + +def _make_attr_tuple_class(cls_name, attr_names): + """ + Create a tuple subclass to hold `Attribute`s for an `attrs` class. + + The subclass is a bare tuple with properties for names. + + class MyClassAttributes(tuple): + __slots__ = () + x = property(itemgetter(0)) + """ + attr_class_name = "{}Attributes".format(cls_name) + attr_class_template = [ + "class {}(tuple):".format(attr_class_name), + " __slots__ = ()", + ] + if attr_names: + for i, attr_name in enumerate(attr_names): + attr_class_template.append( + _tuple_property_pat.format(index=i, attr_name=attr_name) + ) + else: + attr_class_template.append(" pass") + globs = {"_attrs_itemgetter": itemgetter, "_attrs_property": property} + eval(compile("\n".join(attr_class_template), "", "exec"), globs) + + return globs[attr_class_name] + + +# Tuple class for extracted attributes from a class definition. +# `base_attrs` is a subset of `attrs`. +_Attributes = _make_attr_tuple_class( + "_Attributes", + [ + # all attributes to build dunder methods for + "attrs", + # attributes that have been inherited + "base_attrs", + # map inherited attributes to their originating classes + "base_attrs_map", + ], +) + + +def _is_class_var(annot): + """ + Check whether *annot* is a typing.ClassVar. + + The string comparison hack is used to avoid evaluating all string + annotations which would put attrs-based classes at a performance + disadvantage compared to plain old classes. + """ + return str(annot).startswith(_classvar_prefixes) + + +def _has_own_attribute(cls, attrib_name): + """ + Check whether *cls* defines *attrib_name* (and doesn't just inherit it). + + Requires Python 3. + """ + attr = getattr(cls, attrib_name, _sentinel) + if attr is _sentinel: + return False + + for base_cls in cls.__mro__[1:]: + a = getattr(base_cls, attrib_name, None) + if attr is a: + return False + + return True + + +def _get_annotations(cls): + """ + Get annotations for *cls*. + """ + if _has_own_attribute(cls, "__annotations__"): + return cls.__annotations__ + + return {} + + +def _counter_getter(e): + """ + Key function for sorting to avoid re-creating a lambda for every class. + """ + return e[1].counter + + +def _collect_base_attrs(cls, taken_attr_names): + """ + Collect attr.ibs from base classes of *cls*, except *taken_attr_names*. + """ + base_attrs = [] + base_attr_map = {} # A dictionary of base attrs to their classes. + + # Traverse the MRO and collect attributes. + for base_cls in reversed(cls.__mro__[1:-1]): + for a in getattr(base_cls, "__attrs_attrs__", []): + if a.inherited or a.name in taken_attr_names: + continue + + a = a.evolve(inherited=True) + base_attrs.append(a) + base_attr_map[a.name] = base_cls + + # For each name, only keep the freshest definition i.e. the furthest at the + # back. base_attr_map is fine because it gets overwritten with every new + # instance. + filtered = [] + seen = set() + for a in reversed(base_attrs): + if a.name in seen: + continue + filtered.insert(0, a) + seen.add(a.name) + + return filtered, base_attr_map + + +def _collect_base_attrs_broken(cls, taken_attr_names): + """ + Collect attr.ibs from base classes of *cls*, except *taken_attr_names*. + + N.B. *taken_attr_names* will be mutated. + + Adhere to the old incorrect behavior. + + Notably it collects from the front and considers inherited attributes which + leads to the buggy behavior reported in #428. + """ + base_attrs = [] + base_attr_map = {} # A dictionary of base attrs to their classes. + + # Traverse the MRO and collect attributes. + for base_cls in cls.__mro__[1:-1]: + for a in getattr(base_cls, "__attrs_attrs__", []): + if a.name in taken_attr_names: + continue + + a = a.evolve(inherited=True) + taken_attr_names.add(a.name) + base_attrs.append(a) + base_attr_map[a.name] = base_cls + + return base_attrs, base_attr_map + + +def _transform_attrs( + cls, these, auto_attribs, kw_only, collect_by_mro, field_transformer +): + """ + Transform all `_CountingAttr`s on a class into `Attribute`s. + + If *these* is passed, use that and don't look for them on the class. + + *collect_by_mro* is True, collect them in the correct MRO order, otherwise + use the old -- incorrect -- order. See #428. + + Return an `_Attributes`. + """ + cd = cls.__dict__ + anns = _get_annotations(cls) + + if these is not None: + ca_list = [(name, ca) for name, ca in iteritems(these)] + + if not isinstance(these, ordered_dict): + ca_list.sort(key=_counter_getter) + elif auto_attribs is True: + ca_names = { + name + for name, attr in cd.items() + if isinstance(attr, _CountingAttr) + } + ca_list = [] + annot_names = set() + for attr_name, type in anns.items(): + if _is_class_var(type): + continue + annot_names.add(attr_name) + a = cd.get(attr_name, NOTHING) + + if not isinstance(a, _CountingAttr): + if a is NOTHING: + a = attrib() + else: + a = attrib(default=a) + ca_list.append((attr_name, a)) + + unannotated = ca_names - annot_names + if len(unannotated) > 0: + raise UnannotatedAttributeError( + "The following `attr.ib`s lack a type annotation: " + + ", ".join( + sorted(unannotated, key=lambda n: cd.get(n).counter) + ) + + "." + ) + else: + ca_list = sorted( + ( + (name, attr) + for name, attr in cd.items() + if isinstance(attr, _CountingAttr) + ), + key=lambda e: e[1].counter, + ) + + own_attrs = [ + Attribute.from_counting_attr( + name=attr_name, ca=ca, type=anns.get(attr_name) + ) + for attr_name, ca in ca_list + ] + + if collect_by_mro: + base_attrs, base_attr_map = _collect_base_attrs( + cls, {a.name for a in own_attrs} + ) + else: + base_attrs, base_attr_map = _collect_base_attrs_broken( + cls, {a.name for a in own_attrs} + ) + + attr_names = [a.name for a in base_attrs + own_attrs] + + AttrsClass = _make_attr_tuple_class(cls.__name__, attr_names) + + if kw_only: + own_attrs = [a.evolve(kw_only=True) for a in own_attrs] + base_attrs = [a.evolve(kw_only=True) for a in base_attrs] + + attrs = AttrsClass(base_attrs + own_attrs) + + # Mandatory vs non-mandatory attr order only matters when they are part of + # the __init__ signature and when they aren't kw_only (which are moved to + # the end and can be mandatory or non-mandatory in any order, as they will + # be specified as keyword args anyway). Check the order of those attrs: + had_default = False + for a in (a for a in attrs if a.init is not False and a.kw_only is False): + if had_default is True and a.default is NOTHING: + raise ValueError( + "No mandatory attributes allowed after an attribute with a " + "default value or factory. Attribute in question: %r" % (a,) + ) + + if had_default is False and a.default is not NOTHING: + had_default = True + + if field_transformer is not None: + attrs = field_transformer(cls, attrs) + return _Attributes((attrs, base_attrs, base_attr_map)) + + +if PYPY: + + def _frozen_setattrs(self, name, value): + """ + Attached to frozen classes as __setattr__. + """ + if isinstance(self, BaseException) and name in ( + "__cause__", + "__context__", + ): + BaseException.__setattr__(self, name, value) + return + + raise FrozenInstanceError() + + +else: + + def _frozen_setattrs(self, name, value): + """ + Attached to frozen classes as __setattr__. + """ + raise FrozenInstanceError() + + +def _frozen_delattrs(self, name): + """ + Attached to frozen classes as __delattr__. + """ + raise FrozenInstanceError() + + +class _ClassBuilder(object): + """ + Iteratively build *one* class. + """ + + __slots__ = ( + "_attr_names", + "_attrs", + "_base_attr_map", + "_base_names", + "_cache_hash", + "_cls", + "_cls_dict", + "_delete_attribs", + "_frozen", + "_has_post_init", + "_is_exc", + "_on_setattr", + "_slots", + "_weakref_slot", + "_has_own_setattr", + "_has_custom_setattr", + ) + + def __init__( + self, + cls, + these, + slots, + frozen, + weakref_slot, + getstate_setstate, + auto_attribs, + kw_only, + cache_hash, + is_exc, + collect_by_mro, + on_setattr, + has_custom_setattr, + field_transformer, + ): + attrs, base_attrs, base_map = _transform_attrs( + cls, + these, + auto_attribs, + kw_only, + collect_by_mro, + field_transformer, + ) + + self._cls = cls + self._cls_dict = dict(cls.__dict__) if slots else {} + self._attrs = attrs + self._base_names = set(a.name for a in base_attrs) + self._base_attr_map = base_map + self._attr_names = tuple(a.name for a in attrs) + self._slots = slots + self._frozen = frozen + self._weakref_slot = weakref_slot + self._cache_hash = cache_hash + self._has_post_init = bool(getattr(cls, "__attrs_post_init__", False)) + self._delete_attribs = not bool(these) + self._is_exc = is_exc + self._on_setattr = on_setattr + + self._has_custom_setattr = has_custom_setattr + self._has_own_setattr = False + + self._cls_dict["__attrs_attrs__"] = self._attrs + + if frozen: + self._cls_dict["__setattr__"] = _frozen_setattrs + self._cls_dict["__delattr__"] = _frozen_delattrs + + self._has_own_setattr = True + + if getstate_setstate: + ( + self._cls_dict["__getstate__"], + self._cls_dict["__setstate__"], + ) = self._make_getstate_setstate() + + def __repr__(self): + return "<_ClassBuilder(cls={cls})>".format(cls=self._cls.__name__) + + def build_class(self): + """ + Finalize class based on the accumulated configuration. + + Builder cannot be used after calling this method. + """ + if self._slots is True: + return self._create_slots_class() + else: + return self._patch_original_class() + + def _patch_original_class(self): + """ + Apply accumulated methods and return the class. + """ + cls = self._cls + base_names = self._base_names + + # Clean class of attribute definitions (`attr.ib()`s). + if self._delete_attribs: + for name in self._attr_names: + if ( + name not in base_names + and getattr(cls, name, _sentinel) is not _sentinel + ): + try: + delattr(cls, name) + except AttributeError: + # This can happen if a base class defines a class + # variable and we want to set an attribute with the + # same name by using only a type annotation. + pass + + # Attach our dunder methods. + for name, value in self._cls_dict.items(): + setattr(cls, name, value) + + # If we've inherited an attrs __setattr__ and don't write our own, + # reset it to object's. + if not self._has_own_setattr and getattr( + cls, "__attrs_own_setattr__", False + ): + cls.__attrs_own_setattr__ = False + + if not self._has_custom_setattr: + cls.__setattr__ = object.__setattr__ + + return cls + + def _create_slots_class(self): + """ + Build and return a new class with a `__slots__` attribute. + """ + base_names = self._base_names + cd = { + k: v + for k, v in iteritems(self._cls_dict) + if k not in tuple(self._attr_names) + ("__dict__", "__weakref__") + } + + # If our class doesn't have its own implementation of __setattr__ + # (either from the user or by us), check the bases, if one of them has + # an attrs-made __setattr__, that needs to be reset. We don't walk the + # MRO because we only care about our immediate base classes. + # XXX: This can be confused by subclassing a slotted attrs class with + # XXX: a non-attrs class and subclass the resulting class with an attrs + # XXX: class. See `test_slotted_confused` for details. For now that's + # XXX: OK with us. + if not self._has_own_setattr: + cd["__attrs_own_setattr__"] = False + + if not self._has_custom_setattr: + for base_cls in self._cls.__bases__: + if base_cls.__dict__.get("__attrs_own_setattr__", False): + cd["__setattr__"] = object.__setattr__ + break + + # Traverse the MRO to check for an existing __weakref__. + weakref_inherited = False + for base_cls in self._cls.__mro__[1:-1]: + if base_cls.__dict__.get("__weakref__", None) is not None: + weakref_inherited = True + break + + names = self._attr_names + if ( + self._weakref_slot + and "__weakref__" not in getattr(self._cls, "__slots__", ()) + and "__weakref__" not in names + and not weakref_inherited + ): + names += ("__weakref__",) + + # We only add the names of attributes that aren't inherited. + # Setting __slots__ to inherited attributes wastes memory. + slot_names = [name for name in names if name not in base_names] + if self._cache_hash: + slot_names.append(_hash_cache_field) + cd["__slots__"] = tuple(slot_names) + + qualname = getattr(self._cls, "__qualname__", None) + if qualname is not None: + cd["__qualname__"] = qualname + + # Create new class based on old class and our methods. + cls = type(self._cls)(self._cls.__name__, self._cls.__bases__, cd) + + # The following is a fix for + # https://github.com/python-attrs/attrs/issues/102. On Python 3, + # if a method mentions `__class__` or uses the no-arg super(), the + # compiler will bake a reference to the class in the method itself + # as `method.__closure__`. Since we replace the class with a + # clone, we rewrite these references so it keeps working. + for item in cls.__dict__.values(): + if isinstance(item, (classmethod, staticmethod)): + # Class- and staticmethods hide their functions inside. + # These might need to be rewritten as well. + closure_cells = getattr(item.__func__, "__closure__", None) + else: + closure_cells = getattr(item, "__closure__", None) + + if not closure_cells: # Catch None or the empty list. + continue + for cell in closure_cells: + try: + match = cell.cell_contents is self._cls + except ValueError: # ValueError: Cell is empty + pass + else: + if match: + set_closure_cell(cell, cls) + + return cls + + def add_repr(self, ns): + self._cls_dict["__repr__"] = self._add_method_dunders( + _make_repr(self._attrs, ns=ns) + ) + return self + + def add_str(self): + repr = self._cls_dict.get("__repr__") + if repr is None: + raise ValueError( + "__str__ can only be generated if a __repr__ exists." + ) + + def __str__(self): + return self.__repr__() + + self._cls_dict["__str__"] = self._add_method_dunders(__str__) + return self + + def _make_getstate_setstate(self): + """ + Create custom __setstate__ and __getstate__ methods. + """ + # __weakref__ is not writable. + state_attr_names = tuple( + an for an in self._attr_names if an != "__weakref__" + ) + + def slots_getstate(self): + """ + Automatically created by attrs. + """ + return tuple(getattr(self, name) for name in state_attr_names) + + hash_caching_enabled = self._cache_hash + + def slots_setstate(self, state): + """ + Automatically created by attrs. + """ + __bound_setattr = _obj_setattr.__get__(self, Attribute) + for name, value in zip(state_attr_names, state): + __bound_setattr(name, value) + + # The hash code cache is not included when the object is + # serialized, but it still needs to be initialized to None to + # indicate that the first call to __hash__ should be a cache + # miss. + if hash_caching_enabled: + __bound_setattr(_hash_cache_field, None) + + return slots_getstate, slots_setstate + + def make_unhashable(self): + self._cls_dict["__hash__"] = None + return self + + def add_hash(self): + self._cls_dict["__hash__"] = self._add_method_dunders( + _make_hash( + self._cls, + self._attrs, + frozen=self._frozen, + cache_hash=self._cache_hash, + ) + ) + + return self + + def add_init(self): + self._cls_dict["__init__"] = self._add_method_dunders( + _make_init( + self._cls, + self._attrs, + self._has_post_init, + self._frozen, + self._slots, + self._cache_hash, + self._base_attr_map, + self._is_exc, + self._on_setattr is not None + and self._on_setattr is not setters.NO_OP, + ) + ) + + return self + + def add_eq(self): + cd = self._cls_dict + + cd["__eq__"] = self._add_method_dunders( + _make_eq(self._cls, self._attrs) + ) + cd["__ne__"] = self._add_method_dunders(_make_ne()) + + return self + + def add_order(self): + cd = self._cls_dict + + cd["__lt__"], cd["__le__"], cd["__gt__"], cd["__ge__"] = ( + self._add_method_dunders(meth) + for meth in _make_order(self._cls, self._attrs) + ) + + return self + + def add_setattr(self): + if self._frozen: + return self + + sa_attrs = {} + for a in self._attrs: + on_setattr = a.on_setattr or self._on_setattr + if on_setattr and on_setattr is not setters.NO_OP: + sa_attrs[a.name] = a, on_setattr + + if not sa_attrs: + return self + + if self._has_custom_setattr: + # We need to write a __setattr__ but there already is one! + raise ValueError( + "Can't combine custom __setattr__ with on_setattr hooks." + ) + + # docstring comes from _add_method_dunders + def __setattr__(self, name, val): + try: + a, hook = sa_attrs[name] + except KeyError: + nval = val + else: + nval = hook(self, a, val) + + _obj_setattr(self, name, nval) + + self._cls_dict["__attrs_own_setattr__"] = True + self._cls_dict["__setattr__"] = self._add_method_dunders(__setattr__) + self._has_own_setattr = True + + return self + + def _add_method_dunders(self, method): + """ + Add __module__ and __qualname__ to a *method* if possible. + """ + try: + method.__module__ = self._cls.__module__ + except AttributeError: + pass + + try: + method.__qualname__ = ".".join( + (self._cls.__qualname__, method.__name__) + ) + except AttributeError: + pass + + try: + method.__doc__ = "Method generated by attrs for class %s." % ( + self._cls.__qualname__, + ) + except AttributeError: + pass + + return method + + +_CMP_DEPRECATION = ( + "The usage of `cmp` is deprecated and will be removed on or after " + "2021-06-01. Please use `eq` and `order` instead." +) + + +def _determine_eq_order(cmp, eq, order, default_eq): + """ + Validate the combination of *cmp*, *eq*, and *order*. Derive the effective + values of eq and order. If *eq* is None, set it to *default_eq*. + """ + if cmp is not None and any((eq is not None, order is not None)): + raise ValueError("Don't mix `cmp` with `eq' and `order`.") + + # cmp takes precedence due to bw-compatibility. + if cmp is not None: + warnings.warn(_CMP_DEPRECATION, DeprecationWarning, stacklevel=3) + + return cmp, cmp + + # If left None, equality is set to the specified default and ordering + # mirrors equality. + if eq is None: + eq = default_eq + + if order is None: + order = eq + + if eq is False and order is True: + raise ValueError("`order` can only be True if `eq` is True too.") + + return eq, order + + +def _determine_whether_to_implement( + cls, flag, auto_detect, dunders, default=True +): + """ + Check whether we should implement a set of methods for *cls*. + + *flag* is the argument passed into @attr.s like 'init', *auto_detect* the + same as passed into @attr.s and *dunders* is a tuple of attribute names + whose presence signal that the user has implemented it themselves. + + Return *default* if no reason for either for or against is found. + + auto_detect must be False on Python 2. + """ + if flag is True or flag is False: + return flag + + if flag is None and auto_detect is False: + return default + + # Logically, flag is None and auto_detect is True here. + for dunder in dunders: + if _has_own_attribute(cls, dunder): + return False + + return default + + +def attrs( + maybe_cls=None, + these=None, + repr_ns=None, + repr=None, + cmp=None, + hash=None, + init=None, + slots=False, + frozen=False, + weakref_slot=True, + str=False, + auto_attribs=False, + kw_only=False, + cache_hash=False, + auto_exc=False, + eq=None, + order=None, + auto_detect=False, + collect_by_mro=False, + getstate_setstate=None, + on_setattr=None, + field_transformer=None, +): + r""" + A class decorator that adds `dunder + `_\ -methods according to the + specified attributes using `attr.ib` or the *these* argument. + + :param these: A dictionary of name to `attr.ib` mappings. This is + useful to avoid the definition of your attributes within the class body + because you can't (e.g. if you want to add ``__repr__`` methods to + Django models) or don't want to. + + If *these* is not ``None``, ``attrs`` will *not* search the class body + for attributes and will *not* remove any attributes from it. + + If *these* is an ordered dict (`dict` on Python 3.6+, + `collections.OrderedDict` otherwise), the order is deduced from + the order of the attributes inside *these*. Otherwise the order + of the definition of the attributes is used. + + :type these: `dict` of `str` to `attr.ib` + + :param str repr_ns: When using nested classes, there's no way in Python 2 + to automatically detect that. Therefore it's possible to set the + namespace explicitly for a more meaningful ``repr`` output. + :param bool auto_detect: Instead of setting the *init*, *repr*, *eq*, + *order*, and *hash* arguments explicitly, assume they are set to + ``True`` **unless any** of the involved methods for one of the + arguments is implemented in the *current* class (i.e. it is *not* + inherited from some base class). + + So for example by implementing ``__eq__`` on a class yourself, + ``attrs`` will deduce ``eq=False`` and won't create *neither* + ``__eq__`` *nor* ``__ne__`` (but Python classes come with a sensible + ``__ne__`` by default, so it *should* be enough to only implement + ``__eq__`` in most cases). + + .. warning:: + + If you prevent ``attrs`` from creating the ordering methods for you + (``order=False``, e.g. by implementing ``__le__``), it becomes + *your* responsibility to make sure its ordering is sound. The best + way is to use the `functools.total_ordering` decorator. + + + Passing ``True`` or ``False`` to *init*, *repr*, *eq*, *order*, + *cmp*, or *hash* overrides whatever *auto_detect* would determine. + + *auto_detect* requires Python 3. Setting it ``True`` on Python 2 raises + a `PythonTooOldError`. + + :param bool repr: Create a ``__repr__`` method with a human readable + representation of ``attrs`` attributes.. + :param bool str: Create a ``__str__`` method that is identical to + ``__repr__``. This is usually not necessary except for + `Exception`\ s. + :param Optional[bool] eq: If ``True`` or ``None`` (default), add ``__eq__`` + and ``__ne__`` methods that check two instances for equality. + + They compare the instances as if they were tuples of their ``attrs`` + attributes if and only if the types of both classes are *identical*! + :param Optional[bool] order: If ``True``, add ``__lt__``, ``__le__``, + ``__gt__``, and ``__ge__`` methods that behave like *eq* above and + allow instances to be ordered. If ``None`` (default) mirror value of + *eq*. + :param Optional[bool] cmp: Setting to ``True`` is equivalent to setting + ``eq=True, order=True``. Deprecated in favor of *eq* and *order*, has + precedence over them for backward-compatibility though. Must not be + mixed with *eq* or *order*. + :param Optional[bool] hash: If ``None`` (default), the ``__hash__`` method + is generated according how *eq* and *frozen* are set. + + 1. If *both* are True, ``attrs`` will generate a ``__hash__`` for you. + 2. If *eq* is True and *frozen* is False, ``__hash__`` will be set to + None, marking it unhashable (which it is). + 3. If *eq* is False, ``__hash__`` will be left untouched meaning the + ``__hash__`` method of the base class will be used (if base class is + ``object``, this means it will fall back to id-based hashing.). + + Although not recommended, you can decide for yourself and force + ``attrs`` to create one (e.g. if the class is immutable even though you + didn't freeze it programmatically) by passing ``True`` or not. Both of + these cases are rather special and should be used carefully. + + See our documentation on `hashing`, Python's documentation on + `object.__hash__`, and the `GitHub issue that led to the default \ + behavior `_ for more + details. + :param bool init: Create a ``__init__`` method that initializes the + ``attrs`` attributes. Leading underscores are stripped for the + argument name. If a ``__attrs_post_init__`` method exists on the + class, it will be called after the class is fully initialized. + :param bool slots: Create a `slotted class ` that's more + memory-efficient. Slotted classes are generally superior to the default + dict classes, but have some gotchas you should know about, so we + encourage you to read the `glossary entry `. + :param bool frozen: Make instances immutable after initialization. If + someone attempts to modify a frozen instance, + `attr.exceptions.FrozenInstanceError` is raised. + + .. note:: + + 1. This is achieved by installing a custom ``__setattr__`` method + on your class, so you can't implement your own. + + 2. True immutability is impossible in Python. + + 3. This *does* have a minor a runtime performance `impact + ` when initializing new instances. In other words: + ``__init__`` is slightly slower with ``frozen=True``. + + 4. If a class is frozen, you cannot modify ``self`` in + ``__attrs_post_init__`` or a self-written ``__init__``. You can + circumvent that limitation by using + ``object.__setattr__(self, "attribute_name", value)``. + + 5. Subclasses of a frozen class are frozen too. + + :param bool weakref_slot: Make instances weak-referenceable. This has no + effect unless ``slots`` is also enabled. + :param bool auto_attribs: If ``True``, collect `PEP 526`_-annotated + attributes (Python 3.6 and later only) from the class body. + + In this case, you **must** annotate every field. If ``attrs`` + encounters a field that is set to an `attr.ib` but lacks a type + annotation, an `attr.exceptions.UnannotatedAttributeError` is + raised. Use ``field_name: typing.Any = attr.ib(...)`` if you don't + want to set a type. + + If you assign a value to those attributes (e.g. ``x: int = 42``), that + value becomes the default value like if it were passed using + ``attr.ib(default=42)``. Passing an instance of `Factory` also + works as expected. + + Attributes annotated as `typing.ClassVar`, and attributes that are + neither annotated nor set to an `attr.ib` are **ignored**. + + .. _`PEP 526`: https://www.python.org/dev/peps/pep-0526/ + :param bool kw_only: Make all attributes keyword-only (Python 3+) + in the generated ``__init__`` (if ``init`` is ``False``, this + parameter is ignored). + :param bool cache_hash: Ensure that the object's hash code is computed + only once and stored on the object. If this is set to ``True``, + hashing must be either explicitly or implicitly enabled for this + class. If the hash code is cached, avoid any reassignments of + fields involved in hash code computation or mutations of the objects + those fields point to after object creation. If such changes occur, + the behavior of the object's hash code is undefined. + :param bool auto_exc: If the class subclasses `BaseException` + (which implicitly includes any subclass of any exception), the + following happens to behave like a well-behaved Python exceptions + class: + + - the values for *eq*, *order*, and *hash* are ignored and the + instances compare and hash by the instance's ids (N.B. ``attrs`` will + *not* remove existing implementations of ``__hash__`` or the equality + methods. It just won't add own ones.), + - all attributes that are either passed into ``__init__`` or have a + default value are additionally available as a tuple in the ``args`` + attribute, + - the value of *str* is ignored leaving ``__str__`` to base classes. + :param bool collect_by_mro: Setting this to `True` fixes the way ``attrs`` + collects attributes from base classes. The default behavior is + incorrect in certain cases of multiple inheritance. It should be on by + default but is kept off for backward-compatability. + + See issue `#428 `_ for + more details. + + :param Optional[bool] getstate_setstate: + .. note:: + This is usually only interesting for slotted classes and you should + probably just set *auto_detect* to `True`. + + If `True`, ``__getstate__`` and + ``__setstate__`` are generated and attached to the class. This is + necessary for slotted classes to be pickleable. If left `None`, it's + `True` by default for slotted classes and ``False`` for dict classes. + + If *auto_detect* is `True`, and *getstate_setstate* is left `None`, + and **either** ``__getstate__`` or ``__setstate__`` is detected directly + on the class (i.e. not inherited), it is set to `False` (this is usually + what you want). + + :param on_setattr: A callable that is run whenever the user attempts to set + an attribute (either by assignment like ``i.x = 42`` or by using + `setattr` like ``setattr(i, "x", 42)``). It receives the same arguments + as validators: the instance, the attribute that is being modified, and + the new value. + + If no exception is raised, the attribute is set to the return value of + the callable. + + If a list of callables is passed, they're automatically wrapped in an + `attr.setters.pipe`. + + :param Optional[callable] field_transformer: + A function that is called with the original class object and all + fields right before ``attrs`` finalizes the class. You can use + this, e.g., to automatically add converters or validators to + fields based on their types. See `transform-fields` for more details. + + .. versionadded:: 16.0.0 *slots* + .. versionadded:: 16.1.0 *frozen* + .. versionadded:: 16.3.0 *str* + .. versionadded:: 16.3.0 Support for ``__attrs_post_init__``. + .. versionchanged:: 17.1.0 + *hash* supports ``None`` as value which is also the default now. + .. versionadded:: 17.3.0 *auto_attribs* + .. versionchanged:: 18.1.0 + If *these* is passed, no attributes are deleted from the class body. + .. versionchanged:: 18.1.0 If *these* is ordered, the order is retained. + .. versionadded:: 18.2.0 *weakref_slot* + .. deprecated:: 18.2.0 + ``__lt__``, ``__le__``, ``__gt__``, and ``__ge__`` now raise a + `DeprecationWarning` if the classes compared are subclasses of + each other. ``__eq`` and ``__ne__`` never tried to compared subclasses + to each other. + .. versionchanged:: 19.2.0 + ``__lt__``, ``__le__``, ``__gt__``, and ``__ge__`` now do not consider + subclasses comparable anymore. + .. versionadded:: 18.2.0 *kw_only* + .. versionadded:: 18.2.0 *cache_hash* + .. versionadded:: 19.1.0 *auto_exc* + .. deprecated:: 19.2.0 *cmp* Removal on or after 2021-06-01. + .. versionadded:: 19.2.0 *eq* and *order* + .. versionadded:: 20.1.0 *auto_detect* + .. versionadded:: 20.1.0 *collect_by_mro* + .. versionadded:: 20.1.0 *getstate_setstate* + .. versionadded:: 20.1.0 *on_setattr* + .. versionadded:: 20.3.0 *field_transformer* + """ + if auto_detect and PY2: + raise PythonTooOldError( + "auto_detect only works on Python 3 and later." + ) + + eq_, order_ = _determine_eq_order(cmp, eq, order, None) + hash_ = hash # work around the lack of nonlocal + + if isinstance(on_setattr, (list, tuple)): + on_setattr = setters.pipe(*on_setattr) + + def wrap(cls): + + if getattr(cls, "__class__", None) is None: + raise TypeError("attrs only works with new-style classes.") + + is_frozen = frozen or _has_frozen_base_class(cls) + is_exc = auto_exc is True and issubclass(cls, BaseException) + has_own_setattr = auto_detect and _has_own_attribute( + cls, "__setattr__" + ) + + if has_own_setattr and is_frozen: + raise ValueError("Can't freeze a class with a custom __setattr__.") + + builder = _ClassBuilder( + cls, + these, + slots, + is_frozen, + weakref_slot, + _determine_whether_to_implement( + cls, + getstate_setstate, + auto_detect, + ("__getstate__", "__setstate__"), + default=slots, + ), + auto_attribs, + kw_only, + cache_hash, + is_exc, + collect_by_mro, + on_setattr, + has_own_setattr, + field_transformer, + ) + if _determine_whether_to_implement( + cls, repr, auto_detect, ("__repr__",) + ): + builder.add_repr(repr_ns) + if str is True: + builder.add_str() + + eq = _determine_whether_to_implement( + cls, eq_, auto_detect, ("__eq__", "__ne__") + ) + if not is_exc and eq is True: + builder.add_eq() + if not is_exc and _determine_whether_to_implement( + cls, order_, auto_detect, ("__lt__", "__le__", "__gt__", "__ge__") + ): + builder.add_order() + + builder.add_setattr() + + if ( + hash_ is None + and auto_detect is True + and _has_own_attribute(cls, "__hash__") + ): + hash = False + else: + hash = hash_ + if hash is not True and hash is not False and hash is not None: + # Can't use `hash in` because 1 == True for example. + raise TypeError( + "Invalid value for hash. Must be True, False, or None." + ) + elif hash is False or (hash is None and eq is False) or is_exc: + # Don't do anything. Should fall back to __object__'s __hash__ + # which is by id. + if cache_hash: + raise TypeError( + "Invalid value for cache_hash. To use hash caching," + " hashing must be either explicitly or implicitly " + "enabled." + ) + elif hash is True or ( + hash is None and eq is True and is_frozen is True + ): + # Build a __hash__ if told so, or if it's safe. + builder.add_hash() + else: + # Raise TypeError on attempts to hash. + if cache_hash: + raise TypeError( + "Invalid value for cache_hash. To use hash caching," + " hashing must be either explicitly or implicitly " + "enabled." + ) + builder.make_unhashable() + + if _determine_whether_to_implement( + cls, init, auto_detect, ("__init__",) + ): + builder.add_init() + else: + if cache_hash: + raise TypeError( + "Invalid value for cache_hash. To use hash caching," + " init must be True." + ) + + return builder.build_class() + + # maybe_cls's type depends on the usage of the decorator. It's a class + # if it's used as `@attrs` but ``None`` if used as `@attrs()`. + if maybe_cls is None: + return wrap + else: + return wrap(maybe_cls) + + +_attrs = attrs +""" +Internal alias so we can use it in functions that take an argument called +*attrs*. +""" + + +if PY2: + + def _has_frozen_base_class(cls): + """ + Check whether *cls* has a frozen ancestor by looking at its + __setattr__. + """ + return ( + getattr(cls.__setattr__, "__module__", None) + == _frozen_setattrs.__module__ + and cls.__setattr__.__name__ == _frozen_setattrs.__name__ + ) + + +else: + + def _has_frozen_base_class(cls): + """ + Check whether *cls* has a frozen ancestor by looking at its + __setattr__. + """ + return cls.__setattr__ == _frozen_setattrs + + +def _attrs_to_tuple(obj, attrs): + """ + Create a tuple of all values of *obj*'s *attrs*. + """ + return tuple(getattr(obj, a.name) for a in attrs) + + +def _generate_unique_filename(cls, func_name): + """ + Create a "filename" suitable for a function being generated. + """ + unique_id = uuid.uuid4() + extra = "" + count = 1 + + while True: + unique_filename = "".format( + func_name, + cls.__module__, + getattr(cls, "__qualname__", cls.__name__), + extra, + ) + # To handle concurrency we essentially "reserve" our spot in + # the linecache with a dummy line. The caller can then + # set this value correctly. + cache_line = (1, None, (str(unique_id),), unique_filename) + if ( + linecache.cache.setdefault(unique_filename, cache_line) + == cache_line + ): + return unique_filename + + # Looks like this spot is taken. Try again. + count += 1 + extra = "-{0}".format(count) + + +def _make_hash(cls, attrs, frozen, cache_hash): + attrs = tuple( + a for a in attrs if a.hash is True or (a.hash is None and a.eq is True) + ) + + tab = " " + + unique_filename = _generate_unique_filename(cls, "hash") + type_hash = hash(unique_filename) + + hash_def = "def __hash__(self" + hash_func = "hash((" + closing_braces = "))" + if not cache_hash: + hash_def += "):" + else: + if not PY2: + hash_def += ", *" + + hash_def += ( + ", _cache_wrapper=" + + "__import__('attr._make')._make._CacheHashWrapper):" + ) + hash_func = "_cache_wrapper(" + hash_func + closing_braces += ")" + + method_lines = [hash_def] + + def append_hash_computation_lines(prefix, indent): + """ + Generate the code for actually computing the hash code. + Below this will either be returned directly or used to compute + a value which is then cached, depending on the value of cache_hash + """ + + method_lines.extend( + [ + indent + prefix + hash_func, + indent + " %d," % (type_hash,), + ] + ) + + for a in attrs: + method_lines.append(indent + " self.%s," % a.name) + + method_lines.append(indent + " " + closing_braces) + + if cache_hash: + method_lines.append(tab + "if self.%s is None:" % _hash_cache_field) + if frozen: + append_hash_computation_lines( + "object.__setattr__(self, '%s', " % _hash_cache_field, tab * 2 + ) + method_lines.append(tab * 2 + ")") # close __setattr__ + else: + append_hash_computation_lines( + "self.%s = " % _hash_cache_field, tab * 2 + ) + method_lines.append(tab + "return self.%s" % _hash_cache_field) + else: + append_hash_computation_lines("return ", tab) + + script = "\n".join(method_lines) + globs = {} + locs = {} + bytecode = compile(script, unique_filename, "exec") + eval(bytecode, globs, locs) + + # In order of debuggers like PDB being able to step through the code, + # we add a fake linecache entry. + linecache.cache[unique_filename] = ( + len(script), + None, + script.splitlines(True), + unique_filename, + ) + + return locs["__hash__"] + + +def _add_hash(cls, attrs): + """ + Add a hash method to *cls*. + """ + cls.__hash__ = _make_hash(cls, attrs, frozen=False, cache_hash=False) + return cls + + +def _make_ne(): + """ + Create __ne__ method. + """ + + def __ne__(self, other): + """ + Check equality and either forward a NotImplemented or + return the result negated. + """ + result = self.__eq__(other) + if result is NotImplemented: + return NotImplemented + + return not result + + return __ne__ + + +def _make_eq(cls, attrs): + """ + Create __eq__ method for *cls* with *attrs*. + """ + attrs = [a for a in attrs if a.eq] + + unique_filename = _generate_unique_filename(cls, "eq") + lines = [ + "def __eq__(self, other):", + " if other.__class__ is not self.__class__:", + " return NotImplemented", + ] + # We can't just do a big self.x = other.x and... clause due to + # irregularities like nan == nan is false but (nan,) == (nan,) is true. + if attrs: + lines.append(" return (") + others = [" ) == ("] + for a in attrs: + lines.append(" self.%s," % (a.name,)) + others.append(" other.%s," % (a.name,)) + + lines += others + [" )"] + else: + lines.append(" return True") + + script = "\n".join(lines) + globs = {} + locs = {} + bytecode = compile(script, unique_filename, "exec") + eval(bytecode, globs, locs) + + # In order of debuggers like PDB being able to step through the code, + # we add a fake linecache entry. + linecache.cache[unique_filename] = ( + len(script), + None, + script.splitlines(True), + unique_filename, + ) + return locs["__eq__"] + + +def _make_order(cls, attrs): + """ + Create ordering methods for *cls* with *attrs*. + """ + attrs = [a for a in attrs if a.order] + + def attrs_to_tuple(obj): + """ + Save us some typing. + """ + return _attrs_to_tuple(obj, attrs) + + def __lt__(self, other): + """ + Automatically created by attrs. + """ + if other.__class__ is self.__class__: + return attrs_to_tuple(self) < attrs_to_tuple(other) + + return NotImplemented + + def __le__(self, other): + """ + Automatically created by attrs. + """ + if other.__class__ is self.__class__: + return attrs_to_tuple(self) <= attrs_to_tuple(other) + + return NotImplemented + + def __gt__(self, other): + """ + Automatically created by attrs. + """ + if other.__class__ is self.__class__: + return attrs_to_tuple(self) > attrs_to_tuple(other) + + return NotImplemented + + def __ge__(self, other): + """ + Automatically created by attrs. + """ + if other.__class__ is self.__class__: + return attrs_to_tuple(self) >= attrs_to_tuple(other) + + return NotImplemented + + return __lt__, __le__, __gt__, __ge__ + + +def _add_eq(cls, attrs=None): + """ + Add equality methods to *cls* with *attrs*. + """ + if attrs is None: + attrs = cls.__attrs_attrs__ + + cls.__eq__ = _make_eq(cls, attrs) + cls.__ne__ = _make_ne() + + return cls + + +_already_repring = threading.local() + + +def _make_repr(attrs, ns): + """ + Make a repr method that includes relevant *attrs*, adding *ns* to the full + name. + """ + + # Figure out which attributes to include, and which function to use to + # format them. The a.repr value can be either bool or a custom callable. + attr_names_with_reprs = tuple( + (a.name, repr if a.repr is True else a.repr) + for a in attrs + if a.repr is not False + ) + + def __repr__(self): + """ + Automatically created by attrs. + """ + try: + working_set = _already_repring.working_set + except AttributeError: + working_set = set() + _already_repring.working_set = working_set + + if id(self) in working_set: + return "..." + real_cls = self.__class__ + if ns is None: + qualname = getattr(real_cls, "__qualname__", None) + if qualname is not None: + class_name = qualname.rsplit(">.", 1)[-1] + else: + class_name = real_cls.__name__ + else: + class_name = ns + "." + real_cls.__name__ + + # Since 'self' remains on the stack (i.e.: strongly referenced) for the + # duration of this call, it's safe to depend on id(...) stability, and + # not need to track the instance and therefore worry about properties + # like weakref- or hash-ability. + working_set.add(id(self)) + try: + result = [class_name, "("] + first = True + for name, attr_repr in attr_names_with_reprs: + if first: + first = False + else: + result.append(", ") + result.extend( + (name, "=", attr_repr(getattr(self, name, NOTHING))) + ) + return "".join(result) + ")" + finally: + working_set.remove(id(self)) + + return __repr__ + + +def _add_repr(cls, ns=None, attrs=None): + """ + Add a repr method to *cls*. + """ + if attrs is None: + attrs = cls.__attrs_attrs__ + + cls.__repr__ = _make_repr(attrs, ns) + return cls + + +def fields(cls): + """ + Return the tuple of ``attrs`` attributes for a class. + + The tuple also allows accessing the fields by their names (see below for + examples). + + :param type cls: Class to introspect. + + :raise TypeError: If *cls* is not a class. + :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` + class. + + :rtype: tuple (with name accessors) of `attr.Attribute` + + .. versionchanged:: 16.2.0 Returned tuple allows accessing the fields + by name. + """ + if not isclass(cls): + raise TypeError("Passed object must be a class.") + attrs = getattr(cls, "__attrs_attrs__", None) + if attrs is None: + raise NotAnAttrsClassError( + "{cls!r} is not an attrs-decorated class.".format(cls=cls) + ) + return attrs + + +def fields_dict(cls): + """ + Return an ordered dictionary of ``attrs`` attributes for a class, whose + keys are the attribute names. + + :param type cls: Class to introspect. + + :raise TypeError: If *cls* is not a class. + :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` + class. + + :rtype: an ordered dict where keys are attribute names and values are + `attr.Attribute`\\ s. This will be a `dict` if it's + naturally ordered like on Python 3.6+ or an + :class:`~collections.OrderedDict` otherwise. + + .. versionadded:: 18.1.0 + """ + if not isclass(cls): + raise TypeError("Passed object must be a class.") + attrs = getattr(cls, "__attrs_attrs__", None) + if attrs is None: + raise NotAnAttrsClassError( + "{cls!r} is not an attrs-decorated class.".format(cls=cls) + ) + return ordered_dict(((a.name, a) for a in attrs)) + + +def validate(inst): + """ + Validate all attributes on *inst* that have a validator. + + Leaves all exceptions through. + + :param inst: Instance of a class with ``attrs`` attributes. + """ + if _config._run_validators is False: + return + + for a in fields(inst.__class__): + v = a.validator + if v is not None: + v(inst, a, getattr(inst, a.name)) + + +def _is_slot_cls(cls): + return "__slots__" in cls.__dict__ + + +def _is_slot_attr(a_name, base_attr_map): + """ + Check if the attribute name comes from a slot class. + """ + return a_name in base_attr_map and _is_slot_cls(base_attr_map[a_name]) + + +def _make_init( + cls, + attrs, + post_init, + frozen, + slots, + cache_hash, + base_attr_map, + is_exc, + has_global_on_setattr, +): + if frozen and has_global_on_setattr: + raise ValueError("Frozen classes can't use on_setattr.") + + needs_cached_setattr = cache_hash or frozen + filtered_attrs = [] + attr_dict = {} + for a in attrs: + if not a.init and a.default is NOTHING: + continue + + filtered_attrs.append(a) + attr_dict[a.name] = a + + if a.on_setattr is not None: + if frozen is True: + raise ValueError("Frozen classes can't use on_setattr.") + + needs_cached_setattr = True + elif ( + has_global_on_setattr and a.on_setattr is not setters.NO_OP + ) or _is_slot_attr(a.name, base_attr_map): + needs_cached_setattr = True + + unique_filename = _generate_unique_filename(cls, "init") + + script, globs, annotations = _attrs_to_init_script( + filtered_attrs, + frozen, + slots, + post_init, + cache_hash, + base_attr_map, + is_exc, + needs_cached_setattr, + has_global_on_setattr, + ) + locs = {} + bytecode = compile(script, unique_filename, "exec") + globs.update({"NOTHING": NOTHING, "attr_dict": attr_dict}) + + if needs_cached_setattr: + # Save the lookup overhead in __init__ if we need to circumvent + # setattr hooks. + globs["_cached_setattr"] = _obj_setattr + + eval(bytecode, globs, locs) + + # In order of debuggers like PDB being able to step through the code, + # we add a fake linecache entry. + linecache.cache[unique_filename] = ( + len(script), + None, + script.splitlines(True), + unique_filename, + ) + + __init__ = locs["__init__"] + __init__.__annotations__ = annotations + + return __init__ + + +def _setattr(attr_name, value_var, has_on_setattr): + """ + Use the cached object.setattr to set *attr_name* to *value_var*. + """ + return "_setattr('%s', %s)" % (attr_name, value_var) + + +def _setattr_with_converter(attr_name, value_var, has_on_setattr): + """ + Use the cached object.setattr to set *attr_name* to *value_var*, but run + its converter first. + """ + return "_setattr('%s', %s(%s))" % ( + attr_name, + _init_converter_pat % (attr_name,), + value_var, + ) + + +def _assign(attr_name, value, has_on_setattr): + """ + Unless *attr_name* has an on_setattr hook, use normal assignment. Otherwise + relegate to _setattr. + """ + if has_on_setattr: + return _setattr(attr_name, value, True) + + return "self.%s = %s" % (attr_name, value) + + +def _assign_with_converter(attr_name, value_var, has_on_setattr): + """ + Unless *attr_name* has an on_setattr hook, use normal assignment after + conversion. Otherwise relegate to _setattr_with_converter. + """ + if has_on_setattr: + return _setattr_with_converter(attr_name, value_var, True) + + return "self.%s = %s(%s)" % ( + attr_name, + _init_converter_pat % (attr_name,), + value_var, + ) + + +if PY2: + + def _unpack_kw_only_py2(attr_name, default=None): + """ + Unpack *attr_name* from _kw_only dict. + """ + if default is not None: + arg_default = ", %s" % default + else: + arg_default = "" + return "%s = _kw_only.pop('%s'%s)" % ( + attr_name, + attr_name, + arg_default, + ) + + def _unpack_kw_only_lines_py2(kw_only_args): + """ + Unpack all *kw_only_args* from _kw_only dict and handle errors. + + Given a list of strings "{attr_name}" and "{attr_name}={default}" + generates list of lines of code that pop attrs from _kw_only dict and + raise TypeError similar to builtin if required attr is missing or + extra key is passed. + + >>> print("\n".join(_unpack_kw_only_lines_py2(["a", "b=42"]))) + try: + a = _kw_only.pop('a') + b = _kw_only.pop('b', 42) + except KeyError as _key_error: + raise TypeError( + ... + if _kw_only: + raise TypeError( + ... + """ + lines = ["try:"] + lines.extend( + " " + _unpack_kw_only_py2(*arg.split("=")) + for arg in kw_only_args + ) + lines += """\ +except KeyError as _key_error: + raise TypeError( + '__init__() missing required keyword-only argument: %s' % _key_error + ) +if _kw_only: + raise TypeError( + '__init__() got an unexpected keyword argument %r' + % next(iter(_kw_only)) + ) +""".split( + "\n" + ) + return lines + + +def _attrs_to_init_script( + attrs, + frozen, + slots, + post_init, + cache_hash, + base_attr_map, + is_exc, + needs_cached_setattr, + has_global_on_setattr, +): + """ + Return a script of an initializer for *attrs* and a dict of globals. + + The globals are expected by the generated script. + + If *frozen* is True, we cannot set the attributes directly so we use + a cached ``object.__setattr__``. + """ + lines = [] + if needs_cached_setattr: + lines.append( + # Circumvent the __setattr__ descriptor to save one lookup per + # assignment. + # Note _setattr will be used again below if cache_hash is True + "_setattr = _cached_setattr.__get__(self, self.__class__)" + ) + + if frozen is True: + if slots is True: + fmt_setter = _setattr + fmt_setter_with_converter = _setattr_with_converter + else: + # Dict frozen classes assign directly to __dict__. + # But only if the attribute doesn't come from an ancestor slot + # class. + # Note _inst_dict will be used again below if cache_hash is True + lines.append("_inst_dict = self.__dict__") + + def fmt_setter(attr_name, value_var, has_on_setattr): + if _is_slot_attr(attr_name, base_attr_map): + return _setattr(attr_name, value_var, has_on_setattr) + + return "_inst_dict['%s'] = %s" % (attr_name, value_var) + + def fmt_setter_with_converter( + attr_name, value_var, has_on_setattr + ): + if has_on_setattr or _is_slot_attr(attr_name, base_attr_map): + return _setattr_with_converter( + attr_name, value_var, has_on_setattr + ) + + return "_inst_dict['%s'] = %s(%s)" % ( + attr_name, + _init_converter_pat % (attr_name,), + value_var, + ) + + else: + # Not frozen. + fmt_setter = _assign + fmt_setter_with_converter = _assign_with_converter + + args = [] + kw_only_args = [] + attrs_to_validate = [] + + # This is a dictionary of names to validator and converter callables. + # Injecting this into __init__ globals lets us avoid lookups. + names_for_globals = {} + annotations = {"return": None} + + for a in attrs: + if a.validator: + attrs_to_validate.append(a) + + attr_name = a.name + has_on_setattr = a.on_setattr is not None or ( + a.on_setattr is not setters.NO_OP and has_global_on_setattr + ) + arg_name = a.name.lstrip("_") + + has_factory = isinstance(a.default, Factory) + if has_factory and a.default.takes_self: + maybe_self = "self" + else: + maybe_self = "" + + if a.init is False: + if has_factory: + init_factory_name = _init_factory_pat.format(a.name) + if a.converter is not None: + lines.append( + fmt_setter_with_converter( + attr_name, + init_factory_name + "(%s)" % (maybe_self,), + has_on_setattr, + ) + ) + conv_name = _init_converter_pat % (a.name,) + names_for_globals[conv_name] = a.converter + else: + lines.append( + fmt_setter( + attr_name, + init_factory_name + "(%s)" % (maybe_self,), + has_on_setattr, + ) + ) + names_for_globals[init_factory_name] = a.default.factory + else: + if a.converter is not None: + lines.append( + fmt_setter_with_converter( + attr_name, + "attr_dict['%s'].default" % (attr_name,), + has_on_setattr, + ) + ) + conv_name = _init_converter_pat % (a.name,) + names_for_globals[conv_name] = a.converter + else: + lines.append( + fmt_setter( + attr_name, + "attr_dict['%s'].default" % (attr_name,), + has_on_setattr, + ) + ) + elif a.default is not NOTHING and not has_factory: + arg = "%s=attr_dict['%s'].default" % (arg_name, attr_name) + if a.kw_only: + kw_only_args.append(arg) + else: + args.append(arg) + + if a.converter is not None: + lines.append( + fmt_setter_with_converter( + attr_name, arg_name, has_on_setattr + ) + ) + names_for_globals[ + _init_converter_pat % (a.name,) + ] = a.converter + else: + lines.append(fmt_setter(attr_name, arg_name, has_on_setattr)) + + elif has_factory: + arg = "%s=NOTHING" % (arg_name,) + if a.kw_only: + kw_only_args.append(arg) + else: + args.append(arg) + lines.append("if %s is not NOTHING:" % (arg_name,)) + + init_factory_name = _init_factory_pat.format(a.name) + if a.converter is not None: + lines.append( + " " + + fmt_setter_with_converter( + attr_name, arg_name, has_on_setattr + ) + ) + lines.append("else:") + lines.append( + " " + + fmt_setter_with_converter( + attr_name, + init_factory_name + "(" + maybe_self + ")", + has_on_setattr, + ) + ) + names_for_globals[ + _init_converter_pat % (a.name,) + ] = a.converter + else: + lines.append( + " " + fmt_setter(attr_name, arg_name, has_on_setattr) + ) + lines.append("else:") + lines.append( + " " + + fmt_setter( + attr_name, + init_factory_name + "(" + maybe_self + ")", + has_on_setattr, + ) + ) + names_for_globals[init_factory_name] = a.default.factory + else: + if a.kw_only: + kw_only_args.append(arg_name) + else: + args.append(arg_name) + + if a.converter is not None: + lines.append( + fmt_setter_with_converter( + attr_name, arg_name, has_on_setattr + ) + ) + names_for_globals[ + _init_converter_pat % (a.name,) + ] = a.converter + else: + lines.append(fmt_setter(attr_name, arg_name, has_on_setattr)) + + if a.init is True and a.converter is None and a.type is not None: + annotations[arg_name] = a.type + + if attrs_to_validate: # we can skip this if there are no validators. + names_for_globals["_config"] = _config + lines.append("if _config._run_validators is True:") + for a in attrs_to_validate: + val_name = "__attr_validator_" + a.name + attr_name = "__attr_" + a.name + lines.append( + " %s(self, %s, self.%s)" % (val_name, attr_name, a.name) + ) + names_for_globals[val_name] = a.validator + names_for_globals[attr_name] = a + + if post_init: + lines.append("self.__attrs_post_init__()") + + # because this is set only after __attrs_post_init is called, a crash + # will result if post-init tries to access the hash code. This seemed + # preferable to setting this beforehand, in which case alteration to + # field values during post-init combined with post-init accessing the + # hash code would result in silent bugs. + if cache_hash: + if frozen: + if slots: + # if frozen and slots, then _setattr defined above + init_hash_cache = "_setattr('%s', %s)" + else: + # if frozen and not slots, then _inst_dict defined above + init_hash_cache = "_inst_dict['%s'] = %s" + else: + init_hash_cache = "self.%s = %s" + lines.append(init_hash_cache % (_hash_cache_field, "None")) + + # For exceptions we rely on BaseException.__init__ for proper + # initialization. + if is_exc: + vals = ",".join("self." + a.name for a in attrs if a.init) + + lines.append("BaseException.__init__(self, %s)" % (vals,)) + + args = ", ".join(args) + if kw_only_args: + if PY2: + lines = _unpack_kw_only_lines_py2(kw_only_args) + lines + + args += "%s**_kw_only" % (", " if args else "",) # leading comma + else: + args += "%s*, %s" % ( + ", " if args else "", # leading comma + ", ".join(kw_only_args), # kw_only args + ) + return ( + """\ +def __init__(self, {args}): + {lines} +""".format( + args=args, lines="\n ".join(lines) if lines else "pass" + ), + names_for_globals, + annotations, + ) + + +class Attribute(object): + """ + *Read-only* representation of an attribute. + + Instances of this class are frequently used for introspection purposes + like: + + - `fields` returns a tuple of them. + - Validators get them passed as the first argument. + - The *field transformer* hook receives a list of them. + + :attribute name: The name of the attribute. + :attribute inherited: Whether or not that attribute has been inherited from + a base class. + + Plus *all* arguments of `attr.ib` (except for ``factory`` + which is only syntactic sugar for ``default=Factory(...)``. + + .. versionadded:: 20.1.0 *inherited* + .. versionadded:: 20.1.0 *on_setattr* + .. versionchanged:: 20.2.0 *inherited* is not taken into account for + equality checks and hashing anymore. + + For the full version history of the fields, see `attr.ib`. + """ + + __slots__ = ( + "name", + "default", + "validator", + "repr", + "eq", + "order", + "hash", + "init", + "metadata", + "type", + "converter", + "kw_only", + "inherited", + "on_setattr", + ) + + def __init__( + self, + name, + default, + validator, + repr, + cmp, # XXX: unused, remove along with other cmp code. + hash, + init, + inherited, + metadata=None, + type=None, + converter=None, + kw_only=False, + eq=None, + order=None, + on_setattr=None, + ): + eq, order = _determine_eq_order(cmp, eq, order, True) + + # Cache this descriptor here to speed things up later. + bound_setattr = _obj_setattr.__get__(self, Attribute) + + # Despite the big red warning, people *do* instantiate `Attribute` + # themselves. + bound_setattr("name", name) + bound_setattr("default", default) + bound_setattr("validator", validator) + bound_setattr("repr", repr) + bound_setattr("eq", eq) + bound_setattr("order", order) + bound_setattr("hash", hash) + bound_setattr("init", init) + bound_setattr("converter", converter) + bound_setattr( + "metadata", + ( + metadata_proxy(metadata) + if metadata + else _empty_metadata_singleton + ), + ) + bound_setattr("type", type) + bound_setattr("kw_only", kw_only) + bound_setattr("inherited", inherited) + bound_setattr("on_setattr", on_setattr) + + def __setattr__(self, name, value): + raise FrozenInstanceError() + + @classmethod + def from_counting_attr(cls, name, ca, type=None): + # type holds the annotated value. deal with conflicts: + if type is None: + type = ca.type + elif ca.type is not None: + raise ValueError( + "Type annotation and type argument cannot both be present" + ) + inst_dict = { + k: getattr(ca, k) + for k in Attribute.__slots__ + if k + not in ( + "name", + "validator", + "default", + "type", + "inherited", + ) # exclude methods and deprecated alias + } + return cls( + name=name, + validator=ca._validator, + default=ca._default, + type=type, + cmp=None, + inherited=False, + **inst_dict + ) + + @property + def cmp(self): + """ + Simulate the presence of a cmp attribute and warn. + """ + warnings.warn(_CMP_DEPRECATION, DeprecationWarning, stacklevel=2) + + return self.eq and self.order + + # Don't use attr.evolve since fields(Attribute) doesn't work + def evolve(self, **changes): + """ + Copy *self* and apply *changes*. + + This works similarly to `attr.evolve` but that function does not work + with ``Attribute``. + + It is mainly meant to be used for `transform-fields`. + + .. versionadded:: 20.3.0 + """ + new = copy.copy(self) + + new._setattrs(changes.items()) + + return new + + # Don't use _add_pickle since fields(Attribute) doesn't work + def __getstate__(self): + """ + Play nice with pickle. + """ + return tuple( + getattr(self, name) if name != "metadata" else dict(self.metadata) + for name in self.__slots__ + ) + + def __setstate__(self, state): + """ + Play nice with pickle. + """ + self._setattrs(zip(self.__slots__, state)) + + def _setattrs(self, name_values_pairs): + bound_setattr = _obj_setattr.__get__(self, Attribute) + for name, value in name_values_pairs: + if name != "metadata": + bound_setattr(name, value) + else: + bound_setattr( + name, + metadata_proxy(value) + if value + else _empty_metadata_singleton, + ) + + +_a = [ + Attribute( + name=name, + default=NOTHING, + validator=None, + repr=True, + cmp=None, + eq=True, + order=False, + hash=(name != "metadata"), + init=True, + inherited=False, + ) + for name in Attribute.__slots__ +] + +Attribute = _add_hash( + _add_eq( + _add_repr(Attribute, attrs=_a), + attrs=[a for a in _a if a.name != "inherited"], + ), + attrs=[a for a in _a if a.hash and a.name != "inherited"], +) + + +class _CountingAttr(object): + """ + Intermediate representation of attributes that uses a counter to preserve + the order in which the attributes have been defined. + + *Internal* data structure of the attrs library. Running into is most + likely the result of a bug like a forgotten `@attr.s` decorator. + """ + + __slots__ = ( + "counter", + "_default", + "repr", + "eq", + "order", + "hash", + "init", + "metadata", + "_validator", + "converter", + "type", + "kw_only", + "on_setattr", + ) + __attrs_attrs__ = tuple( + Attribute( + name=name, + default=NOTHING, + validator=None, + repr=True, + cmp=None, + hash=True, + init=True, + kw_only=False, + eq=True, + order=False, + inherited=False, + on_setattr=None, + ) + for name in ( + "counter", + "_default", + "repr", + "eq", + "order", + "hash", + "init", + "on_setattr", + ) + ) + ( + Attribute( + name="metadata", + default=None, + validator=None, + repr=True, + cmp=None, + hash=False, + init=True, + kw_only=False, + eq=True, + order=False, + inherited=False, + on_setattr=None, + ), + ) + cls_counter = 0 + + def __init__( + self, + default, + validator, + repr, + cmp, # XXX: unused, remove along with cmp + hash, + init, + converter, + metadata, + type, + kw_only, + eq, + order, + on_setattr, + ): + _CountingAttr.cls_counter += 1 + self.counter = _CountingAttr.cls_counter + self._default = default + self._validator = validator + self.converter = converter + self.repr = repr + self.eq = eq + self.order = order + self.hash = hash + self.init = init + self.metadata = metadata + self.type = type + self.kw_only = kw_only + self.on_setattr = on_setattr + + def validator(self, meth): + """ + Decorator that adds *meth* to the list of validators. + + Returns *meth* unchanged. + + .. versionadded:: 17.1.0 + """ + if self._validator is None: + self._validator = meth + else: + self._validator = and_(self._validator, meth) + return meth + + def default(self, meth): + """ + Decorator that allows to set the default for an attribute. + + Returns *meth* unchanged. + + :raises DefaultAlreadySetError: If default has been set before. + + .. versionadded:: 17.1.0 + """ + if self._default is not NOTHING: + raise DefaultAlreadySetError() + + self._default = Factory(meth, takes_self=True) + + return meth + + +_CountingAttr = _add_eq(_add_repr(_CountingAttr)) + + +@attrs(slots=True, init=False, hash=True) +class Factory(object): + """ + Stores a factory callable. + + If passed as the default value to `attr.ib`, the factory is used to + generate a new value. + + :param callable factory: A callable that takes either none or exactly one + mandatory positional argument depending on *takes_self*. + :param bool takes_self: Pass the partially initialized instance that is + being initialized as a positional argument. + + .. versionadded:: 17.1.0 *takes_self* + """ + + factory = attrib() + takes_self = attrib() + + def __init__(self, factory, takes_self=False): + """ + `Factory` is part of the default machinery so if we want a default + value here, we have to implement it ourselves. + """ + self.factory = factory + self.takes_self = takes_self + + +def make_class(name, attrs, bases=(object,), **attributes_arguments): + """ + A quick way to create a new class called *name* with *attrs*. + + :param str name: The name for the new class. + + :param attrs: A list of names or a dictionary of mappings of names to + attributes. + + If *attrs* is a list or an ordered dict (`dict` on Python 3.6+, + `collections.OrderedDict` otherwise), the order is deduced from + the order of the names or attributes inside *attrs*. Otherwise the + order of the definition of the attributes is used. + :type attrs: `list` or `dict` + + :param tuple bases: Classes that the new class will subclass. + + :param attributes_arguments: Passed unmodified to `attr.s`. + + :return: A new class with *attrs*. + :rtype: type + + .. versionadded:: 17.1.0 *bases* + .. versionchanged:: 18.1.0 If *attrs* is ordered, the order is retained. + """ + if isinstance(attrs, dict): + cls_dict = attrs + elif isinstance(attrs, (list, tuple)): + cls_dict = dict((a, attrib()) for a in attrs) + else: + raise TypeError("attrs argument must be a dict or a list.") + + post_init = cls_dict.pop("__attrs_post_init__", None) + type_ = type( + name, + bases, + {} if post_init is None else {"__attrs_post_init__": post_init}, + ) + # For pickling to work, the __module__ variable needs to be set to the + # frame where the class is created. Bypass this step in environments where + # sys._getframe is not defined (Jython for example) or sys._getframe is not + # defined for arguments greater than 0 (IronPython). + try: + type_.__module__ = sys._getframe(1).f_globals.get( + "__name__", "__main__" + ) + except (AttributeError, ValueError): + pass + + # We do it here for proper warnings with meaningful stacklevel. + cmp = attributes_arguments.pop("cmp", None) + ( + attributes_arguments["eq"], + attributes_arguments["order"], + ) = _determine_eq_order( + cmp, + attributes_arguments.get("eq"), + attributes_arguments.get("order"), + True, + ) + + return _attrs(these=cls_dict, **attributes_arguments)(type_) + + +# These are required by within this module so we define them here and merely +# import into .validators / .converters. + + +@attrs(slots=True, hash=True) +class _AndValidator(object): + """ + Compose many validators to a single one. + """ + + _validators = attrib() + + def __call__(self, inst, attr, value): + for v in self._validators: + v(inst, attr, value) + + +def and_(*validators): + """ + A validator that composes multiple validators into one. + + When called on a value, it runs all wrapped validators. + + :param callables validators: Arbitrary number of validators. + + .. versionadded:: 17.1.0 + """ + vals = [] + for validator in validators: + vals.extend( + validator._validators + if isinstance(validator, _AndValidator) + else [validator] + ) + + return _AndValidator(tuple(vals)) + + +def pipe(*converters): + """ + A converter that composes multiple converters into one. + + When called on a value, it runs all wrapped converters, returning the + *last* value. + + :param callables converters: Arbitrary number of converters. + + .. versionadded:: 20.1.0 + """ + + def pipe_converter(val): + for converter in converters: + val = converter(val) + + return val + + return pipe_converter diff --git a/venv-linux/lib/python3.6/site-packages/attr/_next_gen.py b/venv-linux/lib/python3.6/site-packages/attr/_next_gen.py new file mode 100644 index 0000000..2b5565c --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/_next_gen.py @@ -0,0 +1,160 @@ +""" +This is a Python 3.6 and later-only, keyword-only, and **provisional** API that +calls `attr.s` with different default values. + +Provisional APIs that shall become "import attrs" one glorious day. +""" + +from functools import partial + +from attr.exceptions import UnannotatedAttributeError + +from . import setters +from ._make import NOTHING, _frozen_setattrs, attrib, attrs + + +def define( + maybe_cls=None, + *, + these=None, + repr=None, + hash=None, + init=None, + slots=True, + frozen=False, + weakref_slot=True, + str=False, + auto_attribs=None, + kw_only=False, + cache_hash=False, + auto_exc=True, + eq=None, + order=False, + auto_detect=True, + getstate_setstate=None, + on_setattr=None, + field_transformer=None, +): + r""" + The only behavioral differences are the handling of the *auto_attribs* + option: + + :param Optional[bool] auto_attribs: If set to `True` or `False`, it behaves + exactly like `attr.s`. If left `None`, `attr.s` will try to guess: + + 1. If all attributes are annotated and no `attr.ib` is found, it assumes + *auto_attribs=True*. + 2. Otherwise it assumes *auto_attribs=False* and tries to collect + `attr.ib`\ s. + + and that mutable classes (``frozen=False``) validate on ``__setattr__``. + + .. versionadded:: 20.1.0 + """ + + def do_it(cls, auto_attribs): + return attrs( + maybe_cls=cls, + these=these, + repr=repr, + hash=hash, + init=init, + slots=slots, + frozen=frozen, + weakref_slot=weakref_slot, + str=str, + auto_attribs=auto_attribs, + kw_only=kw_only, + cache_hash=cache_hash, + auto_exc=auto_exc, + eq=eq, + order=order, + auto_detect=auto_detect, + collect_by_mro=True, + getstate_setstate=getstate_setstate, + on_setattr=on_setattr, + field_transformer=field_transformer, + ) + + def wrap(cls): + """ + Making this a wrapper ensures this code runs during class creation. + + We also ensure that frozen-ness of classes is inherited. + """ + nonlocal frozen, on_setattr + + had_on_setattr = on_setattr not in (None, setters.NO_OP) + + # By default, mutable classes validate on setattr. + if frozen is False and on_setattr is None: + on_setattr = setters.validate + + # However, if we subclass a frozen class, we inherit the immutability + # and disable on_setattr. + for base_cls in cls.__bases__: + if base_cls.__setattr__ is _frozen_setattrs: + if had_on_setattr: + raise ValueError( + "Frozen classes can't use on_setattr " + "(frozen-ness was inherited)." + ) + + on_setattr = setters.NO_OP + break + + if auto_attribs is not None: + return do_it(cls, auto_attribs) + + try: + return do_it(cls, True) + except UnannotatedAttributeError: + return do_it(cls, False) + + # maybe_cls's type depends on the usage of the decorator. It's a class + # if it's used as `@attrs` but ``None`` if used as `@attrs()`. + if maybe_cls is None: + return wrap + else: + return wrap(maybe_cls) + + +mutable = define +frozen = partial(define, frozen=True, on_setattr=None) + + +def field( + *, + default=NOTHING, + validator=None, + repr=True, + hash=None, + init=True, + metadata=None, + converter=None, + factory=None, + kw_only=False, + eq=None, + order=None, + on_setattr=None, +): + """ + Identical to `attr.ib`, except keyword-only and with some arguments + removed. + + .. versionadded:: 20.1.0 + """ + return attrib( + default=default, + validator=validator, + repr=repr, + hash=hash, + init=init, + metadata=metadata, + converter=converter, + factory=factory, + kw_only=kw_only, + eq=eq, + order=order, + on_setattr=on_setattr, + ) diff --git a/venv-linux/lib/python3.6/site-packages/attr/_version_info.py b/venv-linux/lib/python3.6/site-packages/attr/_version_info.py new file mode 100644 index 0000000..014e78a --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/_version_info.py @@ -0,0 +1,85 @@ +from __future__ import absolute_import, division, print_function + +from functools import total_ordering + +from ._funcs import astuple +from ._make import attrib, attrs + + +@total_ordering +@attrs(eq=False, order=False, slots=True, frozen=True) +class VersionInfo(object): + """ + A version object that can be compared to tuple of length 1--4: + + >>> attr.VersionInfo(19, 1, 0, "final") <= (19, 2) + True + >>> attr.VersionInfo(19, 1, 0, "final") < (19, 1, 1) + True + >>> vi = attr.VersionInfo(19, 2, 0, "final") + >>> vi < (19, 1, 1) + False + >>> vi < (19,) + False + >>> vi == (19, 2,) + True + >>> vi == (19, 2, 1) + False + + .. versionadded:: 19.2 + """ + + year = attrib(type=int) + minor = attrib(type=int) + micro = attrib(type=int) + releaselevel = attrib(type=str) + + @classmethod + def _from_version_string(cls, s): + """ + Parse *s* and return a _VersionInfo. + """ + v = s.split(".") + if len(v) == 3: + v.append("final") + + return cls( + year=int(v[0]), minor=int(v[1]), micro=int(v[2]), releaselevel=v[3] + ) + + def _ensure_tuple(self, other): + """ + Ensure *other* is a tuple of a valid length. + + Returns a possibly transformed *other* and ourselves as a tuple of + the same length as *other*. + """ + + if self.__class__ is other.__class__: + other = astuple(other) + + if not isinstance(other, tuple): + raise NotImplementedError + + if not (1 <= len(other) <= 4): + raise NotImplementedError + + return astuple(self)[: len(other)], other + + def __eq__(self, other): + try: + us, them = self._ensure_tuple(other) + except NotImplementedError: + return NotImplemented + + return us == them + + def __lt__(self, other): + try: + us, them = self._ensure_tuple(other) + except NotImplementedError: + return NotImplemented + + # Since alphabetically "dev0" < "final" < "post1" < "post2", we don't + # have to do anything special with releaselevel for now. + return us < them diff --git a/venv-linux/lib/python3.6/site-packages/attr/_version_info.pyi b/venv-linux/lib/python3.6/site-packages/attr/_version_info.pyi new file mode 100644 index 0000000..45ced08 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/_version_info.pyi @@ -0,0 +1,9 @@ +class VersionInfo: + @property + def year(self) -> int: ... + @property + def minor(self) -> int: ... + @property + def micro(self) -> int: ... + @property + def releaselevel(self) -> str: ... diff --git a/venv-linux/lib/python3.6/site-packages/attr/converters.py b/venv-linux/lib/python3.6/site-packages/attr/converters.py new file mode 100644 index 0000000..715ce17 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/converters.py @@ -0,0 +1,85 @@ +""" +Commonly useful converters. +""" + +from __future__ import absolute_import, division, print_function + +from ._make import NOTHING, Factory, pipe + + +__all__ = [ + "pipe", + "optional", + "default_if_none", +] + + +def optional(converter): + """ + A converter that allows an attribute to be optional. An optional attribute + is one which can be set to ``None``. + + :param callable converter: the converter that is used for non-``None`` + values. + + .. versionadded:: 17.1.0 + """ + + def optional_converter(val): + if val is None: + return None + return converter(val) + + return optional_converter + + +def default_if_none(default=NOTHING, factory=None): + """ + A converter that allows to replace ``None`` values by *default* or the + result of *factory*. + + :param default: Value to be used if ``None`` is passed. Passing an instance + of `attr.Factory` is supported, however the ``takes_self`` option + is *not*. + :param callable factory: A callable that takes not parameters whose result + is used if ``None`` is passed. + + :raises TypeError: If **neither** *default* or *factory* is passed. + :raises TypeError: If **both** *default* and *factory* are passed. + :raises ValueError: If an instance of `attr.Factory` is passed with + ``takes_self=True``. + + .. versionadded:: 18.2.0 + """ + if default is NOTHING and factory is None: + raise TypeError("Must pass either `default` or `factory`.") + + if default is not NOTHING and factory is not None: + raise TypeError( + "Must pass either `default` or `factory` but not both." + ) + + if factory is not None: + default = Factory(factory) + + if isinstance(default, Factory): + if default.takes_self: + raise ValueError( + "`takes_self` is not supported by default_if_none." + ) + + def default_if_none_converter(val): + if val is not None: + return val + + return default.factory() + + else: + + def default_if_none_converter(val): + if val is not None: + return val + + return default + + return default_if_none_converter diff --git a/venv-linux/lib/python3.6/site-packages/attr/converters.pyi b/venv-linux/lib/python3.6/site-packages/attr/converters.pyi new file mode 100644 index 0000000..7b0caa1 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/converters.pyi @@ -0,0 +1,11 @@ +from typing import TypeVar, Optional, Callable, overload +from . import _ConverterType + +_T = TypeVar("_T") + +def pipe(*validators: _ConverterType) -> _ConverterType: ... +def optional(converter: _ConverterType) -> _ConverterType: ... +@overload +def default_if_none(default: _T) -> _ConverterType: ... +@overload +def default_if_none(*, factory: Callable[[], _T]) -> _ConverterType: ... diff --git a/venv-linux/lib/python3.6/site-packages/attr/exceptions.py b/venv-linux/lib/python3.6/site-packages/attr/exceptions.py new file mode 100644 index 0000000..fcd8910 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/exceptions.py @@ -0,0 +1,92 @@ +from __future__ import absolute_import, division, print_function + + +class FrozenError(AttributeError): + """ + A frozen/immutable instance or attribute haave been attempted to be + modified. + + It mirrors the behavior of ``namedtuples`` by using the same error message + and subclassing `AttributeError`. + + .. versionadded:: 20.1.0 + """ + + msg = "can't set attribute" + args = [msg] + + +class FrozenInstanceError(FrozenError): + """ + A frozen instance has been attempted to be modified. + + .. versionadded:: 16.1.0 + """ + + +class FrozenAttributeError(FrozenError): + """ + A frozen attribute has been attempted to be modified. + + .. versionadded:: 20.1.0 + """ + + +class AttrsAttributeNotFoundError(ValueError): + """ + An ``attrs`` function couldn't find an attribute that the user asked for. + + .. versionadded:: 16.2.0 + """ + + +class NotAnAttrsClassError(ValueError): + """ + A non-``attrs`` class has been passed into an ``attrs`` function. + + .. versionadded:: 16.2.0 + """ + + +class DefaultAlreadySetError(RuntimeError): + """ + A default has been set using ``attr.ib()`` and is attempted to be reset + using the decorator. + + .. versionadded:: 17.1.0 + """ + + +class UnannotatedAttributeError(RuntimeError): + """ + A class with ``auto_attribs=True`` has an ``attr.ib()`` without a type + annotation. + + .. versionadded:: 17.3.0 + """ + + +class PythonTooOldError(RuntimeError): + """ + It was attempted to use an ``attrs`` feature that requires a newer Python + version. + + .. versionadded:: 18.2.0 + """ + + +class NotCallableError(TypeError): + """ + A ``attr.ib()`` requiring a callable has been set with a value + that is not callable. + + .. versionadded:: 19.2.0 + """ + + def __init__(self, msg, value): + super(TypeError, self).__init__(msg, value) + self.msg = msg + self.value = value + + def __str__(self): + return str(self.msg) diff --git a/venv-linux/lib/python3.6/site-packages/attr/exceptions.pyi b/venv-linux/lib/python3.6/site-packages/attr/exceptions.pyi new file mode 100644 index 0000000..f268011 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/exceptions.pyi @@ -0,0 +1,17 @@ +from typing import Any + +class FrozenError(AttributeError): + msg: str = ... + +class FrozenInstanceError(FrozenError): ... +class FrozenAttributeError(FrozenError): ... +class AttrsAttributeNotFoundError(ValueError): ... +class NotAnAttrsClassError(ValueError): ... +class DefaultAlreadySetError(RuntimeError): ... +class UnannotatedAttributeError(RuntimeError): ... +class PythonTooOldError(RuntimeError): ... + +class NotCallableError(TypeError): + msg: str = ... + value: Any = ... + def __init__(self, msg: str, value: Any) -> None: ... diff --git a/venv-linux/lib/python3.6/site-packages/attr/filters.py b/venv-linux/lib/python3.6/site-packages/attr/filters.py new file mode 100644 index 0000000..dc47e8f --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/filters.py @@ -0,0 +1,52 @@ +""" +Commonly useful filters for `attr.asdict`. +""" + +from __future__ import absolute_import, division, print_function + +from ._compat import isclass +from ._make import Attribute + + +def _split_what(what): + """ + Returns a tuple of `frozenset`s of classes and attributes. + """ + return ( + frozenset(cls for cls in what if isclass(cls)), + frozenset(cls for cls in what if isinstance(cls, Attribute)), + ) + + +def include(*what): + """ + Whitelist *what*. + + :param what: What to whitelist. + :type what: `list` of `type` or `attr.Attribute`\\ s + + :rtype: `callable` + """ + cls, attrs = _split_what(what) + + def include_(attribute, value): + return value.__class__ in cls or attribute in attrs + + return include_ + + +def exclude(*what): + """ + Blacklist *what*. + + :param what: What to blacklist. + :type what: `list` of classes or `attr.Attribute`\\ s. + + :rtype: `callable` + """ + cls, attrs = _split_what(what) + + def exclude_(attribute, value): + return value.__class__ not in cls and attribute not in attrs + + return exclude_ diff --git a/venv-linux/lib/python3.6/site-packages/attr/filters.pyi b/venv-linux/lib/python3.6/site-packages/attr/filters.pyi new file mode 100644 index 0000000..68368fe --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/filters.pyi @@ -0,0 +1,5 @@ +from typing import Union, Any +from . import Attribute, _FilterType + +def include(*what: Union[type, Attribute[Any]]) -> _FilterType[Any]: ... +def exclude(*what: Union[type, Attribute[Any]]) -> _FilterType[Any]: ... diff --git a/venv-linux/lib/python3.6/site-packages/attr/py.typed b/venv-linux/lib/python3.6/site-packages/attr/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv-linux/lib/python3.6/site-packages/attr/setters.py b/venv-linux/lib/python3.6/site-packages/attr/setters.py new file mode 100644 index 0000000..240014b --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/setters.py @@ -0,0 +1,77 @@ +""" +Commonly used hooks for on_setattr. +""" + +from __future__ import absolute_import, division, print_function + +from . import _config +from .exceptions import FrozenAttributeError + + +def pipe(*setters): + """ + Run all *setters* and return the return value of the last one. + + .. versionadded:: 20.1.0 + """ + + def wrapped_pipe(instance, attrib, new_value): + rv = new_value + + for setter in setters: + rv = setter(instance, attrib, rv) + + return rv + + return wrapped_pipe + + +def frozen(_, __, ___): + """ + Prevent an attribute to be modified. + + .. versionadded:: 20.1.0 + """ + raise FrozenAttributeError() + + +def validate(instance, attrib, new_value): + """ + Run *attrib*'s validator on *new_value* if it has one. + + .. versionadded:: 20.1.0 + """ + if _config._run_validators is False: + return new_value + + v = attrib.validator + if not v: + return new_value + + v(instance, attrib, new_value) + + return new_value + + +def convert(instance, attrib, new_value): + """ + Run *attrib*'s converter -- if it has one -- on *new_value* and return the + result. + + .. versionadded:: 20.1.0 + """ + c = attrib.converter + if c: + return c(new_value) + + return new_value + + +NO_OP = object() +""" +Sentinel for disabling class-wide *on_setattr* hooks for certain attributes. + +Does not work in `pipe` or within lists. + +.. versionadded:: 20.1.0 +""" diff --git a/venv-linux/lib/python3.6/site-packages/attr/setters.pyi b/venv-linux/lib/python3.6/site-packages/attr/setters.pyi new file mode 100644 index 0000000..19bc33f --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/setters.pyi @@ -0,0 +1,18 @@ +from . import _OnSetAttrType, Attribute +from typing import TypeVar, Any, NewType, NoReturn, cast + +_T = TypeVar("_T") + +def frozen( + instance: Any, attribute: Attribute, new_value: Any +) -> NoReturn: ... +def pipe(*setters: _OnSetAttrType) -> _OnSetAttrType: ... +def validate(instance: Any, attribute: Attribute[_T], new_value: _T) -> _T: ... + +# convert is allowed to return Any, because they can be chained using pipe. +def convert( + instance: Any, attribute: Attribute[Any], new_value: Any +) -> Any: ... + +_NoOpType = NewType("_NoOpType", object) +NO_OP: _NoOpType diff --git a/venv-linux/lib/python3.6/site-packages/attr/validators.py b/venv-linux/lib/python3.6/site-packages/attr/validators.py new file mode 100644 index 0000000..b9a7305 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/validators.py @@ -0,0 +1,379 @@ +""" +Commonly useful validators. +""" + +from __future__ import absolute_import, division, print_function + +import re + +from ._make import _AndValidator, and_, attrib, attrs +from .exceptions import NotCallableError + + +__all__ = [ + "and_", + "deep_iterable", + "deep_mapping", + "in_", + "instance_of", + "is_callable", + "matches_re", + "optional", + "provides", +] + + +@attrs(repr=False, slots=True, hash=True) +class _InstanceOfValidator(object): + type = attrib() + + def __call__(self, inst, attr, value): + """ + We use a callable class to be able to change the ``__repr__``. + """ + if not isinstance(value, self.type): + raise TypeError( + "'{name}' must be {type!r} (got {value!r} that is a " + "{actual!r}).".format( + name=attr.name, + type=self.type, + actual=value.__class__, + value=value, + ), + attr, + self.type, + value, + ) + + def __repr__(self): + return "".format( + type=self.type + ) + + +def instance_of(type): + """ + A validator that raises a `TypeError` if the initializer is called + with a wrong type for this particular attribute (checks are performed using + `isinstance` therefore it's also valid to pass a tuple of types). + + :param type: The type to check for. + :type type: type or tuple of types + + :raises TypeError: With a human readable error message, the attribute + (of type `attr.Attribute`), the expected type, and the value it + got. + """ + return _InstanceOfValidator(type) + + +@attrs(repr=False, frozen=True, slots=True) +class _MatchesReValidator(object): + regex = attrib() + flags = attrib() + match_func = attrib() + + def __call__(self, inst, attr, value): + """ + We use a callable class to be able to change the ``__repr__``. + """ + if not self.match_func(value): + raise ValueError( + "'{name}' must match regex {regex!r}" + " ({value!r} doesn't)".format( + name=attr.name, regex=self.regex.pattern, value=value + ), + attr, + self.regex, + value, + ) + + def __repr__(self): + return "".format( + regex=self.regex + ) + + +def matches_re(regex, flags=0, func=None): + r""" + A validator that raises `ValueError` if the initializer is called + with a string that doesn't match *regex*. + + :param str regex: a regex string to match against + :param int flags: flags that will be passed to the underlying re function + (default 0) + :param callable func: which underlying `re` function to call (options + are `re.fullmatch`, `re.search`, `re.match`, default + is ``None`` which means either `re.fullmatch` or an emulation of + it on Python 2). For performance reasons, they won't be used directly + but on a pre-`re.compile`\ ed pattern. + + .. versionadded:: 19.2.0 + """ + fullmatch = getattr(re, "fullmatch", None) + valid_funcs = (fullmatch, None, re.search, re.match) + if func not in valid_funcs: + raise ValueError( + "'func' must be one of %s." + % ( + ", ".join( + sorted( + e and e.__name__ or "None" for e in set(valid_funcs) + ) + ), + ) + ) + + pattern = re.compile(regex, flags) + if func is re.match: + match_func = pattern.match + elif func is re.search: + match_func = pattern.search + else: + if fullmatch: + match_func = pattern.fullmatch + else: + pattern = re.compile(r"(?:{})\Z".format(regex), flags) + match_func = pattern.match + + return _MatchesReValidator(pattern, flags, match_func) + + +@attrs(repr=False, slots=True, hash=True) +class _ProvidesValidator(object): + interface = attrib() + + def __call__(self, inst, attr, value): + """ + We use a callable class to be able to change the ``__repr__``. + """ + if not self.interface.providedBy(value): + raise TypeError( + "'{name}' must provide {interface!r} which {value!r} " + "doesn't.".format( + name=attr.name, interface=self.interface, value=value + ), + attr, + self.interface, + value, + ) + + def __repr__(self): + return "".format( + interface=self.interface + ) + + +def provides(interface): + """ + A validator that raises a `TypeError` if the initializer is called + with an object that does not provide the requested *interface* (checks are + performed using ``interface.providedBy(value)`` (see `zope.interface + `_). + + :param interface: The interface to check for. + :type interface: ``zope.interface.Interface`` + + :raises TypeError: With a human readable error message, the attribute + (of type `attr.Attribute`), the expected interface, and the + value it got. + """ + return _ProvidesValidator(interface) + + +@attrs(repr=False, slots=True, hash=True) +class _OptionalValidator(object): + validator = attrib() + + def __call__(self, inst, attr, value): + if value is None: + return + + self.validator(inst, attr, value) + + def __repr__(self): + return "".format( + what=repr(self.validator) + ) + + +def optional(validator): + """ + A validator that makes an attribute optional. An optional attribute is one + which can be set to ``None`` in addition to satisfying the requirements of + the sub-validator. + + :param validator: A validator (or a list of validators) that is used for + non-``None`` values. + :type validator: callable or `list` of callables. + + .. versionadded:: 15.1.0 + .. versionchanged:: 17.1.0 *validator* can be a list of validators. + """ + if isinstance(validator, list): + return _OptionalValidator(_AndValidator(validator)) + return _OptionalValidator(validator) + + +@attrs(repr=False, slots=True, hash=True) +class _InValidator(object): + options = attrib() + + def __call__(self, inst, attr, value): + try: + in_options = value in self.options + except TypeError: # e.g. `1 in "abc"` + in_options = False + + if not in_options: + raise ValueError( + "'{name}' must be in {options!r} (got {value!r})".format( + name=attr.name, options=self.options, value=value + ) + ) + + def __repr__(self): + return "".format( + options=self.options + ) + + +def in_(options): + """ + A validator that raises a `ValueError` if the initializer is called + with a value that does not belong in the options provided. The check is + performed using ``value in options``. + + :param options: Allowed options. + :type options: list, tuple, `enum.Enum`, ... + + :raises ValueError: With a human readable error message, the attribute (of + type `attr.Attribute`), the expected options, and the value it + got. + + .. versionadded:: 17.1.0 + """ + return _InValidator(options) + + +@attrs(repr=False, slots=False, hash=True) +class _IsCallableValidator(object): + def __call__(self, inst, attr, value): + """ + We use a callable class to be able to change the ``__repr__``. + """ + if not callable(value): + message = ( + "'{name}' must be callable " + "(got {value!r} that is a {actual!r})." + ) + raise NotCallableError( + msg=message.format( + name=attr.name, value=value, actual=value.__class__ + ), + value=value, + ) + + def __repr__(self): + return "" + + +def is_callable(): + """ + A validator that raises a `attr.exceptions.NotCallableError` if the + initializer is called with a value for this particular attribute + that is not callable. + + .. versionadded:: 19.1.0 + + :raises `attr.exceptions.NotCallableError`: With a human readable error + message containing the attribute (`attr.Attribute`) name, + and the value it got. + """ + return _IsCallableValidator() + + +@attrs(repr=False, slots=True, hash=True) +class _DeepIterable(object): + member_validator = attrib(validator=is_callable()) + iterable_validator = attrib( + default=None, validator=optional(is_callable()) + ) + + def __call__(self, inst, attr, value): + """ + We use a callable class to be able to change the ``__repr__``. + """ + if self.iterable_validator is not None: + self.iterable_validator(inst, attr, value) + + for member in value: + self.member_validator(inst, attr, member) + + def __repr__(self): + iterable_identifier = ( + "" + if self.iterable_validator is None + else " {iterable!r}".format(iterable=self.iterable_validator) + ) + return ( + "" + ).format( + iterable_identifier=iterable_identifier, + member=self.member_validator, + ) + + +def deep_iterable(member_validator, iterable_validator=None): + """ + A validator that performs deep validation of an iterable. + + :param member_validator: Validator to apply to iterable members + :param iterable_validator: Validator to apply to iterable itself + (optional) + + .. versionadded:: 19.1.0 + + :raises TypeError: if any sub-validators fail + """ + return _DeepIterable(member_validator, iterable_validator) + + +@attrs(repr=False, slots=True, hash=True) +class _DeepMapping(object): + key_validator = attrib(validator=is_callable()) + value_validator = attrib(validator=is_callable()) + mapping_validator = attrib(default=None, validator=optional(is_callable())) + + def __call__(self, inst, attr, value): + """ + We use a callable class to be able to change the ``__repr__``. + """ + if self.mapping_validator is not None: + self.mapping_validator(inst, attr, value) + + for key in value: + self.key_validator(inst, attr, key) + self.value_validator(inst, attr, value[key]) + + def __repr__(self): + return ( + "" + ).format(key=self.key_validator, value=self.value_validator) + + +def deep_mapping(key_validator, value_validator, mapping_validator=None): + """ + A validator that performs deep validation of a dictionary. + + :param key_validator: Validator to apply to dictionary keys + :param value_validator: Validator to apply to dictionary values + :param mapping_validator: Validator to apply to top-level mapping + attribute (optional) + + .. versionadded:: 19.1.0 + + :raises TypeError: if any sub-validators fail + """ + return _DeepMapping(key_validator, value_validator, mapping_validator) diff --git a/venv-linux/lib/python3.6/site-packages/attr/validators.pyi b/venv-linux/lib/python3.6/site-packages/attr/validators.pyi new file mode 100644 index 0000000..9a22abb --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attr/validators.pyi @@ -0,0 +1,66 @@ +from typing import ( + Container, + List, + Union, + TypeVar, + Type, + Any, + Optional, + Tuple, + Iterable, + Mapping, + Callable, + Match, + AnyStr, + overload, +) +from . import _ValidatorType + +_T = TypeVar("_T") +_T1 = TypeVar("_T1") +_T2 = TypeVar("_T2") +_T3 = TypeVar("_T3") +_I = TypeVar("_I", bound=Iterable) +_K = TypeVar("_K") +_V = TypeVar("_V") +_M = TypeVar("_M", bound=Mapping) + +# To be more precise on instance_of use some overloads. +# If there are more than 3 items in the tuple then we fall back to Any +@overload +def instance_of(type: Type[_T]) -> _ValidatorType[_T]: ... +@overload +def instance_of(type: Tuple[Type[_T]]) -> _ValidatorType[_T]: ... +@overload +def instance_of( + type: Tuple[Type[_T1], Type[_T2]] +) -> _ValidatorType[Union[_T1, _T2]]: ... +@overload +def instance_of( + type: Tuple[Type[_T1], Type[_T2], Type[_T3]] +) -> _ValidatorType[Union[_T1, _T2, _T3]]: ... +@overload +def instance_of(type: Tuple[type, ...]) -> _ValidatorType[Any]: ... +def provides(interface: Any) -> _ValidatorType[Any]: ... +def optional( + validator: Union[_ValidatorType[_T], List[_ValidatorType[_T]]] +) -> _ValidatorType[Optional[_T]]: ... +def in_(options: Container[_T]) -> _ValidatorType[_T]: ... +def and_(*validators: _ValidatorType[_T]) -> _ValidatorType[_T]: ... +def matches_re( + regex: AnyStr, + flags: int = ..., + func: Optional[ + Callable[[AnyStr, AnyStr, int], Optional[Match[AnyStr]]] + ] = ..., +) -> _ValidatorType[AnyStr]: ... +def deep_iterable( + member_validator: _ValidatorType[_T], + iterable_validator: Optional[_ValidatorType[_I]] = ..., +) -> _ValidatorType[_I]: ... +def deep_mapping( + key_validator: _ValidatorType[_K], + value_validator: _ValidatorType[_V], + mapping_validator: Optional[_ValidatorType[_M]] = ..., +) -> _ValidatorType[_M]: ... +def is_callable() -> _ValidatorType[_T]: ... diff --git a/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/AUTHORS.rst b/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/AUTHORS.rst new file mode 100644 index 0000000..f14ef6c --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/AUTHORS.rst @@ -0,0 +1,11 @@ +Credits +======= + +``attrs`` is written and maintained by `Hynek Schlawack `_. + +The development is kindly supported by `Variomedia AG `_. + +A full list of contributors can be found in `GitHub's overview `_. + +It’s the spiritual successor of `characteristic `_ and aspires to fix some of it clunkiness and unfortunate decisions. +Both were inspired by Twisted’s `FancyEqMixin `_ but both are implemented using class decorators because `subclassing is bad for you `_, m’kay? diff --git a/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/INSTALLER b/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/LICENSE b/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/LICENSE new file mode 100644 index 0000000..7ae3df9 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Hynek Schlawack + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/METADATA b/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/METADATA new file mode 100644 index 0000000..a92cacb --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/METADATA @@ -0,0 +1,241 @@ +Metadata-Version: 2.1 +Name: attrs +Version: 20.3.0 +Summary: Classes Without Boilerplate +Home-page: https://www.attrs.org/ +Author: Hynek Schlawack +Author-email: hs@ox.cx +Maintainer: Hynek Schlawack +Maintainer-email: hs@ox.cx +License: MIT +Project-URL: Documentation, https://www.attrs.org/ +Project-URL: Bug Tracker, https://github.com/python-attrs/attrs/issues +Project-URL: Source Code, https://github.com/python-attrs/attrs +Project-URL: Funding, https://github.com/sponsors/hynek +Project-URL: Tidelift, https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi +Keywords: class,attribute,boilerplate +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Natural Language :: English +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* +Description-Content-Type: text/x-rst +Provides-Extra: dev +Requires-Dist: coverage[toml] (>=5.0.2) ; extra == 'dev' +Requires-Dist: hypothesis ; extra == 'dev' +Requires-Dist: pympler ; extra == 'dev' +Requires-Dist: pytest (>=4.3.0) ; extra == 'dev' +Requires-Dist: six ; extra == 'dev' +Requires-Dist: zope.interface ; extra == 'dev' +Requires-Dist: furo ; extra == 'dev' +Requires-Dist: sphinx ; extra == 'dev' +Requires-Dist: pre-commit ; extra == 'dev' +Provides-Extra: docs +Requires-Dist: furo ; extra == 'docs' +Requires-Dist: sphinx ; extra == 'docs' +Requires-Dist: zope.interface ; extra == 'docs' +Provides-Extra: tests +Requires-Dist: coverage[toml] (>=5.0.2) ; extra == 'tests' +Requires-Dist: hypothesis ; extra == 'tests' +Requires-Dist: pympler ; extra == 'tests' +Requires-Dist: pytest (>=4.3.0) ; extra == 'tests' +Requires-Dist: six ; extra == 'tests' +Requires-Dist: zope.interface ; extra == 'tests' +Provides-Extra: tests_no_zope +Requires-Dist: coverage[toml] (>=5.0.2) ; extra == 'tests_no_zope' +Requires-Dist: hypothesis ; extra == 'tests_no_zope' +Requires-Dist: pympler ; extra == 'tests_no_zope' +Requires-Dist: pytest (>=4.3.0) ; extra == 'tests_no_zope' +Requires-Dist: six ; extra == 'tests_no_zope' + +.. image:: https://www.attrs.org/en/latest/_static/attrs_logo.png + :alt: attrs Logo + +====================================== +``attrs``: Classes Without Boilerplate +====================================== + +.. image:: https://readthedocs.org/projects/attrs/badge/?version=stable + :target: https://www.attrs.org/en/stable/?badge=stable + :alt: Documentation Status + +.. image:: https://github.com/python-attrs/attrs/workflows/CI/badge.svg?branch=master + :target: https://github.com/python-attrs/attrs/actions?workflow=CI + :alt: CI Status + +.. image:: https://codecov.io/github/python-attrs/attrs/branch/master/graph/badge.svg + :target: https://codecov.io/github/python-attrs/attrs + :alt: Test Coverage + +.. image:: https://img.shields.io/badge/code%20style-black-000000.svg + :target: https://github.com/psf/black + :alt: Code style: black + +.. teaser-begin + +``attrs`` is the Python package that will bring back the **joy** of **writing classes** by relieving you from the drudgery of implementing object protocols (aka `dunder `_ methods). + +Its main goal is to help you to write **concise** and **correct** software without slowing down your code. + +.. teaser-end + +For that, it gives you a class decorator and a way to declaratively define the attributes on that class: + +.. -code-begin- + +.. code-block:: pycon + + >>> import attr + + >>> @attr.s + ... class SomeClass(object): + ... a_number = attr.ib(default=42) + ... list_of_numbers = attr.ib(factory=list) + ... + ... def hard_math(self, another_number): + ... return self.a_number + sum(self.list_of_numbers) * another_number + + + >>> sc = SomeClass(1, [1, 2, 3]) + >>> sc + SomeClass(a_number=1, list_of_numbers=[1, 2, 3]) + + >>> sc.hard_math(3) + 19 + >>> sc == SomeClass(1, [1, 2, 3]) + True + >>> sc != SomeClass(2, [3, 2, 1]) + True + + >>> attr.asdict(sc) + {'a_number': 1, 'list_of_numbers': [1, 2, 3]} + + >>> SomeClass() + SomeClass(a_number=42, list_of_numbers=[]) + + >>> C = attr.make_class("C", ["a", "b"]) + >>> C("foo", "bar") + C(a='foo', b='bar') + + +After *declaring* your attributes ``attrs`` gives you: + +- a concise and explicit overview of the class's attributes, +- a nice human-readable ``__repr__``, +- a complete set of comparison methods (equality and ordering), +- an initializer, +- and much more, + +*without* writing dull boilerplate code again and again and *without* runtime performance penalties. + +On Python 3.6 and later, you can often even drop the calls to ``attr.ib()`` by using `type annotations `_. + +This gives you the power to use actual classes with actual types in your code instead of confusing ``tuple``\ s or `confusingly behaving `_ ``namedtuple``\ s. +Which in turn encourages you to write *small classes* that do `one thing well `_. +Never again violate the `single responsibility principle `_ just because implementing ``__init__`` et al is a painful drag. + + +.. -getting-help- + +Getting Help +============ + +Please use the ``python-attrs`` tag on `StackOverflow `_ to get help. + +Answering questions of your fellow developers is also a great way to help the project! + + +.. -project-information- + +Project Information +=================== + +``attrs`` is released under the `MIT `_ license, +its documentation lives at `Read the Docs `_, +the code on `GitHub `_, +and the latest release on `PyPI `_. +It’s rigorously tested on Python 2.7, 3.5+, and PyPy. + +We collect information on **third-party extensions** in our `wiki `_. +Feel free to browse and add your own! + +If you'd like to contribute to ``attrs`` you're most welcome and we've written `a little guide `_ to get you started! + + +``attrs`` for Enterprise +------------------------ + +Available as part of the Tidelift Subscription. + +The maintainers of ``attrs`` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. +Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use. +`Learn more. `_ + + +Release Information +=================== + +20.3.0 (2020-11-05) +------------------- + +Backward-incompatible Changes +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- ``attr.define()``, ``attr.frozen()``, ``attr.mutable()``, and ``attr.field()`` remain **provisional**. + + This release does **not** change change anything about them and they are already used widely in production though. + + If you wish to use them together with mypy, you can simply drop `this plugin `_ into your project. + + Feel free to provide feedback to them in the linked issue #668. + + We will release the ``attrs`` namespace once we have the feeling that the APIs have properly settled. + `#668 `_ + + +Changes +^^^^^^^ + +- ``attr.s()`` now has a *field_transformer* hook that is called for all ``Attribute``\ s and returns a (modified or updated) list of ``Attribute`` instances. + ``attr.asdict()`` has a *value_serializer* hook that can change the way values are converted. + Both hooks are meant to help with data (de-)serialization workflows. + `#653 `_ +- ``kw_only=True`` now works on Python 2. + `#700 `_ +- ``raise from`` now works on frozen classes on PyPy. + `#703 `_, + `#712 `_ +- ``attr.asdict()`` and ``attr.astuple()`` now treat ``frozenset``\ s like ``set``\ s with regards to the *retain_collection_types* argument. + `#704 `_ +- The type stubs for ``attr.s()`` and ``attr.make_class()`` are not missing the *collect_by_mro* argument anymore. + `#711 `_ + +`Full changelog `_. + +Credits +======= + +``attrs`` is written and maintained by `Hynek Schlawack `_. + +The development is kindly supported by `Variomedia AG `_. + +A full list of contributors can be found in `GitHub's overview `_. + +It’s the spiritual successor of `characteristic `_ and aspires to fix some of it clunkiness and unfortunate decisions. +Both were inspired by Twisted’s `FancyEqMixin `_ but both are implemented using class decorators because `subclassing is bad for you `_, m’kay? + + diff --git a/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/RECORD b/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/RECORD new file mode 100644 index 0000000..eb17069 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/RECORD @@ -0,0 +1,39 @@ +attr/__init__.py,sha256=70KmZOgz2sUvtRTC_IuXEeN2ttOyBWHn4XA59aqGXPs,1568 +attr/__init__.pyi,sha256=ca_4sg7z0e_EL7ehy-flXVGAju5PBX2hVo51dUmPMi0,12986 +attr/_compat.py,sha256=rZhpP09xbyWSzMv796XQbryIr21oReJFvA70G3lrHxg,7308 +attr/_config.py,sha256=_KvW0mQdH2PYjHc0YfIUaV_o2pVfM7ziMEYTxwmEhOA,514 +attr/_funcs.py,sha256=PvFQlflEswO_qIR2sUr4a4x8ggQpEoDKe3YKM2rLJu4,13081 +attr/_make.py,sha256=61XB4-SHQpFbWbStGWotTTbzVT2m49DUovRgnxpMqmU,88313 +attr/_next_gen.py,sha256=x6TU2rVOXmFmrNNvkfshJsxyRbAAK0wDI4SJV2OI97c,4138 +attr/_version_info.py,sha256=azMi1lNelb3cJvvYUMXsXVbUANkRzbD5IEiaXVpeVr4,2162 +attr/_version_info.pyi,sha256=x_M3L3WuB7r_ULXAWjx959udKQ4HLB8l-hsc1FDGNvk,209 +attr/converters.py,sha256=CaK6iLtEMmemrqU8LQ1D2nWtbo9dGPAv4UaZ0rFzhOA,2214 +attr/converters.pyi,sha256=fVGSfawF3NMy2EBApkC7dAwMuujWCHnGEnnAgsbkVpg,380 +attr/exceptions.py,sha256=gmlET97ikqdQVvy7Ff9p7zVvqc2SsNtTd-r30pva1GE,1950 +attr/exceptions.pyi,sha256=zZq8bCUnKAy9mDtBEw42ZhPhAUIHoTKedDQInJD883M,539 +attr/filters.py,sha256=weDxwATsa69T_0bPVjiM1fGsciAMQmwhY5G8Jm5BxuI,1098 +attr/filters.pyi,sha256=xDpmKQlFdssgxGa5tsl1ADh_3zwAwAT4vUhd8h-8-Tk,214 +attr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +attr/setters.py,sha256=0ElzHwdVK3dsYcQi2CXkFvhx8fNxUI5OVhw8SWeaKmA,1434 +attr/setters.pyi,sha256=SYr6adhx4f0dSkmmBICg6eK8WMev5jT-KJQJTdul078,567 +attr/validators.py,sha256=6DBx1jt4oZxx1ppvx6JWqm9-UAsYpXC4HTwxJilCeRg,11497 +attr/validators.pyi,sha256=vZgsJqUwrJevh4v_Hd7_RSXqDrBctE6-3AEZ7uYKodo,1868 +attrs-20.3.0.dist-info/AUTHORS.rst,sha256=wsqCNbGz_mklcJrt54APIZHZpoTIJLkXqEhhn4Nd8hc,752 +attrs-20.3.0.dist-info/LICENSE,sha256=v2WaKLSSQGAvVrvfSQy-LsUJsVuY-Z17GaUsdA4yeGM,1082 +attrs-20.3.0.dist-info/METADATA,sha256=2XTmALrRRbIZj9J8pJgpKYnyATu_NAL8vfUnqRFpE5w,10220 +attrs-20.3.0.dist-info/WHEEL,sha256=ADKeyaGyKF5DwBNE0sRE5pvW-bSkFMJfBuhzZ3rceP4,110 +attrs-20.3.0.dist-info/top_level.txt,sha256=tlRYMddkRlKPqJ96wP2_j9uEsmcNHgD2SbuWd4CzGVU,5 +attrs-20.3.0.dist-info/RECORD,, +attrs-20.3.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +attr/__pycache__/_config.cpython-36.pyc,, +attr/__pycache__/_next_gen.cpython-36.pyc,, +attr/__pycache__/__init__.cpython-36.pyc,, +attr/__pycache__/validators.cpython-36.pyc,, +attr/__pycache__/converters.cpython-36.pyc,, +attr/__pycache__/_compat.cpython-36.pyc,, +attr/__pycache__/_version_info.cpython-36.pyc,, +attr/__pycache__/_make.cpython-36.pyc,, +attr/__pycache__/setters.cpython-36.pyc,, +attr/__pycache__/exceptions.cpython-36.pyc,, +attr/__pycache__/_funcs.cpython-36.pyc,, +attr/__pycache__/filters.cpython-36.pyc,, diff --git a/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/WHEEL b/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/WHEEL new file mode 100644 index 0000000..6d38aa0 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.35.1) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/top_level.txt b/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/top_level.txt new file mode 100644 index 0000000..66a062d --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/attrs-20.3.0.dist-info/top_level.txt @@ -0,0 +1 @@ +attr diff --git a/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/DESCRIPTION.rst b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/DESCRIPTION.rst new file mode 100644 index 0000000..c0f044d --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/DESCRIPTION.rst @@ -0,0 +1,70 @@ +Chardet: The Universal Character Encoding Detector +-------------------------------------------------- + +.. image:: https://img.shields.io/travis/chardet/chardet/stable.svg + :alt: Build status + :target: https://travis-ci.org/chardet/chardet + +.. image:: https://img.shields.io/coveralls/chardet/chardet/stable.svg + :target: https://coveralls.io/r/chardet/chardet + +.. image:: https://img.shields.io/pypi/v/chardet.svg + :target: https://warehouse.python.org/project/chardet/ + :alt: Latest version on PyPI + +.. image:: https://img.shields.io/pypi/l/chardet.svg + :alt: License + + +Detects + - ASCII, UTF-8, UTF-16 (2 variants), UTF-32 (4 variants) + - Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (Traditional and Simplified Chinese) + - EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP (Japanese) + - EUC-KR, ISO-2022-KR (Korean) + - KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (Cyrillic) + - ISO-8859-5, windows-1251 (Bulgarian) + - ISO-8859-1, windows-1252 (Western European languages) + - ISO-8859-7, windows-1253 (Greek) + - ISO-8859-8, windows-1255 (Visual and Logical Hebrew) + - TIS-620 (Thai) + +.. note:: + Our ISO-8859-2 and windows-1250 (Hungarian) probers have been temporarily + disabled until we can retrain the models. + +Requires Python 2.6, 2.7, or 3.3+. + +Installation +------------ + +Install from `PyPI `_:: + + pip install chardet + +Documentation +------------- + +For users, docs are now available at https://chardet.readthedocs.io/. + +Command-line Tool +----------------- + +chardet comes with a command-line script which reports on the encodings of one +or more files:: + + % chardetect somefile someotherfile + somefile: windows-1252 with confidence 0.5 + someotherfile: ascii with confidence 1.0 + +About +----- + +This is a continuation of Mark Pilgrim's excellent chardet. Previously, two +versions needed to be maintained: one that supported python 2.x and one that +supported python 3.x. We've recently merged with `Ian Cordasco `_'s +`charade `_ fork, so now we have one +coherent version that works for Python 2.6+. + +:maintainer: Dan Blanchard + + diff --git a/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/INSTALLER b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/METADATA b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/METADATA new file mode 100644 index 0000000..1427867 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/METADATA @@ -0,0 +1,96 @@ +Metadata-Version: 2.0 +Name: chardet +Version: 3.0.4 +Summary: Universal encoding detector for Python 2 and 3 +Home-page: https://github.com/chardet/chardet +Author: Daniel Blanchard +Author-email: dan.blanchard@gmail.com +License: LGPL +Keywords: encoding,i18n,xml +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL) +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Processing :: Linguistic + +Chardet: The Universal Character Encoding Detector +-------------------------------------------------- + +.. image:: https://img.shields.io/travis/chardet/chardet/stable.svg + :alt: Build status + :target: https://travis-ci.org/chardet/chardet + +.. image:: https://img.shields.io/coveralls/chardet/chardet/stable.svg + :target: https://coveralls.io/r/chardet/chardet + +.. image:: https://img.shields.io/pypi/v/chardet.svg + :target: https://warehouse.python.org/project/chardet/ + :alt: Latest version on PyPI + +.. image:: https://img.shields.io/pypi/l/chardet.svg + :alt: License + + +Detects + - ASCII, UTF-8, UTF-16 (2 variants), UTF-32 (4 variants) + - Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (Traditional and Simplified Chinese) + - EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP (Japanese) + - EUC-KR, ISO-2022-KR (Korean) + - KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (Cyrillic) + - ISO-8859-5, windows-1251 (Bulgarian) + - ISO-8859-1, windows-1252 (Western European languages) + - ISO-8859-7, windows-1253 (Greek) + - ISO-8859-8, windows-1255 (Visual and Logical Hebrew) + - TIS-620 (Thai) + +.. note:: + Our ISO-8859-2 and windows-1250 (Hungarian) probers have been temporarily + disabled until we can retrain the models. + +Requires Python 2.6, 2.7, or 3.3+. + +Installation +------------ + +Install from `PyPI `_:: + + pip install chardet + +Documentation +------------- + +For users, docs are now available at https://chardet.readthedocs.io/. + +Command-line Tool +----------------- + +chardet comes with a command-line script which reports on the encodings of one +or more files:: + + % chardetect somefile someotherfile + somefile: windows-1252 with confidence 0.5 + someotherfile: ascii with confidence 1.0 + +About +----- + +This is a continuation of Mark Pilgrim's excellent chardet. Previously, two +versions needed to be maintained: one that supported python 2.x and one that +supported python 3.x. We've recently merged with `Ian Cordasco `_'s +`charade `_ fork, so now we have one +coherent version that works for Python 2.6+. + +:maintainer: Dan Blanchard + + diff --git a/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/RECORD b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/RECORD new file mode 100644 index 0000000..6b71a35 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/RECORD @@ -0,0 +1,91 @@ +chardet/__init__.py,sha256=YsP5wQlsHJ2auF1RZJfypiSrCA7_bQiRm3ES_NI76-Y,1559 +chardet/big5freq.py,sha256=D_zK5GyzoVsRes0HkLJziltFQX0bKCLOrFe9_xDvO_8,31254 +chardet/big5prober.py,sha256=kBxHbdetBpPe7xrlb-e990iot64g_eGSLd32lB7_h3M,1757 +chardet/chardistribution.py,sha256=3woWS62KrGooKyqz4zQSnjFbJpa6V7g02daAibTwcl8,9411 +chardet/charsetgroupprober.py,sha256=6bDu8YIiRuScX4ca9Igb0U69TA2PGXXDej6Cc4_9kO4,3787 +chardet/charsetprober.py,sha256=KSmwJErjypyj0bRZmC5F5eM7c8YQgLYIjZXintZNstg,5110 +chardet/codingstatemachine.py,sha256=VYp_6cyyki5sHgXDSZnXW4q1oelHc3cu9AyQTX7uug8,3590 +chardet/compat.py,sha256=PKTzHkSbtbHDqS9PyujMbX74q1a8mMpeQTDVsQhZMRw,1134 +chardet/cp949prober.py,sha256=TZ434QX8zzBsnUvL_8wm4AQVTZ2ZkqEEQL_lNw9f9ow,1855 +chardet/enums.py,sha256=Aimwdb9as1dJKZaFNUH2OhWIVBVd6ZkJJ_WK5sNY8cU,1661 +chardet/escprober.py,sha256=kkyqVg1Yw3DIOAMJ2bdlyQgUFQhuHAW8dUGskToNWSc,3950 +chardet/escsm.py,sha256=RuXlgNvTIDarndvllNCk5WZBIpdCxQ0kcd9EAuxUh84,10510 +chardet/eucjpprober.py,sha256=iD8Jdp0ISRjgjiVN7f0e8xGeQJ5GM2oeZ1dA8nbSeUw,3749 +chardet/euckrfreq.py,sha256=-7GdmvgWez4-eO4SuXpa7tBiDi5vRXQ8WvdFAzVaSfo,13546 +chardet/euckrprober.py,sha256=MqFMTQXxW4HbzIpZ9lKDHB3GN8SP4yiHenTmf8g_PxY,1748 +chardet/euctwfreq.py,sha256=No1WyduFOgB5VITUA7PLyC5oJRNzRyMbBxaKI1l16MA,31621 +chardet/euctwprober.py,sha256=13p6EP4yRaxqnP4iHtxHOJ6R2zxHq1_m8hTRjzVZ95c,1747 +chardet/gb2312freq.py,sha256=JX8lsweKLmnCwmk8UHEQsLgkr_rP_kEbvivC4qPOrlc,20715 +chardet/gb2312prober.py,sha256=gGvIWi9WhDjE-xQXHvNIyrnLvEbMAYgyUSZ65HUfylw,1754 +chardet/hebrewprober.py,sha256=c3SZ-K7hvyzGY6JRAZxJgwJ_sUS9k0WYkvMY00YBYFo,13838 +chardet/jisfreq.py,sha256=vpmJv2Bu0J8gnMVRPHMFefTRvo_ha1mryLig8CBwgOg,25777 +chardet/jpcntx.py,sha256=PYlNqRUQT8LM3cT5FmHGP0iiscFlTWED92MALvBungo,19643 +chardet/langbulgarianmodel.py,sha256=1HqQS9Pbtnj1xQgxitJMvw8X6kKr5OockNCZWfEQrPE,12839 +chardet/langcyrillicmodel.py,sha256=LODajvsetH87yYDDQKA2CULXUH87tI223dhfjh9Zx9c,17948 +chardet/langgreekmodel.py,sha256=8YAW7bU8YwSJap0kIJSbPMw1BEqzGjWzqcqf0WgUKAA,12688 +chardet/langhebrewmodel.py,sha256=JSnqmE5E62tDLTPTvLpQsg5gOMO4PbdWRvV7Avkc0HA,11345 +chardet/langhungarianmodel.py,sha256=RhapYSG5l0ZaO-VV4Fan5sW0WRGQqhwBM61yx3yxyOA,12592 +chardet/langthaimodel.py,sha256=8l0173Gu_W6G8mxmQOTEF4ls2YdE7FxWf3QkSxEGXJQ,11290 +chardet/langturkishmodel.py,sha256=W22eRNJsqI6uWAfwXSKVWWnCerYqrI8dZQTm_M0lRFk,11102 +chardet/latin1prober.py,sha256=S2IoORhFk39FEFOlSFWtgVybRiP6h7BlLldHVclNkU8,5370 +chardet/mbcharsetprober.py,sha256=AR95eFH9vuqSfvLQZN-L5ijea25NOBCoXqw8s5O9xLQ,3413 +chardet/mbcsgroupprober.py,sha256=h6TRnnYq2OxG1WdD5JOyxcdVpn7dG0q-vB8nWr5mbh4,2012 +chardet/mbcssm.py,sha256=SY32wVIF3HzcjY3BaEspy9metbNSKxIIB0RKPn7tjpI,25481 +chardet/sbcharsetprober.py,sha256=LDSpCldDCFlYwUkGkwD2oFxLlPWIWXT09akH_2PiY74,5657 +chardet/sbcsgroupprober.py,sha256=1IprcCB_k1qfmnxGC6MBbxELlKqD3scW6S8YIwdeyXA,3546 +chardet/sjisprober.py,sha256=IIt-lZj0WJqK4rmUZzKZP4GJlE8KUEtFYVuY96ek5MQ,3774 +chardet/universaldetector.py,sha256=qL0174lSZE442eB21nnktT9_VcAye07laFWUeUrjttY,12485 +chardet/utf8prober.py,sha256=IdD8v3zWOsB8OLiyPi-y_fqwipRFxV9Nc1eKBLSuIEw,2766 +chardet/version.py,sha256=sp3B08mrDXB-pf3K9fqJ_zeDHOCLC8RrngQyDFap_7g,242 +chardet/cli/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 +chardet/cli/chardetect.py,sha256=YBO8L4mXo0WR6_-Fjh_8QxPBoEBNqB9oNxNrdc54AQs,2738 +chardet-3.0.4.dist-info/DESCRIPTION.rst,sha256=PQ4sBsMyKFZkjC6QpmbpLn0UtCNyeb-ZqvCGEgyZMGk,2174 +chardet-3.0.4.dist-info/METADATA,sha256=RV_2I4B1Z586DL8oVO5Kp7X5bUdQ5EuKAvNoAEF8wSw,3239 +chardet-3.0.4.dist-info/RECORD,, +chardet-3.0.4.dist-info/WHEEL,sha256=o2k-Qa-RMNIJmUdIc7KU6VWR_ErNRbWNlxDIpl7lm34,110 +chardet-3.0.4.dist-info/entry_points.txt,sha256=fAMmhu5eJ-zAJ-smfqQwRClQ3-nozOCmvJ6-E8lgGJo,60 +chardet-3.0.4.dist-info/metadata.json,sha256=0htbRM18ujyGZDdfowgAqj6Hq2eQtwzwyhaEveKntgo,1375 +chardet-3.0.4.dist-info/top_level.txt,sha256=AowzBbZy4x8EirABDdJSLJZMkJ_53iIag8xfKR6D7kI,8 +../../../bin/chardetect,sha256=3S5NdhUZ9Z-1rLsDNlx7hPMj1D_lX2WZ2A2cgN7rb8w,260 +chardet-3.0.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +chardet/__pycache__/enums.cpython-36.pyc,, +chardet/__pycache__/hebrewprober.cpython-36.pyc,, +chardet/__pycache__/langturkishmodel.cpython-36.pyc,, +chardet/__pycache__/langcyrillicmodel.cpython-36.pyc,, +chardet/__pycache__/escprober.cpython-36.pyc,, +chardet/__pycache__/cp949prober.cpython-36.pyc,, +chardet/__pycache__/euctwfreq.cpython-36.pyc,, +chardet/__pycache__/sjisprober.cpython-36.pyc,, +chardet/__pycache__/charsetprober.cpython-36.pyc,, +chardet/__pycache__/langthaimodel.cpython-36.pyc,, +chardet/__pycache__/compat.cpython-36.pyc,, +chardet/__pycache__/universaldetector.cpython-36.pyc,, +chardet/__pycache__/chardistribution.cpython-36.pyc,, +chardet/__pycache__/charsetgroupprober.cpython-36.pyc,, +chardet/__pycache__/eucjpprober.cpython-36.pyc,, +chardet/__pycache__/__init__.cpython-36.pyc,, +chardet/__pycache__/mbcharsetprober.cpython-36.pyc,, +chardet/__pycache__/euckrprober.cpython-36.pyc,, +chardet/__pycache__/langgreekmodel.cpython-36.pyc,, +chardet/__pycache__/escsm.cpython-36.pyc,, +chardet/__pycache__/langbulgarianmodel.cpython-36.pyc,, +chardet/__pycache__/gb2312prober.cpython-36.pyc,, +chardet/__pycache__/euckrfreq.cpython-36.pyc,, +chardet/__pycache__/sbcharsetprober.cpython-36.pyc,, +chardet/__pycache__/codingstatemachine.cpython-36.pyc,, +chardet/__pycache__/utf8prober.cpython-36.pyc,, +chardet/__pycache__/langhungarianmodel.cpython-36.pyc,, +chardet/__pycache__/jisfreq.cpython-36.pyc,, +chardet/__pycache__/euctwprober.cpython-36.pyc,, +chardet/__pycache__/gb2312freq.cpython-36.pyc,, +chardet/__pycache__/mbcsgroupprober.cpython-36.pyc,, +chardet/__pycache__/latin1prober.cpython-36.pyc,, +chardet/__pycache__/langhebrewmodel.cpython-36.pyc,, +chardet/__pycache__/mbcssm.cpython-36.pyc,, +chardet/__pycache__/sbcsgroupprober.cpython-36.pyc,, +chardet/__pycache__/big5freq.cpython-36.pyc,, +chardet/__pycache__/jpcntx.cpython-36.pyc,, +chardet/__pycache__/version.cpython-36.pyc,, +chardet/__pycache__/big5prober.cpython-36.pyc,, +chardet/cli/__pycache__/__init__.cpython-36.pyc,, +chardet/cli/__pycache__/chardetect.cpython-36.pyc,, diff --git a/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/WHEEL b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/WHEEL new file mode 100644 index 0000000..8b6dd1b --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.29.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/entry_points.txt b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/entry_points.txt new file mode 100644 index 0000000..a884269 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +chardetect = chardet.cli.chardetect:main + diff --git a/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/metadata.json b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/metadata.json new file mode 100644 index 0000000..8cdf025 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/metadata.json @@ -0,0 +1 @@ +{"classifiers": ["Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Text Processing :: Linguistic"], "extensions": {"python.commands": {"wrap_console": {"chardetect": "chardet.cli.chardetect:main"}}, "python.details": {"contacts": [{"email": "dan.blanchard@gmail.com", "name": "Daniel Blanchard", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/chardet/chardet"}}, "python.exports": {"console_scripts": {"chardetect": "chardet.cli.chardetect:main"}}}, "generator": "bdist_wheel (0.29.0)", "keywords": ["encoding", "i18n", "xml"], "license": "LGPL", "metadata_version": "2.0", "name": "chardet", "summary": "Universal encoding detector for Python 2 and 3", "test_requires": [{"requires": ["hypothesis", "pytest"]}], "version": "3.0.4"} \ No newline at end of file diff --git a/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/top_level.txt b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/top_level.txt new file mode 100644 index 0000000..79236f2 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet-3.0.4.dist-info/top_level.txt @@ -0,0 +1 @@ +chardet diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__init__.py b/venv-linux/lib/python3.6/site-packages/chardet/__init__.py new file mode 100644 index 0000000..0f9f820 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/__init__.py @@ -0,0 +1,39 @@ +######################## BEGIN LICENSE BLOCK ######################## +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + + +from .compat import PY2, PY3 +from .universaldetector import UniversalDetector +from .version import __version__, VERSION + + +def detect(byte_str): + """ + Detect the encoding of the given byte string. + + :param byte_str: The byte sequence to examine. + :type byte_str: ``bytes`` or ``bytearray`` + """ + if not isinstance(byte_str, bytearray): + if not isinstance(byte_str, bytes): + raise TypeError('Expected object of type bytes or bytearray, got: ' + '{0}'.format(type(byte_str))) + else: + byte_str = bytearray(byte_str) + detector = UniversalDetector() + detector.feed(byte_str) + return detector.close() diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/__init__.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b44dad56208d4a4defd9e166e7f2df08d4f14975 GIT binary patch literal 786 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 M|2~2LuTS8A09qD67XSbN literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/big5prober.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/big5prober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c317cb642ec5a1a5f2beb9a4882cafb9f316aa26 GIT binary patch literal 1062 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 OpOu@>4XfX1ZsNc5^!aH3 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/charsetgroupprober.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/charsetgroupprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8e29168ab65ee357f5186f6325bbb8e7722e11f GIT binary patch literal 2169 zcmb_d&2Jk;6rb6dU9TNGEhcRPL?T5+;EE<7A^{TpKrO8};G!m_k_8$$p2=dz@yE=% zO3X$=vZbE5ap1(AOaBr6gOxZSPCaqw#P7|fNm{~&4%CpqW`d!i*cyT`Q9a?Z3gVkTNrhnuVsJ>&SK!Sm`@ zcDUUgB%5hFH5k`!f7iB~CZ%a(JJ@vm&}sCz2VjP^xMrMK8=*E7nzA!@K;1N!F^srgM4y=n~aRL zSW;qtoLHZE1k#5kvl$wrV%XZkxfBy~J5E7j?@ zv8;Y&e_vlu_eSfZ?&#X~q}$imrn~0-w7v6qy@LR2lfLkFCQZoaLhst>z{XH{8RSS{ zyv`&1rf>W^Kx@zK?odYQp+J#K6fD;SI|&ZLp+bf4W<8~$Ey}+*` zm@3SmpeMBW2+EWguRH>x@Kxl)DVsKe)-CHHRI()uiWr90z!O`hi3(UA6_KatT--7>wLO=hU@;gW53B9qT3+13I-3ETL$Ok zSur9HNa_Uu25&Zmw=G{xOsYD=!A@73LC54($`X80gZ3WE!dqULdSdSqj`)DiB3D@u zc}pdqzIleFr`7!*2HRJ0WF8ZyC++0FEWChCpMYMr@GKZTS9M%(1R)|H&L1G`?^ECa znZaR@1+G4hv!KV_>;4Vc%=n?mgu9BdNJUTX2KH7)6$v=?B7~i0OPGxT!9W3q09mYq zj|pTk_QYE3avRewd{r*K8pn?)Vfelwn|D3tJp39J4>9`+EX(DNG1?OF^Z4%lhs`_c zi>)HDp`*r@N6q_N>dVhPH1kOL$%ZTd8E+q?22mnj>U15*WRufmbaK z17C-7{~PQMk%|XCHT|k5)oj0WD;5CQ%bXCU=?L z$RtuK5Og`-@Zpy3CoOP3RY}xLp5FUoy7cs~o5}Y}B+hRpFxWrS+S_h*FicmAN}pc9 z5dV`>TD^{OqgsTOGGs3idyN>ig;QCK`oknKHV?Jgo+Os)%j4VOB6maNx!Y L>8FFLyej?y+>O)> literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/charsetprober.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/charsetprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..827f05dfc1108235f7b281b81cae6519959f8955 GIT binary patch literal 3395 zcmai1TW=f36`s9{qAA&tW2bS{cF;6v*hF%Q07YxKN*viu92ja~sR%&BT`hNp8Gg92 zQIG!gui)#;jQyLPD=zvUSG@!WG_gCOqk$IW13E zhpg$pz%F+1!b07&ipCczYsYE#P={JZG&L^{Iv?Z9Q&f_HHEY?zYB}PHaD@BZYJs`% zpR<-HeX%BL&)J#PS`+J{4q6Sg3!-6Y>taJ}f>xIo#6@w*&>HB!Cbmp}1O3b5b<^Jz zHk7gscO)S)wwoe@Go>AWu3=FM< zreF9$PF5Bdk}&NCojB1_6>CY>?ZN@YdROXu=z~@Zf;8;QASisAm8xkMZZ4CK@*(Ii zOf}Ga^NZ`cKe#@K2RrRyoQR$Asr*2PoyXTBs4k>lYICUv#+2Q`i1^28tb^buq&)Ft zmXF`~>XOyF^JNho78PnMqe%(PPRK}mZlt5=*oyVrcaHAtAKg9pRCyRTEp-8nQM;@* zXqBfV)OsJ?+<4U*UtX4P=9h$%0>4;w~ z&^9&|PJ7sS*)X>wrTDOtW{tO&rP1_iv*;`)>|_=))^~c(1k=weDfY|WGxMv(81E4p z?Sn2DnDSk2+(c{!QI>XMA=60Sz=rveZ7-X)yl_c62{mW8g$@OdK(?5$GiM5up^I~n z*D&+$1Ge+~ht2o?ORndLd|S!F$%kzmG3|WW*;h&+1--c23)&+sgDg!(zrxC#BrCwV!@Iv2U}7pG=*Jb>d7MWIg|n_M1pR z7Q<*w*fg5D6ZgbDV-2Rhn7G0{MJqf|X%Di4#U6d{OJoe#UK{=r5UBH6`BHKrJ8>$x z?kS0SG>|#ZI-KmwZ&d5TWY7!SQs3Y*?Iv;F<8w;RAA~#OTRW|X)#5lszDYwJXK9$+ z;7dbJ00<*2z{bBn+xf@e7W?|4I+Y3{9!oXSJ>)7blU(u#zbhromRE9)dJ@bBL(Kt= zj#NAfQ{E<1vSGKUxz0F3Nr!RDL!L_&m!>_*l*nOr68B>*Ma8Z?;-v=pEYOaahemm@;qUCLNsvEy-+WN=!#b&!(8(Wetm`YyZjcIka}@lG0R5(&^fKsd>1_iV#eEC$%R1|A*ZX&Gd87vmH()Cglp7DI)Qd6ua z@N+<#zKqsuGwdz-KQMbgfyDfERP3Vf;X1PG)|TI}wk+4$w8!tRgzySB6^<#FRyh7E z1|^P#HMNC3b)Nn~~v0D_0_}%+P?zAi5pN}Wd%?~&Ey9oVd^~E2KMdz&-1lneX$l9p&tGd z39vfh`%({8nj^%bY%ro!aC{7S9Uqsmt|Z|JL5kD|3L@})+|EL$Vm40_JWK_rylL{v zB2s4nqVT5ZLxOoCWy){vom;X9zFSG20S2W4^CKc&=hX;TZJtOfd!s`$>ULsTV zLz?{os-|DweVkVKaT@5bTet%y9~UkuRn!m+D*^Y`3~*0k-3w;7M36{Lsh;ls{70x* z!w1S-d&|CL*YFUmS+28XZ{n+44Tt*U=1Tmn;!2O*i)x)Ttp`Cr6T^g_vW*~kGz^p3 z!*=WNv)|l5+W+lQaP-;zI~d%%tv0bmU7~$8yj2HM>5+PkX!r-h6lDf=g=QP{vWcU< z#El}{7E`yYAJThCBPb#ye&Oe7r`hP3H4tI_&4= jYu3-&CoF--l{GF0>iYLrS7Eno&r~ zi4AAvd_$Mr_m>9fs;m4$S3Q@bu`F8+ItDo$KF+=OoO>zX-`eV=fBcoSdW`+e&OHr` zAEDV>=p>Ut#)eFWGRlH!I1B^!6O#?ue9L50MW@lQA%k7kZ@t5Aw*4+Z-w(>}bCFJT zu6CVpDy60Ri77yCq|}fp=SWVb43^0Bh8XwSjz3k$wTzDaS#JToVf`CC;l@v7TKyY9*VR)dv56gND=%{WLk2l zr1-3WKYcGEs4*Z~89ot~?<)m5q{^KhX(b1hXV0J2ZY})ErB0D2n7YBEarS z;#_pk10YU2Qz=ZQ#1G+-TUI&B5v)pO^*D!EKJC0T!d->}!?ZgucmWK9Fs;={le6UH zuO=EvnL>fI$en;_j)*1~FT&NSPKslT&r~>Nlo+4RQ0)LvLzN(Cj^QC&39z zaO0v6d>=}NapW2YP1ic5`SuArh)-F7n;BPMxNZD}yHU21DT*K~dr3MsCL!??C|G|} z>Lr=V%gt)tr*_%Sit!j1XSp#}?q`gZDdQx`#Z)Cp*`igR^JN=WH zD{%LpZ|}P4?Cwm@?(ENXChr`-Q1_e|9o{8#NQ~v%U!&gW;u;>zj>weGwM&u*L_ilE z3tEf6Zg70_@~u9oPoxw!J@h`~kRTj8AfCV+_zAZAk%=%{HvLUxVvPHN!Eas_f{(*| zNS|BizDKiOp5XZU8uOlsGyUk7lEA%w6AYjY)Vl#4Z?HEZz5*8>L@z>fPvR?S`1J_u zAsS1Xw8PIeZm^Fq`w4p!`R^vyX&>_7gf-YfL$)3uOpidnw(ae5GtGpxiKCwkp9E#E z7P*=%yVZ^nZod1Ik;BG z@)~m4Cpj+sgeXDU|BBfXS@=OJ`}!*zR4qs;;&OdvmDfGIFM*1k zWKjgW=iK`Gzua1L?*IB0XZROkF2?Wo&wK$lemip|Tw8cG(sqB-Y+`TON$AFzXLM6^ zljP-GWQ%*Fog}hIlf;nzzO2km8huLL=X5rnnPR4lJMyN_rO{a~8LF)>(JYl}{Ba|Q v<2Z_YXpvv*H_Zk?HB~;J+N#D|#r^^QAM@+$K+E`>%H{9K6-y@Kup9jg+k*F| literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/compat.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c7b215faed8393fda7ef134c01765ce55a806a2 GIT binary patch literal 302 zcmYj}Jx;?w5QS%d96M3cAjBDP5e%e7h>8*+g@$b`+dCE}{#os=Bg|pwxzb8hRJj5b zyHLQ4=6j>}q_C z?vK4geZnw7{^N2HOR|M@cJM85cL=Qyw<*=sKbm-?bH~hN+;WfFG((>^eLXmK|9Ba& z@uAf&9{Z*mB)X(54CcX_TYRy(ofNvLoGhAm(92L7@O6>dPGzc5>vC*bxqjW@xh?8_ nRy`G3qW#mMQ-wWKlS{6;L5?k6pZEfEC~GQoC`X4KtO z>R+(umm;xZ#V@epUZ__M-g5fw2Y=lm$@=fr|1@+@a(>5uu3Ah=^pk@M9)AW7228D7fm=`oYfU;qIsH z%vhaGDw|Dw^Y4`PXA~l?> z4EMJ-xA=I(M<2I$KBN%h@9-~>*#sa-Oa+O(b8=JH9FKG+Llts12?($aDP{{_~Ho?HkY~%wKUQK4}p>D0M;eW zQyPC&Q?o`X9_*Yn_lH#yR4&|T~@>-FXAM_da2(#n7UgkWXib^5wa{i@C zRCD5Js~OM;owYN43*744Fx9<_rle9S=rU4qnOF}ovf!lf2!KINFxq9^z}ZkOH(kS8 z3TQ;J)`-O5&yqJki<3~jnoln1YMQFCA$0^+1A;<y==;R^$?Rm1$3!< F{6FH?{lWkM literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/enums.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/enums.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9299e36c1c11a51b20e522fb0f8322a5f24a94e8 GIT binary patch literal 2560 zcmbVOOK;mo5T;%f#n_4C9$TOb^nnU!l%T!2L18^;o3Tt8B3(4PP&9WfF{VgmmvmqO zJte=R_x^+amIZq1Nq?d5nU&;6>=;QY%y4Hp+#P;1`;ER`UpK>_fAfFRHSKrp%2kH( zHi#I5qS`>))o6hh-)OYR3a?9pBG@Hb2D_~664({0gRLvO40e?oU>nM=fL)^|*ru{| zu~8f;=0ie2a8~gtX!yQ7+^w8YGS5mAO5d1X0`w(@EV7;R`RW0*tmn#3!Jb zHYmWi7inQoqQya(mIf7C9_X|JvFg&alWCs0S&*@rYZAD;aU=+Xs0n9N&IC&`jGqx2 zot!WZCK2c^NI>!=I%8Y}F@gA5n5CSA5b-f1QPNPW%^?JBjuFj^pqzSD8or+d6XyHU z^!-Un^BBi#zW*{0;^mX7@6$9ym&2pJ3%G`>OFFz zUKHdNQ*Z~!1 z#;d5%L2kD9Y{zmf-?a}8yY`N4b>v5@Ij`UB*q+^Unq6r;YaTYyQ|kM@zSVSO)#*8Y z``NxMHM?C|UA`nsFm;)>#b_P(yASFih}Z;Wlo#n(X``T?UrWq~)cV>XPmiNyw5ayo z_l5nU+Nbb3yHVjBYvU4FsPJ1staU8UYJ0Y`D~+Ark<;;QPwGz3^AD_Bq4*e8gT(8;pWX0g@qhKEgVj#%b{r+>M? zcep(kv{ssZaTA=z%{QF7d278Jj>n&?964Qk-|9Y>`toiZ_FUi$cy=$010g01 zx*g?T!nRjpRJ5*G;WK#f4T!+06-fgt6gfT#K`t)Da2rH?4(hIISP(T}Y{-Z0RSw$= zB+qBR-dzNjt?&{$azW3~(^xE^9=KX%ICP;XV%9p(815ukhD5~pa7du{URDsMFH52Q zW3@Ds^9;`Fh{Q~&{|^ai_Z+X^>k{bCVVa1DLN}%)0FMmnZ`p7Eh3}sKgX(Wof1&yl zlvA(Wnx`62k+lQ--jQY(Zhi}hdtd7A^Mh8eD=Qs)7l^95-22w_;K6HxEYhQ|=oCqK)Y3@eBBmpqi^9a*kxi@j$CQD(~AikjB%+--Pe6JE>jDrH$Ig0}#;v0W4~5 A{r~^~ literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/escprober.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/escprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6fd3959d5baf1bcdb7e54e4267e9f2cec4266f37 GIT binary patch literal 2551 zcma)7-ESL35Z}E!pU?K$NlhA3pyCJ;k`et-;Q=88trDko+c;4iC^`u(m)rGM@6OKN zxg?e&AvsbdBqYQWPpGfF^e^BqIf)0vQ=fR}iJ3jyX-I|G)6UNA%zn-MX6D0kx#<7$ zJByYG`IEfV4B&4=kG}%K38w)GsY@yHTA+oxt1Dg)j4SuZGTU!!SxqwC3*NOtAmKuDOVZVY%Y>a-Fs z5!;^M?M0%dru61Pu@Ti|70fwB0M7{o1sS(ek~dhDMw$@sUT18u+Ci=A@q^@6HDxqHaMWi#eg;fJ5;`GMt*=cer#}F~I%GnaJ|TT0$@R_KL~a7F_w$LB6sB|v z8jJtp;vaQOp!>~2W}lOlK{i>)Dw&MqNlS_@D|$)MD(Jm7C5UBkhSmf)mI44CYb(^% zR?=KN8VV^(aR1a|tQYkX#?nG&To#AY28l$d0FduBn)OzlwHn*I4;x#J`etf^dql(~ z8baogSg2~b!7p6%?CSs^*c>j#GfS(JorSw-pn72q9nb+F^)QCmUR`-Kv6&UjaFOC`emHhqDjU*i281{zO4o1CzUmHIb zHxsY@$MX)p|Nwg%3);2g!VO*AFe(kNe*?UfGK7wZ{`)XX1?67 z6=WGUR=$&K$U*7@V`uhF^*}^&1*b0~Sp`zl-Mdg0Z|6N@L~)3I+rk4+$OeS{qa*r_|fppI8ZF3wHunb%q5g`$p&RfuWh zs}~M@S@Zv$tDgPpbFDeF8ZVuB(Y14}SD%Nr!gtCdr!6Qb(DBWBv-AA!ALEthe|_Eo z4b}eJ3YCsXARwYP<{w{d!xCjg0;V^#@!J<{abACsmU6HVyYj*_V2*yCPypJGC)&~X zcvIlNJJBb)4UV4ZeQFc=-XU_@M4QqRV`3zF-*~LaEIj%pZ z@~6b?=K-1)%oJJ#cEEK-SXTu}NlEm+J;lUShTSVLF3oixkwfzl+6`9LjOLa^+`NDe z6+@v@UIjiaM&c;R!d@bv(p-ISZ)Yz+h#yDnc>(kwxkjr|tPrPkKY7tKx9 z*iY9oTVcJ(c4J{yh_ldeU~v{7IR((vIyg=sK_xP!eil^rJRxEV%3|gWz(!jL-hxfy zbs&TmA#y4ZIYszP;EL3O4=MJFHoknpnYaT6ij7Ga;{cLyk+E>VM*;FSV}~Ozm`U=C z@qy2nN?9syQw#DKB=Y1~zKySOki3KB8j!R+%Z|PX0$8>PzkER!uRcb1w`>(k5HDOVxY- zQMFP}J>@U-)E&QV3@8vtTN2Cbot>F)9^M^qb}N;Nx4!+9(jv$G;+#L89fA;+0G*YFQW(vFf@Tga1_UI{HuVX_z{YMwB|q9bLlx~)4!{pesOunEPdU3X2BX^ zeUNt25VaP+cie}*pz9+8*rr^ty^Z2{1tmxfCrF$maMH+15@O643qZHn$xDUZ~EkYS~C7|YZfajXa?G2R0t7w5_*o?}O1)RkTn%|3f zvB8PYMr@gLB2SZ5xpi{dBaMMPAS0*)qYyM8turv@3 z=_lep^#E3kKEq(yD6m*`QhV{U##o56MBH;CMB(bXrx!_kx=wX@PNqo0C*$g%@0x2D zgQ=$T-!ZPuzgc5^H)e^r=R}CHu`0qOYo`6KZ@5~=s+k#|(m1Vh37dL7?RL4$T4SDU z%mYK)S$P-_m$YZjtas1#Lf_s$?6iyVv1+C!Jjud&>xDm7;k>j++O_M}4&4x7Ru#wG z?LX{wJF8u6Co#<_aNR$0afyaWZ`f58ID4f+8A-)TgN7T;oqCgoOZEC8JLBAIHl%8a zh8effq!|z@@6@GAsU|gdb}J>C08Uk^9=u^j$a%dwsJoyT>3{;JKNQFrP~SP_CF~HP`JLY!bo-nA(|+z~c-q0a z^G_r{klUX(;qV!gf%PP6OYOeuf1%Mg-7`GwkhiN$U+uFmLo&z?k8g2>LTmgwzs4`K j>v=E~2=L|=od_~uuk)+yesL%0fDIPz27irVyZ!zHJu`hF literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/eucjpprober.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/eucjpprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c982eef8af1f0d221248d986e1222100db557604 GIT binary patch literal 2355 zcmai0OK&4Z5bmCr$BylIv#(@@P*!4*j7WAR(2Bzfu{dTQ+Bi|{6=EdROr|@|I5T5! zPa7qc_vE0x@(Z|e;KuK12`-%W!VlmARXw)lAReA{cXjons=s>Wqgt&J{qPI>u};Wu zWaZ}o{Ta0U8|XOUG$APsXlex(#krN(sS`Mcwi7q?0?*J+QcC^6H?*6S(@Ib=w3n=< z)u2kr6T(Z}za-oj&dd&Kyxb+t%3BIznwG8}%HeUG^}8xmLRa_0=rqoRnKh}twLeZ& z{P~3vtZn753|Qvm|Wy>4vRO;Vr!Tw zajsVQb;D=feYStF*M1R!V#}XBr}9G}1PLf7f%S%*P)@mZ=?AuUA!tnNbrXv3dWXy44op1PRYy~STk5u zwsK}LXRh*Q1jdr`%~+n2K?Qek0+-WHb4|PXcqF7O!zJ2hEY4!Zm~>$(edLuR10%~* z>EZk)U%`%r2;KzFmvF5S70@l&+La;~3ZQjzk(|I-W-Lm=JZJ1D^2fvbDjnS)#iO0$ zah&j-$(eYd!jo_BM_@}X)N&N#XfPTX%kGXYJ?HVAi z=z>OUEe>!B2C+I556yrO)lL5^R{PJx zQJ8_P{!6f*gjs(a_62&}Lg*FD7aJm@5$r-gLboyRd9Zb3*4u5tSjjvIsPIGZ{%$YMaBp}b3%d?EUo1p2fGwXXQADFvu&&ZtK#1I{9ojEvPyazZp!86>>m2mhep`FRN$oxBb#d;0aqzOU$DZ}H z+wDC*>gnr!aLZ^crO03eHwD4E!XV&_sfi%%oCv{X&4@Ru=<;5>*KYNmb)M+;{!lTI z4afac#zPhAy18?hoy1&Zk90WE)ZZ%GN9m(=+l;=EMe;OE~p8Mo7{ zYgc6BG&eq2cudZVzkaiz5Q_rMe|s7F{wR_awz!o0yK%G7yLvpl#m ghvJ6Cu1NJuZ413oSM5J45cw4AhEccy=AVD|Uo>YlD*ylh literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/euckrfreq.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/euckrfreq.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d82cfdfb07efa47dff849eb62be3efd11e2a32e7 GIT binary patch literal 24059 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/euckrprober.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/euckrprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..204a4f82a81a162d30e8cd4c8fe1c5d3359c1ec7 GIT binary patch literal 1070 zcmah|&2AGh5VrR(+mfVJ1qdWgaEe5lN+3=M0cpjdq@YGz_F`?;Zo92_6KpS1qTUjz zZ^51S;be&uCtiUQGv2gpFW{BO-_GpL&o|>|oz7BRu5MittF#rJuySH733I7X?>6YVVIKY4W#o zBZgE{3hNhl|YcSTMpr`%h`i7x`~^I%1mGzkH_oB>ByBp?aq z+_HC^|2o4A3&4dZI>)V_f-uC;OS1INy(JipZ-OPfv(Q9K0%z-zoX2S41f0^N-i8fz zH4{n!?Zn26B0v1BqPzfyz@DOMrPvG2OER(6$ zjC~`&Ukpq!8_e=qe^TX=_ZJsp&!i_`1{n~~g}FIJm0hTrYs2nru40Jz1hz&%XqRr% zm@e)%sMx(u`4%V0%Mky=lsSc3y`x10zx5A~RTp$Us@iZkT#GGuwQbA?>R@GBh#qLP z2ZDHu2hEVpkNz9hMu$@+((+$nW0{txReCD=jgYshy#AmUW0NpD#_T3z#gtbPahtKv zRVr(XLJm1UyAy^xDm43uEC9osfQ>6FB&EaC(OD2n@NpaH{zFdd9NN}GB^Tl H>K^|O1VsQ& literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/euctwfreq.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/euctwfreq.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd40f5e3e91c7e7d91b7559f31c66c1a5425ef14 GIT binary patch literal 54682 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/euctwprober.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/euctwprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..869010fe85478b92859d34bdb73504bcefdc68ec GIT binary patch literal 1070 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 Cd3ON- literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/gb2312prober.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/gb2312prober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..05f3ff9aaac22c1543b83c1676eb1c778b3175cd GIT binary patch literal 1078 zcmah|O>Yx15ViL!+iKH7QISAg;6xnWrzrcwZZ&Q*BcxC(T%3RRFaaW zlp^+|SNf^%urGr$OhbnQ8I`THMadcAA&-`XM}jW=H0G@V>BPS%gz8Xxzh6sJoXm{q zU1Vw?%qKM&3I(3M-h>y`cwjOk`dNNaR06CI&rXhxUmTql+Nfe!n_^PEt1>y$g$D0# z<7Iwi3b{~?DYx5K|d`XvBCQp!o{U6T>zlzYoK^+mva9xTa%rXgTgHQ?x)1SG|( zTQ+GDG)3lk1{}C!be#GbEQT0*MHb$rw*aT{O|XD>7Mf^5U~gTK%NRYJKva6(*|MRo zr$Q-Up4gbNqACny3InPTZCklxgXvOXH|#!NV}NBy!CWXCDxrk|CIT(w2=*<;a+zt( z*mv^#Ro9f$?zEU54C_MjgZXFi++?G#-5j{*!rboTA(A|GtvH;{R17Jfz|;r`-J#nw zrt|%EG7eWoZ?J;Q^zcV4no~HfcW$HRKeYq44pj+k4mZm#yxIgSf|IZ+E5%c=Xb%?R z%^z&!T>t9-d0Rackrw|-9Lua4*V$NL8&^p;54!rI6Jw{aK*sDgW95X`5^=)VmpYS; z$8l$4;1c?4X6i1)Rrg@A?VHx*LQ3d0vazbHjTnh=f_Mx-qcUQeL`mRmsF~ezctb$b zDTN%_y+$b-?@ig<8>b_C$8~v4HjR=Zh@wGOC^HxOZzT^QbNYqyPY zC8R_uN6x519Jp}l0U`bZ{)&+}AWi}Cka!$=f$y7LJF&~I<~QFw_cz~b_N{o_$$#+! zOI#%6CvxI3KzsmL#ns3QLky z##eT7BI`G9iQ2X=pu?}q~J>seBx0~JdION=Njy)dnPwLi<{m6 zw>+B~Ow-l2A zUqK0M0D|lci?&93m?_=lJAr|9mlmF@t!TB85CltTQcawO5itRf)YXS&JhEWusnQJ% z5VrbQ$zd=C+pBTE0`|j@4W7VG0s04WY|ZuXduDPT`Qd}L1*NM(0~xG*CW~;8F_bPBp!?A+)71c#VfFHKV287 zRBP3c@^@XzgAQ#?^=SR%ye@5Y4z!Y@{VfQfUdRt+ZC4W`SZA?EZ_@+%kUsdVO;^cB zpFY&ukYQm)9gP8!E*^tqLa`30*lNR;_p1Xrg9TiJr4!8?-dkjK$!dpV%*`$@(*kbD`IbJALppWg8 ziaTt3zu~i5wX&}wO}vV0Rp6;OoW~{xql~Slwo)rw>C9RuC~UPfXb7q2o1)(qM#1;_ z_pmZJ13+e6&C(prp|hEQ9(- zK1^qC_x7obBNIi)9Qj(cP~v_y@2dNom=ug8Afl78-Uqb23==omP1JFakDv$;nT3Lr^IfphnZeeeh0ODU1+|X8- z&KF>r3Inl-5@vUC0pR~>3Y zUvnMXu?=_=_B-y3YpB1VOwyF`$Zx_MP@wUo=~tV3L1+W~#_{Jv2|q6FtDyp~VN2aO IE_L(&0bF2|+5i9m literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/jisfreq.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/jisfreq.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5dd6b31945bcbeeb1a362faa2374cf5c0060abb8 GIT binary patch literal 44468 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/jpcntx.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/jpcntx.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..288ee10ccf0dc138cd233bbb8febfff5ec2a3fc1 GIT binary patch literal 38607 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 NKf|TFkKKL${{Z49vdaJf literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langbulgarianmodel.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langbulgarianmodel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..220482fe3396780bcfb88204773039ba46de0660 GIT binary patch literal 24822 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langcyrillicmodel.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langcyrillicmodel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..814cb0630c9655dfd0fc140f2fb083c08ba83b51 GIT binary patch literal 30373 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langhebrewmodel.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langhebrewmodel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..08b7db5dc6ceff8533246e44bc1e3b4816c080be GIT binary patch literal 23354 zcmeI4ca)rE6~-qaMhrv=D2kP$m;^!~5X2Y=X%HXfCcM5kIIj8&-;DOw>!yZbA-ds=f1bR_uhGD{BKX3I(16- zO}Ez1JGNH)aqXV}98{~FK5P#@d>D;StgAIXxo$$U)|}9|rSaj$M;ae(eC)=_>n1in zetvDnr*{2wIB3^Dgue@a6P5~>2&;s1g-eBtg)U*8utew=287kZSwda7Kv*ek7cLae z6c!6t3Y&yALJ~FzgTfr)Y+=4|sxVVnE}S8pF3c5rgv*3egoVP%!U@76p-(tbI7S#= zS#8$>;XGl5uwFPv=oNMfpAkMQd`|ehFkP4@d_nl4@Fn5P!dHZ^3SSexE__4yrf|M+ zk}z91PFN-!E?h2rOSoG2wy;?k622pRSGZL;QfLX^6SfKs;rqf5ge}50VWV)J@I&E8 z!djtQ(CgWCm9Rs&R=7=gjPMiTr$STsnecPr8ex}kyzpq@vBEC|J-%I!6J`h(2}cNz z5*{f$LU@>Pl<-U8G~uDbuY|`7zZQNY94*WeZWn$l{7(42@CV^~;SS+W;g7YxHj$oOQySxpRjmFKez(&22L# z4^8Xd*p=$7{(66EG*f+Z*TB%Ufz<47Hky6i&0)KhdafBdw6%Spr@O1SKF~kd)9TsU ztf#J4Pyf&%o0`pmdb4jsZ_nVydT+DUYNnwBRdTS|s`qtmZVv6=+ts&WOV@_x%IUS? z;gc3n4O-(pGJ;vXUU`N-xzs`E6Hb-T#^w6JlU_{HBS?CDNzX9pIV8QOq*s*mfRY|x z(rZh4nn`ab={+UAv7|Sf^r({FXVMEydb3H7H0kjry}P7uQqor}>HGLUHl*)kI$StH zI8r!D(6=?|dz4Lu6X{KjeG4CjDln8-ynaPZXXcJXv^( z@KoVx!qbIk2+tIrB|KYrj__RJdBXFB7YHvDUL?F&c!}^*;bp?hg;xl#6ka9VD7;#@ zNqCL$TH$rV>xDN6Zxr4nyjggQ@K)hw;cdd(g?9+=6y7DgTX>J~Ug3Sh`-Kk(lY|cn z9}@N(#`M}j!|E29?y3?zLZu9X$+hz2R_?{76|JFy*QP6n0->nAz}^6Rb7%BI0iQXT zvBqA}AIeQKTTo#(%%EI_p@TP=1P2EuA!EO_&;hFpyK>JCwqgX2;>KG_?z$Sz8 z9EEXA$wZuuP_@?I~4AZX3(CudA z;#`HjI3#QcFNzSRWFpQ`YEdn9m?Ab4$>IG zA;AnwEcaFqrnNS9KnU}4#&X=GO)Ccj&dB8qMTQm2aY#UzywG%7yI$@s%)r4g?JDQ` zj*#Idb7x^CHd#c@%Ne&>g*4{qpekQBZCHhQgXuYPXN3-5jyEWqfME8*nd97~RS2=k z)`E#+wMioLlG; zyBYM7%gA|iXN9>qavRFMoboeYUKoNmD0;S{t3uUoTw#GuJHkYTJ1BJI3ivEIa%V0| zoM*EcR2Z6&;20~D-@mXXW($s-Nw8HR!q$ijTeBm#l0ru=csHMgVXEKO>0!br!2_MhZQ^Jn?ip%MFDa-3q^C?=h__?XKbU>?RsmYE=m?!d8ks?dFC5-i=-?cb3RmJlKxsXnuaV1lhZ^IoF?vGqLrLxb0N!)l;>@Tc@Q5nl2 z#G$ByA}uV;rgL+5gkY-d?TWFOE!T4x&?a%g%sD~{_J3Ub`>095qRyO z0CAM!Y+NWBXDs%IH#a$ZAr8g(RHlk^LjiJg8No~WoFW)+?hJ2d)SkG*o$?uVrtz_= z!otF1a6@=8IkO_oA-TOcE|)e|L;wHY|NH@?eR&bNml)>dP1->QkD8F2avF~E^5wy8 zctiOyHN()OG53-=Jc7YH$c;r@?js8sg&`p>m}9znm0*S-O1a;I%z{ivIVXZC%mdX!hP* zOP|(X5ftv4H@mfYVD>=Iz^wIKdU_kPc5G@M-|D(@>umig)<&~+_y6jTv2OI=e%-7h r#|>;B+JFAA+|t`T?dai3gEJ=#b3)m_lctn;_kG`_NfRgh_uqd3E)O1> literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langhungarianmodel.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langhungarianmodel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..867a6812082a5e0ff221ef3a93bbd741fa49c582 GIT binary patch literal 24796 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 DgjBs0 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langthaimodel.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/langthaimodel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..056c7fb0e891aee67428bd1f4d92001a8cada71f GIT binary patch literal 23333 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 oQD`#`18agiS^9j4YUvh`h(^q1En+a literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/mbcharsetprober.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/mbcharsetprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2ca5c44420d9e6f3dbc286316835142ea4dcfe55 GIT binary patch literal 2174 zcma)7UvDEd5VyU5x=A-_ukGFS1RMc$ph&bm3Go0b2x!Y)C7Pbv6r`1qwTYc{)6FL5 zbfBoP%PVuD7FSa?ZV z)Y>dWuH`-9p9hgAeK9A3b26sU9PkBEw0t1uMR-o4f+&eHjK!D4CDA;1xoGa~4N{$a zbE@SvKZliK1=`I*E2=e_b&n7nooUZM21XN2M`X-8Y(xe9)rM?DxFZNqS1`fa3^-2^ zaKWiTkml1kYx7o;YN;+zZPhnkKIluOJeZk)^CU|&=jN_Ra;=iaKqtM7$61`74y7`M zW=}v&dEPZep2oT6O$a+g+s$R#Qa-Arroed<5^LgSag}yJGvc zcfH&@s|3tdOf?$^1`&Djmwj0}hTk^%@y|2J`wr_kBRXOapiIx4k)z#?cfwQ+Bz|X3 zK;?7-=!Fp*1Gwm7XC7)Ld`6y^?cNgX6|h>qwz>eTumZXl$K=c%L5;!6?@)hW2iETh zXA{Sz&N9wM?ikzyjguAdMmVbk>3#AGo|wviAfUmWYG78w3fR62x?kC|_r}C>_s6Jx z^~6=LE`5Xf3S@v+8@~4_ufTs&K9%D{SD>zYsuJr;1Aqr)Hh~qU(8Yhyst=5(;31@O zQkmH-HpNW7&^$-bR0xg6+c`McKQMmUYqtRbJRuu{wps>}T0w#ZX8hWIo$u`!e{$0J zyY)ky2jA`=)wcO=-FS!fuMg^Gxh(-R21-GSTI@i>SPr&)jN6h@03=z=E^P1Aced)g zwI^nw-P2rVy+Qk!i&)2|Z1wcARw889lxFGh>Ha}|>!{A_PY-rr^4)gTvt?)kygc}& z3{4>MrvPRx1en$wU9hDws}J=)c=QGId>se^&mvT602Lch*K$ZFD@$yZ7Fn5vFb6ps zzI96p;ni*~9YhXzM$)0Ik~o3jd# literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/mbcsgroupprober.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/mbcsgroupprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..802104def706a1d75741a8fb8057a7c22caa8174 GIT binary patch literal 1065 zcmZ8fO>fgc5Z(1h;;*zc<-m!%k=jBFQi~8m4Ny@;RFPIlzN`}4Nu91+vulH>azIL@ zp7;yg`AaJ}apEsJUIGE#Au8QCnl1JGmRV8n?KY`;o74n+JI(>S*lnm3%c?)!5~C z^0jDiGM{BKc#as>L$T}gq=SW+6bxY_D+Xlkd_DHqAHHW#V8e!^-hjo@7_d% z!#9H_@?V|w4v(5JIN0Cbd9>Zcxc&D1P1rlyd%V|#-hMWD(nNUn_`@QMp`T`Gcq@( z#*8NP8^~Xpb5dGhHdqU+4d#HkVBVZeoEc&Mj7)<$L1Cey(FciqK0KeWamGtftfOpM z6{!$D)KCs%*?CqnCa|tRGQvjJLI)Rv2y9BY=sa+$U1;T{vPCM>GBlJWQ$7{}Y(g!U zv6v5~Wb6m|`*f?!i>)FnHbzy(la0%>^kF$1f7*&+l1W-N?|c-?366E~^UdOmSb_gN z0F!sY5!y8@y8L*?<-J>4ZvN*I(mqHH)Xs-_%9!#P%P*3OBMun*SPl7NM;B3@y5%_K z9E4bha@vJdbP;0%TCEU()N`Ub?uYBDi&Q{|rS1hDQC?M!cNcWDw#t*!Ox6k1S@~%d zPiw|nbQMfSctPt!I0Aj>Ow<{ihw|eBu4$dY;V5qeH?>aSp!7%O=Q@K^)9v0cTOj16 SoM#JZp5yhE$Ty(39`hfh00ue$ literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/mbcssm.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/mbcssm.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66a985cbe02445bd6dc185a4f87802cffca803e8 GIT binary patch literal 17518 zcmeHOOLN;c5GHL(mSoHCR~*N2oR^hEaqKjmbf(j3>?%(?$wG!`1zm_!Z zZ%zHvHSKF&uUF!lMm4Hew5m>YU85^xi0R)C^N#@^8nJ57;{AZk`;mPR4H~?k@*;`S zt7L=?(I|_u5jsL+zePxlu9CPlhBKp<_ zJX@esIHN_nPA*wG?Y@>p{=VyUUN|?~J5s+yyUM27fsfQ4674Gatd?ksTxOT}td`hi zI*qehrgz8{byiJrq-vJDx+*F!&R^CsA4QxR=bUk(bQB~wriB+hr50YI{pH7Gji$+Uc8&L5W7p{{+I@rG zCpQt1;53NUQEm<9O+FILg~zLG5$(42QEsaulf9&+LMB^noznVSbc5Vx+*Wpr-KKMB z{W^U>QWhTi$rZzrF3=<$qw{=Jm|OIW*}1S@T}s_vFWwe}7q+1v>^XKiwt`hG>Ie;y zDWkJnEc6e8<=)3D$aoS%$0XNj$=4mPPW!j&M;BVPwrlHYOjm|!H;O7N|4Hu9O>&o| z=w)_?-KER8C+^WJIW4ty%8y=JN;k*$ilzO7LzZh48|)O$W~W0y3?RcmBAl4U_Q7|L zQW0~sR4LZ$g+}pxg_&cbQZAMnA8O`k9aLDN@zQ>=R;aK;t8N??tL!ui`bL1nfbc_~ zcADVCjO@Jq;6dRs`6_!7`#H^yOXX7t(i*2B#$GoIT&C^rf(U*t|= z@A6O6o1brIB)6M69R-bJK$1YlflL6I1tf4JsW~K|mVmG+7~HvgV~TgGpE!s4F`?u~J2fh4!SNAB zDpW<{?9ZNec3ePxs30IVgbn`D%y*5P$mxZ{yo_m~7cIV6XZM7hnut5_2Bw?AB(U76 zsB&My>0lILJb~5W>5|`heNR21;C!4jnES_LRR_tyw~ObY-M8O)2*T5)n&M%RQ%0-P zrAUqaSrI3c0_sBr0kI)WUGV>zH=M}ng~NyTUKF&)VoLEn0;9k=d;V89Rp;R2$;M%| z^*5@p=BW{p8gcz`+9pZb`4Ru^9X@V{|J@Gw9YY^s?wAz6 z$7uCH;Cbpgx2p56nZe|ojMd9`bRQ3kKl*fjI@&#lKmT-K({QStKbtH-mqj(q>6SfCaX*0qOkE`_>yqsjlwqHDZRM^?gnUPF3`zC8fa``9O zycvCw&lUDE<_OAjd2>c|eEuX`*v-5y_Njh>J_Bs`YmFJ2*d1UU|!5lwDjQb;8%@op!#wVe^8T0D#@o890E*~10j zRp6YLaAiU0kslOPOStxyYbuEdSN9%E7u$A zd_8Qv!#3xNhwfLnwH~L{Fy^_Pi~2NP%Y9v|S+03WpXHk8_5NyJ)+f=w;A4ohC97Pv OO7K3kLkTkXuJ{)?IswZ7 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/sbcharsetprober.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/sbcharsetprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..631d7e1979a12421c675c728d0670426673a67af GIT binary patch literal 2927 zcmZ`*&2t;K6$kc%Tv8-0$%-9SiHDg<+HRY~nWP<0GHK*Qre$Sh%45>W45u9oML^_| z%MW9hcEnI8Y9`lQ+e7cU7nh(m!#)j(%-}CGl{T+w*cM)@PPN;@8P|2 zx!C#ZKgIeD#{R=D6c6pYsLAg@B$GU5L*C+?+D_~Y-IhD_THera`J8Pt=}PaINl)>G z+saA5!NS}Nj;SFx<*i;@H&psakN1@hU9&<1?M|xnRy$SQu|6~o3tf$)Fsshb7}D(}~hLhowy*L^O(0AxusT$5O?nAhdd>bfTmw ziBWr~#KhXdEQz?Cq++b4(xxmD^;C4m(-AC_fR~Qbc1(lkoenH#isC?%B(;655|xIY z@e&mu7(d%EINNXO!glb5f)E{SnF#R>``-t*)8XXyB$~XnKaFDf)@-2ON!tg{Zqv$A zrDy+SpGL4xruN&DLtVg0e}$T?fiPa-IR_s<|7O)IO!oHa^>oNTsnGw-Iv=2O**el% zM><`edVPPv)-v0Wwepf^U@2?^Yq<3nKVXFys4Oh%06%LLy-KYz5g){?c2z1y)1l~O zArPrVSBQI!$TE=?kdW)^+3zL|y-Z}C2rc(})T9K0^W*Hxbb4p@>Q(2qmb!Fk2UE9b zkyk+AR7_Wh_IZPPh^TcO$sWt8o6?C5tOJFvrj7NhM2a9Mie?&~t4aJ#)Py{fLCL_G zy?&K~7dQBMJ#S%=pX%9nC0{`2Q%!@oJ?c)|T@`wnmNd<3XJs-J`_te5=p4C6 z9&o?|$DjM;Zv&=Va{x>~C*3>D0V>RWtdYm~zwLN%G9F;GaEVhq;aI##{&vcT|N1xC z5pV_?VyC%_-EyN_*}CN2{lZWA7%k0nK3fOY-$A&1h*jYGg{SX+o}JalDtSmbX}Mn+ zIA3$!Lyz{pHtgabnn>XbN|;GSRA|BqbRP zraJn<`tt1cHU&SNABe}bUD15-xYl^Ew|mc22#?MWZZ;n6HFlaipJ9Usdyku2Pns8mbMd&_#pU`^ z?N7TVxWD(LeoyQ)k#I8AH|n+RkFT6v-)oA8wXk5J%>?^Ms+gzsYosiX4DT4NXhR z0eZgWfJBbzTN)U?08deVEHa8%6~V_jr4F5b>K3SaT1Zg2{=kL z?vn7@x8HAu`7D#zoMJOhaB5NOfSJoso(Y}I4qX4}V)bvpouekS2*aHgohoiHKx_8P ztM2ErABE2SdU%bVB=#L3@OGd#$uw4Yo|J@mI&H@pM^iS}A(7t_d4~w0s!eq!K$n3B&*Z literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/sbcsgroupprober.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/sbcsgroupprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b830c60e540cd0291375ebebd401b18e55325fef GIT binary patch literal 1555 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/utf8prober.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/__pycache__/utf8prober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e23499b1f5848a15aabf01e8fe8183ddcc18f156 GIT binary patch literal 1912 zcmah~OKT%X5bmCrM)F8D_CgW}VM)jag|(d!mUtn=*_E}n!Il7j-9~Kx)l{-H*hIAB;4lCHQ|n+ zb2BLNLYq|G8w%G|sVdiAbYxp(&*gbn$f}_{)CNhvopmyyywgtjVvqZeIS(g_ioD2og|E0)x}Qd_{Vc8{E8h154``w?Vgs!yR6@ zCUY7TKzDgj>n<CDKmfObycYTBr}%1$R^A!PxMDwnZAGRPQ{HcX|1wqmFu zVQH+&ESbbC?y?X-O_eQ0Dl)*wN=4LzZ;`Pu>ZB=SKasy4?Pl?KcRUzxcPE30Z%;?! zv#itmeisjOkuATIthYDT&$BbWltu9Q07mM9AhbeD)S=U@w-D^y#`y0Ld7N6sJ0|YUq@2q%R-SfXrRi4Lx z_;aI9(w}tt;?at)Rpf8iLmdZf!hCS(*F*HYp ze3)578_V!Hxp1_#0M@5qb?;b9^upla!oQ*QS%6X07a8bTE;`cKEItK)5nSUn;5 zV~9EZ00e<%@nE>rTFMIDG(2b{*O;!alntI+mJ6bTiR)+F0fo~mXq6!_@QBC#m( zVrMC5l0<`%_($2x`>=KbBgIxEI+YC!|Gky)?_yc?kh!o+7*i$2;&VQUQ1=+Sm~^6i zMScR;X@1cytXv=+V7}~9ZsNi{6d$9w4+6L@=dw^l5%A#>cjz6>2bv0yG(Uooq6ttp zJjb&=%d^}qO(~6PNtG8Jnp2!atd%W*NK;*GdG&4PkF1L(&i|4$1uG}+hG`mWD$ZGI b8A%=!#-ZG=@|3@RAA>2n{U@1{QOu?LD4hz5&*1&<*OUxG!4cIGIF zw(s$M$t?&)>xuz;=GIwIvf6-CV7bs0FE(J9Gn}otT!JeZteLS~NszV3m;qHlUJ^r@ ziwmO!JaJcY36{B9W4!?)DeM+43v8WflCQ{;Sscd`QoB-_30x5gmlcsa8k|rfarQq> zmxAyL=Sn2;wmZfneAWbbmPAc2O{vP$v^h%C)|el<);o7i@8SAxeseo}L*~H0VF%x* rLnri5b3MpvUeUpJ#YT=4>tX9}Ut2kULvwik_o9nm85? +# +# 128 --> 0.42261 +# 256 --> 0.57851 +# 512 --> 0.74851 +# 1024 --> 0.89384 +# 2048 --> 0.97583 +# +# Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 +# Random Distribution Ration = 512/(5401-512)=0.105 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR + +BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75 + +#Char to FreqOrder table +BIG5_TABLE_SIZE = 5376 + +BIG5_CHAR_TO_FREQ_ORDER = ( + 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16 +3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32 +1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48 + 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64 +3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80 +4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96 +5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112 + 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128 + 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144 + 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160 +2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176 +1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192 +3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208 + 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224 +1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240 +3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256 +2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272 + 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288 +3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304 +1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320 +5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336 + 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352 +5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368 +1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384 + 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400 + 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416 +3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432 +3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448 + 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464 +2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480 +2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496 + 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512 + 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528 +3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544 +1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560 +1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576 +1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592 +2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608 + 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624 +4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640 +1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656 +5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672 +2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688 + 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704 + 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720 + 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736 + 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752 +5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768 + 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784 +1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800 + 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816 + 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832 +5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848 +1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864 + 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880 +3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896 +4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912 +3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928 + 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944 + 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960 +1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976 +4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992 +3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008 +3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024 +2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040 +5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056 +3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072 +5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088 +1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104 +2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120 +1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136 + 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152 +1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168 +4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184 +3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200 + 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216 + 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232 + 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248 +2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264 +5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280 +1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296 +2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312 +1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328 +1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344 +5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360 +5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376 +5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392 +3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408 +4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424 +4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440 +2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456 +5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472 +3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488 + 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504 +5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520 +5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536 +1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552 +2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568 +3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584 +4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600 +5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616 +3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632 +4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648 +1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664 +1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680 +4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696 +1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712 + 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728 +1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744 +1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760 +3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776 + 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792 +5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808 +2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824 +1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840 +1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856 +5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872 + 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888 +4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904 + 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920 +2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936 + 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952 +1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968 +1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984 + 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000 +4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016 +4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032 +1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048 +3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064 +5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080 +5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096 +1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112 +2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128 +1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144 +3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160 +2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176 +3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192 +2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208 +4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224 +4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240 +3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256 + 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272 +3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288 + 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304 +3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320 +4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336 +3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352 +1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368 +5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384 + 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400 +5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416 +1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432 + 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448 +4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464 +4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480 + 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496 +2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512 +2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528 +3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544 +1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560 +4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576 +2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592 +1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608 +1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624 +2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640 +3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656 +1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672 +5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688 +1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704 +4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720 +1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736 + 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752 +1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768 +4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784 +4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800 +2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816 +1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832 +4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848 + 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864 +5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880 +2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896 +3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912 +4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928 + 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944 +5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960 +5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976 +1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992 +4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008 +4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024 +2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040 +3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056 +3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072 +2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088 +1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104 +4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120 +3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136 +3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152 +2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168 +4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184 +5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200 +3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216 +2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232 +3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248 +1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264 +2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280 +3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296 +4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312 +2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328 +2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344 +5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360 +1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376 +2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392 +1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408 +3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424 +4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440 +2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456 +3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472 +3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488 +2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504 +4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520 +2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536 +3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552 +4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568 +5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584 +3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600 + 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616 +1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632 +4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648 +1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664 +4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680 +5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696 + 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712 +5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728 +5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744 +2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760 +3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776 +2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792 +2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808 + 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824 +1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840 +4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856 +3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872 +3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888 + 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904 +2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920 + 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936 +2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952 +4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968 +1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984 +4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000 +1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016 +3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032 + 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048 +3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064 +5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080 +5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096 +3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112 +3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128 +1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144 +2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160 +5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176 +1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192 +1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208 +3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224 + 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240 +1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256 +4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272 +5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288 +2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304 +3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320 + 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336 +1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352 +2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368 +2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384 +5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400 +5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416 +5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432 +2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448 +2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464 +1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480 +4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496 +3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512 +3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528 +4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544 +4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560 +2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576 +2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592 +5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608 +4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624 +5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640 +4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656 + 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672 + 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688 +1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704 +3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720 +4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736 +1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752 +5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768 +2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784 +2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800 +3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816 +5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832 +1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848 +3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864 +5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880 +1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896 +5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912 +2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928 +3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944 +2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960 +3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976 +3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992 +3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008 +4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024 + 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040 +2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056 +4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072 +3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088 +5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104 +1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120 +5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136 + 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152 +1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168 + 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184 +4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200 +1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216 +4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232 +1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248 + 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264 +3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280 +4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296 +5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312 + 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328 +3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344 + 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360 +2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 +) + diff --git a/venv-linux/lib/python3.6/site-packages/chardet/big5prober.py b/venv-linux/lib/python3.6/site-packages/chardet/big5prober.py new file mode 100644 index 0000000..98f9970 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/big5prober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import Big5DistributionAnalysis +from .mbcssm import BIG5_SM_MODEL + + +class Big5Prober(MultiByteCharSetProber): + def __init__(self): + super(Big5Prober, self).__init__() + self.coding_sm = CodingStateMachine(BIG5_SM_MODEL) + self.distribution_analyzer = Big5DistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "Big5" + + @property + def language(self): + return "Chinese" diff --git a/venv-linux/lib/python3.6/site-packages/chardet/chardistribution.py b/venv-linux/lib/python3.6/site-packages/chardet/chardistribution.py new file mode 100644 index 0000000..c0395f4 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/chardistribution.py @@ -0,0 +1,233 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .euctwfreq import (EUCTW_CHAR_TO_FREQ_ORDER, EUCTW_TABLE_SIZE, + EUCTW_TYPICAL_DISTRIBUTION_RATIO) +from .euckrfreq import (EUCKR_CHAR_TO_FREQ_ORDER, EUCKR_TABLE_SIZE, + EUCKR_TYPICAL_DISTRIBUTION_RATIO) +from .gb2312freq import (GB2312_CHAR_TO_FREQ_ORDER, GB2312_TABLE_SIZE, + GB2312_TYPICAL_DISTRIBUTION_RATIO) +from .big5freq import (BIG5_CHAR_TO_FREQ_ORDER, BIG5_TABLE_SIZE, + BIG5_TYPICAL_DISTRIBUTION_RATIO) +from .jisfreq import (JIS_CHAR_TO_FREQ_ORDER, JIS_TABLE_SIZE, + JIS_TYPICAL_DISTRIBUTION_RATIO) + + +class CharDistributionAnalysis(object): + ENOUGH_DATA_THRESHOLD = 1024 + SURE_YES = 0.99 + SURE_NO = 0.01 + MINIMUM_DATA_THRESHOLD = 3 + + def __init__(self): + # Mapping table to get frequency order from char order (get from + # GetOrder()) + self._char_to_freq_order = None + self._table_size = None # Size of above table + # This is a constant value which varies from language to language, + # used in calculating confidence. See + # http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html + # for further detail. + self.typical_distribution_ratio = None + self._done = None + self._total_chars = None + self._freq_chars = None + self.reset() + + def reset(self): + """reset analyser, clear any state""" + # If this flag is set to True, detection is done and conclusion has + # been made + self._done = False + self._total_chars = 0 # Total characters encountered + # The number of characters whose frequency order is less than 512 + self._freq_chars = 0 + + def feed(self, char, char_len): + """feed a character with known length""" + if char_len == 2: + # we only care about 2-bytes character in our distribution analysis + order = self.get_order(char) + else: + order = -1 + if order >= 0: + self._total_chars += 1 + # order is valid + if order < self._table_size: + if 512 > self._char_to_freq_order[order]: + self._freq_chars += 1 + + def get_confidence(self): + """return confidence based on existing data""" + # if we didn't receive any character in our consideration range, + # return negative answer + if self._total_chars <= 0 or self._freq_chars <= self.MINIMUM_DATA_THRESHOLD: + return self.SURE_NO + + if self._total_chars != self._freq_chars: + r = (self._freq_chars / ((self._total_chars - self._freq_chars) + * self.typical_distribution_ratio)) + if r < self.SURE_YES: + return r + + # normalize confidence (we don't want to be 100% sure) + return self.SURE_YES + + def got_enough_data(self): + # It is not necessary to receive all data to draw conclusion. + # For charset detection, certain amount of data is enough + return self._total_chars > self.ENOUGH_DATA_THRESHOLD + + def get_order(self, byte_str): + # We do not handle characters based on the original encoding string, + # but convert this encoding string to a number, here called order. + # This allows multiple encodings of a language to share one frequency + # table. + return -1 + + +class EUCTWDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(EUCTWDistributionAnalysis, self).__init__() + self._char_to_freq_order = EUCTW_CHAR_TO_FREQ_ORDER + self._table_size = EUCTW_TABLE_SIZE + self.typical_distribution_ratio = EUCTW_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for euc-TW encoding, we are interested + # first byte range: 0xc4 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char = byte_str[0] + if first_char >= 0xC4: + return 94 * (first_char - 0xC4) + byte_str[1] - 0xA1 + else: + return -1 + + +class EUCKRDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(EUCKRDistributionAnalysis, self).__init__() + self._char_to_freq_order = EUCKR_CHAR_TO_FREQ_ORDER + self._table_size = EUCKR_TABLE_SIZE + self.typical_distribution_ratio = EUCKR_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for euc-KR encoding, we are interested + # first byte range: 0xb0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char = byte_str[0] + if first_char >= 0xB0: + return 94 * (first_char - 0xB0) + byte_str[1] - 0xA1 + else: + return -1 + + +class GB2312DistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(GB2312DistributionAnalysis, self).__init__() + self._char_to_freq_order = GB2312_CHAR_TO_FREQ_ORDER + self._table_size = GB2312_TABLE_SIZE + self.typical_distribution_ratio = GB2312_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for GB2312 encoding, we are interested + # first byte range: 0xb0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if (first_char >= 0xB0) and (second_char >= 0xA1): + return 94 * (first_char - 0xB0) + second_char - 0xA1 + else: + return -1 + + +class Big5DistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(Big5DistributionAnalysis, self).__init__() + self._char_to_freq_order = BIG5_CHAR_TO_FREQ_ORDER + self._table_size = BIG5_TABLE_SIZE + self.typical_distribution_ratio = BIG5_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for big5 encoding, we are interested + # first byte range: 0xa4 -- 0xfe + # second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if first_char >= 0xA4: + if second_char >= 0xA1: + return 157 * (first_char - 0xA4) + second_char - 0xA1 + 63 + else: + return 157 * (first_char - 0xA4) + second_char - 0x40 + else: + return -1 + + +class SJISDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(SJISDistributionAnalysis, self).__init__() + self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER + self._table_size = JIS_TABLE_SIZE + self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for sjis encoding, we are interested + # first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe + # second byte range: 0x40 -- 0x7e, 0x81 -- oxfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if (first_char >= 0x81) and (first_char <= 0x9F): + order = 188 * (first_char - 0x81) + elif (first_char >= 0xE0) and (first_char <= 0xEF): + order = 188 * (first_char - 0xE0 + 31) + else: + return -1 + order = order + second_char - 0x40 + if second_char > 0x7F: + order = -1 + return order + + +class EUCJPDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(EUCJPDistributionAnalysis, self).__init__() + self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER + self._table_size = JIS_TABLE_SIZE + self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for euc-JP encoding, we are interested + # first byte range: 0xa0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + char = byte_str[0] + if char >= 0xA0: + return 94 * (char - 0xA1) + byte_str[1] - 0xa1 + else: + return -1 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/charsetgroupprober.py b/venv-linux/lib/python3.6/site-packages/chardet/charsetgroupprober.py new file mode 100644 index 0000000..8b3738e --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/charsetgroupprober.py @@ -0,0 +1,106 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import ProbingState +from .charsetprober import CharSetProber + + +class CharSetGroupProber(CharSetProber): + def __init__(self, lang_filter=None): + super(CharSetGroupProber, self).__init__(lang_filter=lang_filter) + self._active_num = 0 + self.probers = [] + self._best_guess_prober = None + + def reset(self): + super(CharSetGroupProber, self).reset() + self._active_num = 0 + for prober in self.probers: + if prober: + prober.reset() + prober.active = True + self._active_num += 1 + self._best_guess_prober = None + + @property + def charset_name(self): + if not self._best_guess_prober: + self.get_confidence() + if not self._best_guess_prober: + return None + return self._best_guess_prober.charset_name + + @property + def language(self): + if not self._best_guess_prober: + self.get_confidence() + if not self._best_guess_prober: + return None + return self._best_guess_prober.language + + def feed(self, byte_str): + for prober in self.probers: + if not prober: + continue + if not prober.active: + continue + state = prober.feed(byte_str) + if not state: + continue + if state == ProbingState.FOUND_IT: + self._best_guess_prober = prober + return self.state + elif state == ProbingState.NOT_ME: + prober.active = False + self._active_num -= 1 + if self._active_num <= 0: + self._state = ProbingState.NOT_ME + return self.state + return self.state + + def get_confidence(self): + state = self.state + if state == ProbingState.FOUND_IT: + return 0.99 + elif state == ProbingState.NOT_ME: + return 0.01 + best_conf = 0.0 + self._best_guess_prober = None + for prober in self.probers: + if not prober: + continue + if not prober.active: + self.logger.debug('%s not active', prober.charset_name) + continue + conf = prober.get_confidence() + self.logger.debug('%s %s confidence = %s', prober.charset_name, prober.language, conf) + if best_conf < conf: + best_conf = conf + self._best_guess_prober = prober + if not self._best_guess_prober: + return 0.0 + return best_conf diff --git a/venv-linux/lib/python3.6/site-packages/chardet/charsetprober.py b/venv-linux/lib/python3.6/site-packages/chardet/charsetprober.py new file mode 100644 index 0000000..eac4e59 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/charsetprober.py @@ -0,0 +1,145 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import logging +import re + +from .enums import ProbingState + + +class CharSetProber(object): + + SHORTCUT_THRESHOLD = 0.95 + + def __init__(self, lang_filter=None): + self._state = None + self.lang_filter = lang_filter + self.logger = logging.getLogger(__name__) + + def reset(self): + self._state = ProbingState.DETECTING + + @property + def charset_name(self): + return None + + def feed(self, buf): + pass + + @property + def state(self): + return self._state + + def get_confidence(self): + return 0.0 + + @staticmethod + def filter_high_byte_only(buf): + buf = re.sub(b'([\x00-\x7F])+', b' ', buf) + return buf + + @staticmethod + def filter_international_words(buf): + """ + We define three types of bytes: + alphabet: english alphabets [a-zA-Z] + international: international characters [\x80-\xFF] + marker: everything else [^a-zA-Z\x80-\xFF] + + The input buffer can be thought to contain a series of words delimited + by markers. This function works to filter all words that contain at + least one international character. All contiguous sequences of markers + are replaced by a single space ascii character. + + This filter applies to all scripts which do not use English characters. + """ + filtered = bytearray() + + # This regex expression filters out only words that have at-least one + # international character. The word may include one marker character at + # the end. + words = re.findall(b'[a-zA-Z]*[\x80-\xFF]+[a-zA-Z]*[^a-zA-Z\x80-\xFF]?', + buf) + + for word in words: + filtered.extend(word[:-1]) + + # If the last character in the word is a marker, replace it with a + # space as markers shouldn't affect our analysis (they are used + # similarly across all languages and may thus have similar + # frequencies). + last_char = word[-1:] + if not last_char.isalpha() and last_char < b'\x80': + last_char = b' ' + filtered.extend(last_char) + + return filtered + + @staticmethod + def filter_with_english_letters(buf): + """ + Returns a copy of ``buf`` that retains only the sequences of English + alphabet and high byte characters that are not between <> characters. + Also retains English alphabet and high byte characters immediately + before occurrences of >. + + This filter can be applied to all scripts which contain both English + characters and extended ASCII characters, but is currently only used by + ``Latin1Prober``. + """ + filtered = bytearray() + in_tag = False + prev = 0 + + for curr in range(len(buf)): + # Slice here to get bytes instead of an int with Python 3 + buf_char = buf[curr:curr + 1] + # Check if we're coming out of or entering an HTML tag + if buf_char == b'>': + in_tag = False + elif buf_char == b'<': + in_tag = True + + # If current character is not extended-ASCII and not alphabetic... + if buf_char < b'\x80' and not buf_char.isalpha(): + # ...and we're not in a tag + if curr > prev and not in_tag: + # Keep everything after last non-extended-ASCII, + # non-alphabetic character + filtered.extend(buf[prev:curr]) + # Output a space to delimit stretch we kept + filtered.extend(b' ') + prev = curr + 1 + + # If we're not in a tag... + if not in_tag: + # Keep everything after last non-extended-ASCII, non-alphabetic + # character + filtered.extend(buf[prev:]) + + return filtered diff --git a/venv-linux/lib/python3.6/site-packages/chardet/cli/__init__.py b/venv-linux/lib/python3.6/site-packages/chardet/cli/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/cli/__init__.py @@ -0,0 +1 @@ + diff --git a/venv-linux/lib/python3.6/site-packages/chardet/cli/__pycache__/__init__.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/cli/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d6a7a502cdd230c6353883473a8d14072aa1bdf GIT binary patch literal 138 zcmXr!<>gA5cQ>Aqfq~&M5W@jTzyXMhS%5?eLokCTqu)w~B9JhG_+_qNl3So(kXfLc zRGOKSqFa@nYEY7xR;Hhvkyw F1^|u%A!q;q literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/cli/__pycache__/chardetect.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/chardet/cli/__pycache__/chardetect.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36c3f197ef55afa6fbe4621d5430359e47213a1c GIT binary patch literal 3026 zcmd5;&yO3o6`o%jX=k$yMWCW3q1=#H-Kkei${DLQcGOm%_C11qP29O;XicR7m{nP<3taK zGM#F6GERqMrjsL~SXl^GN|u*Wuu+-`Hcj+cv83QkifJh|sW3ejsbpMeG1P)bq8OGu zEe=%_{qom%eAzs3zG*%tIiOQUT{{bOC=V9yq^=v2ttIfZ^v>Kx zz`ZMuEVw_37ONKef-BAv$lx{VUAmA$;G{nPuZ{QTLeFHu5(EdnAL8T{pfey5$4EgP zBm;nD4Fpz>plr{&l-5F)DowqW0fqPyJbKeaCOON}LZ}{l1XEUIx@3m}=Yx(7lig~L zKAo=gdh7v3oK}YE!KoH%(`=FCqQ~}8((r0GfK!$Mwm2E;wd-xzt>$2tw$Fs=VS!XI zjrBI>SD){l_1N<}XK&!``Q0-Uy#njJWi^35Dby^}`|WL6$AOwH+GrwWa%zH+5ZnYD zS!Zg)tW?5;m9`8?HROVjWqft2%w>dxoPexFzTS`tN2SaY-L9FMb;bnbgK=jjptjtF zp`RRi1=WB4a$D!q+tYN~8O+j*cjiZ8PbZ_}+p8>nRcGm1My$HiQ`4%>d`f|f%h5Y9 zr>>%KqR@@ph8uaI8=?-~z}-dNM2~zI<3liw{Q{H}01NH!AZTae67juo0ZVt{ai0h1 z^LcIQ@=yozhOSM*BBXLsKXiHhMGep&FvSy?Tr==62p6T58&TMvfM<<+k}HdC;Z7Jx;9UC^AKO_FL48>wf<=Kpx~ zbEzH)xWV)1n|V!G15pv{ZGgnoEUC`F{u^B*Cu4y7RWhHTr<`RJ+9N^fPFIA?$@kZc zzuCCK#VA2K^(vxn8&3|5d$S#wU@Wq!3CMF(E8x2_^_B8`tJ7K0v8k_wdGq=W5Z7T_ zF(hi+Ght#`LH+^IobNp;XE<`fJ_%Eux*?Xm-8tYY&&fBNY2&pP*+ zK1p#?B^7&FXb{gNY>*|zQ3WOVt3WJCW*KgNPXJKRIW1?hx{10B=Zz*iNea!#uUoW{ z%}vbfoem8|2zx-ZusgA(WwP;Ku7`4-?Q8z@XTn2kn4%1hKk4+j%jdo)$a-&>VbC0d`FntijF z5RVN^u)HjP2L(zSXdj!<&Xl&Lj61UTMO6^hn;=ip;sZ$P8VYAC@IdvR2kL(tWZweW zH&J_@1LBwWXhtKBX%0Pq>~`DketXx{kZM(i1p|$+$gMrjSusZ&oc2* X3xkS68hDrBWCM=j=SNqgYYq2*f0LE% literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/cli/chardetect.py b/venv-linux/lib/python3.6/site-packages/chardet/cli/chardetect.py new file mode 100644 index 0000000..f0a4cc5 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/cli/chardetect.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python +""" +Script which takes one or more file paths and reports on their detected +encodings + +Example:: + + % chardetect somefile someotherfile + somefile: windows-1252 with confidence 0.5 + someotherfile: ascii with confidence 1.0 + +If no paths are provided, it takes its input from stdin. + +""" + +from __future__ import absolute_import, print_function, unicode_literals + +import argparse +import sys + +from chardet import __version__ +from chardet.compat import PY2 +from chardet.universaldetector import UniversalDetector + + +def description_of(lines, name='stdin'): + """ + Return a string describing the probable encoding of a file or + list of strings. + + :param lines: The lines to get the encoding of. + :type lines: Iterable of bytes + :param name: Name of file or collection of lines + :type name: str + """ + u = UniversalDetector() + for line in lines: + line = bytearray(line) + u.feed(line) + # shortcut out of the loop to save reading further - particularly useful if we read a BOM. + if u.done: + break + u.close() + result = u.result + if PY2: + name = name.decode(sys.getfilesystemencoding(), 'ignore') + if result['encoding']: + return '{0}: {1} with confidence {2}'.format(name, result['encoding'], + result['confidence']) + else: + return '{0}: no result'.format(name) + + +def main(argv=None): + """ + Handles command line arguments and gets things started. + + :param argv: List of arguments, as if specified on the command-line. + If None, ``sys.argv[1:]`` is used instead. + :type argv: list of str + """ + # Get command line arguments + parser = argparse.ArgumentParser( + description="Takes one or more file paths and reports their detected \ + encodings") + parser.add_argument('input', + help='File whose encoding we would like to determine. \ + (default: stdin)', + type=argparse.FileType('rb'), nargs='*', + default=[sys.stdin if PY2 else sys.stdin.buffer]) + parser.add_argument('--version', action='version', + version='%(prog)s {0}'.format(__version__)) + args = parser.parse_args(argv) + + for f in args.input: + if f.isatty(): + print("You are running chardetect interactively. Press " + + "CTRL-D twice at the start of a blank line to signal the " + + "end of your input. If you want help, run chardetect " + + "--help\n", file=sys.stderr) + print(description_of(f, f.name)) + + +if __name__ == '__main__': + main() diff --git a/venv-linux/lib/python3.6/site-packages/chardet/codingstatemachine.py b/venv-linux/lib/python3.6/site-packages/chardet/codingstatemachine.py new file mode 100644 index 0000000..68fba44 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/codingstatemachine.py @@ -0,0 +1,88 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import logging + +from .enums import MachineState + + +class CodingStateMachine(object): + """ + A state machine to verify a byte sequence for a particular encoding. For + each byte the detector receives, it will feed that byte to every active + state machine available, one byte at a time. The state machine changes its + state based on its previous state and the byte it receives. There are 3 + states in a state machine that are of interest to an auto-detector: + + START state: This is the state to start with, or a legal byte sequence + (i.e. a valid code point) for character has been identified. + + ME state: This indicates that the state machine identified a byte sequence + that is specific to the charset it is designed for and that + there is no other possible encoding which can contain this byte + sequence. This will to lead to an immediate positive answer for + the detector. + + ERROR state: This indicates the state machine identified an illegal byte + sequence for that encoding. This will lead to an immediate + negative answer for this encoding. Detector will exclude this + encoding from consideration from here on. + """ + def __init__(self, sm): + self._model = sm + self._curr_byte_pos = 0 + self._curr_char_len = 0 + self._curr_state = None + self.logger = logging.getLogger(__name__) + self.reset() + + def reset(self): + self._curr_state = MachineState.START + + def next_state(self, c): + # for each byte we get its class + # if it is first byte, we also get byte length + byte_class = self._model['class_table'][c] + if self._curr_state == MachineState.START: + self._curr_byte_pos = 0 + self._curr_char_len = self._model['char_len_table'][byte_class] + # from byte's class and state_table, we get its next state + curr_state = (self._curr_state * self._model['class_factor'] + + byte_class) + self._curr_state = self._model['state_table'][curr_state] + self._curr_byte_pos += 1 + return self._curr_state + + def get_current_charlen(self): + return self._curr_char_len + + def get_coding_state_machine(self): + return self._model['name'] + + @property + def language(self): + return self._model['language'] diff --git a/venv-linux/lib/python3.6/site-packages/chardet/compat.py b/venv-linux/lib/python3.6/site-packages/chardet/compat.py new file mode 100644 index 0000000..ddd7468 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/compat.py @@ -0,0 +1,34 @@ +######################## BEGIN LICENSE BLOCK ######################## +# Contributor(s): +# Dan Blanchard +# Ian Cordasco +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import sys + + +if sys.version_info < (3, 0): + PY2 = True + PY3 = False + base_str = (str, unicode) + text_type = unicode +else: + PY2 = False + PY3 = True + base_str = (bytes, str) + text_type = str diff --git a/venv-linux/lib/python3.6/site-packages/chardet/cp949prober.py b/venv-linux/lib/python3.6/site-packages/chardet/cp949prober.py new file mode 100644 index 0000000..efd793a --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/cp949prober.py @@ -0,0 +1,49 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import EUCKRDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import CP949_SM_MODEL + + +class CP949Prober(MultiByteCharSetProber): + def __init__(self): + super(CP949Prober, self).__init__() + self.coding_sm = CodingStateMachine(CP949_SM_MODEL) + # NOTE: CP949 is a superset of EUC-KR, so the distribution should be + # not different. + self.distribution_analyzer = EUCKRDistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "CP949" + + @property + def language(self): + return "Korean" diff --git a/venv-linux/lib/python3.6/site-packages/chardet/enums.py b/venv-linux/lib/python3.6/site-packages/chardet/enums.py new file mode 100644 index 0000000..0451207 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/enums.py @@ -0,0 +1,76 @@ +""" +All of the Enums that are used throughout the chardet package. + +:author: Dan Blanchard (dan.blanchard@gmail.com) +""" + + +class InputState(object): + """ + This enum represents the different states a universal detector can be in. + """ + PURE_ASCII = 0 + ESC_ASCII = 1 + HIGH_BYTE = 2 + + +class LanguageFilter(object): + """ + This enum represents the different language filters we can apply to a + ``UniversalDetector``. + """ + CHINESE_SIMPLIFIED = 0x01 + CHINESE_TRADITIONAL = 0x02 + JAPANESE = 0x04 + KOREAN = 0x08 + NON_CJK = 0x10 + ALL = 0x1F + CHINESE = CHINESE_SIMPLIFIED | CHINESE_TRADITIONAL + CJK = CHINESE | JAPANESE | KOREAN + + +class ProbingState(object): + """ + This enum represents the different states a prober can be in. + """ + DETECTING = 0 + FOUND_IT = 1 + NOT_ME = 2 + + +class MachineState(object): + """ + This enum represents the different states a state machine can be in. + """ + START = 0 + ERROR = 1 + ITS_ME = 2 + + +class SequenceLikelihood(object): + """ + This enum represents the likelihood of a character following the previous one. + """ + NEGATIVE = 0 + UNLIKELY = 1 + LIKELY = 2 + POSITIVE = 3 + + @classmethod + def get_num_categories(cls): + """:returns: The number of likelihood categories in the enum.""" + return 4 + + +class CharacterCategory(object): + """ + This enum represents the different categories language models for + ``SingleByteCharsetProber`` put characters into. + + Anything less than CONTROL is considered a letter. + """ + UNDEFINED = 255 + LINE_BREAK = 254 + SYMBOL = 253 + DIGIT = 252 + CONTROL = 251 diff --git a/venv-linux/lib/python3.6/site-packages/chardet/escprober.py b/venv-linux/lib/python3.6/site-packages/chardet/escprober.py new file mode 100644 index 0000000..c70493f --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/escprober.py @@ -0,0 +1,101 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .codingstatemachine import CodingStateMachine +from .enums import LanguageFilter, ProbingState, MachineState +from .escsm import (HZ_SM_MODEL, ISO2022CN_SM_MODEL, ISO2022JP_SM_MODEL, + ISO2022KR_SM_MODEL) + + +class EscCharSetProber(CharSetProber): + """ + This CharSetProber uses a "code scheme" approach for detecting encodings, + whereby easily recognizable escape or shift sequences are relied on to + identify these encodings. + """ + + def __init__(self, lang_filter=None): + super(EscCharSetProber, self).__init__(lang_filter=lang_filter) + self.coding_sm = [] + if self.lang_filter & LanguageFilter.CHINESE_SIMPLIFIED: + self.coding_sm.append(CodingStateMachine(HZ_SM_MODEL)) + self.coding_sm.append(CodingStateMachine(ISO2022CN_SM_MODEL)) + if self.lang_filter & LanguageFilter.JAPANESE: + self.coding_sm.append(CodingStateMachine(ISO2022JP_SM_MODEL)) + if self.lang_filter & LanguageFilter.KOREAN: + self.coding_sm.append(CodingStateMachine(ISO2022KR_SM_MODEL)) + self.active_sm_count = None + self._detected_charset = None + self._detected_language = None + self._state = None + self.reset() + + def reset(self): + super(EscCharSetProber, self).reset() + for coding_sm in self.coding_sm: + if not coding_sm: + continue + coding_sm.active = True + coding_sm.reset() + self.active_sm_count = len(self.coding_sm) + self._detected_charset = None + self._detected_language = None + + @property + def charset_name(self): + return self._detected_charset + + @property + def language(self): + return self._detected_language + + def get_confidence(self): + if self._detected_charset: + return 0.99 + else: + return 0.00 + + def feed(self, byte_str): + for c in byte_str: + for coding_sm in self.coding_sm: + if not coding_sm or not coding_sm.active: + continue + coding_state = coding_sm.next_state(c) + if coding_state == MachineState.ERROR: + coding_sm.active = False + self.active_sm_count -= 1 + if self.active_sm_count <= 0: + self._state = ProbingState.NOT_ME + return self.state + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + self._detected_charset = coding_sm.get_coding_state_machine() + self._detected_language = coding_sm.language + return self.state + + return self.state diff --git a/venv-linux/lib/python3.6/site-packages/chardet/escsm.py b/venv-linux/lib/python3.6/site-packages/chardet/escsm.py new file mode 100644 index 0000000..0069523 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/escsm.py @@ -0,0 +1,246 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import MachineState + +HZ_CLS = ( +1,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,0,0,0,0, # 20 - 27 +0,0,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,0,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,4,0,5,2,0, # 78 - 7f +1,1,1,1,1,1,1,1, # 80 - 87 +1,1,1,1,1,1,1,1, # 88 - 8f +1,1,1,1,1,1,1,1, # 90 - 97 +1,1,1,1,1,1,1,1, # 98 - 9f +1,1,1,1,1,1,1,1, # a0 - a7 +1,1,1,1,1,1,1,1, # a8 - af +1,1,1,1,1,1,1,1, # b0 - b7 +1,1,1,1,1,1,1,1, # b8 - bf +1,1,1,1,1,1,1,1, # c0 - c7 +1,1,1,1,1,1,1,1, # c8 - cf +1,1,1,1,1,1,1,1, # d0 - d7 +1,1,1,1,1,1,1,1, # d8 - df +1,1,1,1,1,1,1,1, # e0 - e7 +1,1,1,1,1,1,1,1, # e8 - ef +1,1,1,1,1,1,1,1, # f0 - f7 +1,1,1,1,1,1,1,1, # f8 - ff +) + +HZ_ST = ( +MachineState.START,MachineState.ERROR, 3,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START, 4,MachineState.ERROR,# 10-17 + 5,MachineState.ERROR, 6,MachineState.ERROR, 5, 5, 4,MachineState.ERROR,# 18-1f + 4,MachineState.ERROR, 4, 4, 4,MachineState.ERROR, 4,MachineState.ERROR,# 20-27 + 4,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 28-2f +) + +HZ_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +HZ_SM_MODEL = {'class_table': HZ_CLS, + 'class_factor': 6, + 'state_table': HZ_ST, + 'char_len_table': HZ_CHAR_LEN_TABLE, + 'name': "HZ-GB-2312", + 'language': 'Chinese'} + +ISO2022CN_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,0,0,0,0, # 20 - 27 +0,3,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,4,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022CN_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 +MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f +MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,# 18-1f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 20-27 + 5, 6,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 28-2f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 30-37 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,# 38-3f +) + +ISO2022CN_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022CN_SM_MODEL = {'class_table': ISO2022CN_CLS, + 'class_factor': 9, + 'state_table': ISO2022CN_ST, + 'char_len_table': ISO2022CN_CHAR_LEN_TABLE, + 'name': "ISO-2022-CN", + 'language': 'Chinese'} + +ISO2022JP_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,2,2, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,7,0,0,0, # 20 - 27 +3,0,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +6,0,4,0,8,0,0,0, # 40 - 47 +0,9,5,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022JP_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 +MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,# 18-1f +MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 20-27 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 6,MachineState.ITS_ME,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,# 28-2f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,# 30-37 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 38-3f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.START,# 40-47 +) + +ISO2022JP_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022JP_SM_MODEL = {'class_table': ISO2022JP_CLS, + 'class_factor': 10, + 'state_table': ISO2022JP_ST, + 'char_len_table': ISO2022JP_CHAR_LEN_TABLE, + 'name': "ISO-2022-JP", + 'language': 'Japanese'} + +ISO2022KR_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,3,0,0,0, # 20 - 27 +0,4,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,5,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022KR_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 10-17 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 18-1f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 20-27 +) + +ISO2022KR_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +ISO2022KR_SM_MODEL = {'class_table': ISO2022KR_CLS, + 'class_factor': 6, + 'state_table': ISO2022KR_ST, + 'char_len_table': ISO2022KR_CHAR_LEN_TABLE, + 'name': "ISO-2022-KR", + 'language': 'Korean'} + + diff --git a/venv-linux/lib/python3.6/site-packages/chardet/eucjpprober.py b/venv-linux/lib/python3.6/site-packages/chardet/eucjpprober.py new file mode 100644 index 0000000..20ce8f7 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/eucjpprober.py @@ -0,0 +1,92 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import ProbingState, MachineState +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import EUCJPDistributionAnalysis +from .jpcntx import EUCJPContextAnalysis +from .mbcssm import EUCJP_SM_MODEL + + +class EUCJPProber(MultiByteCharSetProber): + def __init__(self): + super(EUCJPProber, self).__init__() + self.coding_sm = CodingStateMachine(EUCJP_SM_MODEL) + self.distribution_analyzer = EUCJPDistributionAnalysis() + self.context_analyzer = EUCJPContextAnalysis() + self.reset() + + def reset(self): + super(EUCJPProber, self).reset() + self.context_analyzer.reset() + + @property + def charset_name(self): + return "EUC-JP" + + @property + def language(self): + return "Japanese" + + def feed(self, byte_str): + for i in range(len(byte_str)): + # PY3K: byte_str is a byte array, so byte_str[i] is an int, not a byte + coding_state = self.coding_sm.next_state(byte_str[i]) + if coding_state == MachineState.ERROR: + self.logger.debug('%s %s prober hit error at byte %s', + self.charset_name, self.language, i) + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte_str[0] + self.context_analyzer.feed(self._last_char, char_len) + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.context_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + self.distribution_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if (self.context_analyzer.got_enough_data() and + (self.get_confidence() > self.SHORTCUT_THRESHOLD)): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + context_conf = self.context_analyzer.get_confidence() + distrib_conf = self.distribution_analyzer.get_confidence() + return max(context_conf, distrib_conf) diff --git a/venv-linux/lib/python3.6/site-packages/chardet/euckrfreq.py b/venv-linux/lib/python3.6/site-packages/chardet/euckrfreq.py new file mode 100644 index 0000000..b68078c --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/euckrfreq.py @@ -0,0 +1,195 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Sampling from about 20M text materials include literature and computer technology + +# 128 --> 0.79 +# 256 --> 0.92 +# 512 --> 0.986 +# 1024 --> 0.99944 +# 2048 --> 0.99999 +# +# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 +# Random Distribution Ration = 512 / (2350-512) = 0.279. +# +# Typical Distribution Ratio + +EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0 + +EUCKR_TABLE_SIZE = 2352 + +# Char to FreqOrder table , +EUCKR_CHAR_TO_FREQ_ORDER = ( + 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, +1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, +1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, + 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, + 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, + 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, +1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, + 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, + 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, +1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, +1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, +1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, +1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, +1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, + 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, +1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, +1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, +1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, +1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, + 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, +1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, + 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, + 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, +1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, + 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, +1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, + 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, + 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, +1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, +1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, +1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, +1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, + 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, +1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, + 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, + 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, +1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, +1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, +1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, +1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, +1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, +1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, + 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, + 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, + 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, +1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, + 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, +1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, + 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, + 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, +2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, + 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, + 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, +2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, +2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, +2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, + 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, + 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, +2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, + 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, +1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, +2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, +1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, +2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, +2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, +1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, + 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, +2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, +2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, + 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, + 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, +2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, +1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, +2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, +2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, +2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, +2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, +2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, +2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, +1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, +2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, +2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, +2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, +2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, +2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, +1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, +1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, +2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, +1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, +2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, +1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, + 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, +2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, + 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, +2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, + 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, +2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, +2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, + 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, +2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, +1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, + 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, +1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, +2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, +1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, +2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, + 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, +2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, +1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, +2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, +1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, +2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, +1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, + 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, +2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, +2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, + 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, + 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, +1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, +1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, + 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, +2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, +2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, + 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, + 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, + 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, +2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, + 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, + 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, +2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, +2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, + 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, +2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, +1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, + 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, +2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, +2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, +2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, + 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, + 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, + 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, +2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, +2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, +2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, +1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, +2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, + 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256 +) + diff --git a/venv-linux/lib/python3.6/site-packages/chardet/euckrprober.py b/venv-linux/lib/python3.6/site-packages/chardet/euckrprober.py new file mode 100644 index 0000000..345a060 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/euckrprober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import EUCKRDistributionAnalysis +from .mbcssm import EUCKR_SM_MODEL + + +class EUCKRProber(MultiByteCharSetProber): + def __init__(self): + super(EUCKRProber, self).__init__() + self.coding_sm = CodingStateMachine(EUCKR_SM_MODEL) + self.distribution_analyzer = EUCKRDistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "EUC-KR" + + @property + def language(self): + return "Korean" diff --git a/venv-linux/lib/python3.6/site-packages/chardet/euctwfreq.py b/venv-linux/lib/python3.6/site-packages/chardet/euctwfreq.py new file mode 100644 index 0000000..ed7a995 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/euctwfreq.py @@ -0,0 +1,387 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# EUCTW frequency table +# Converted from big5 work +# by Taiwan's Mandarin Promotion Council +# + +# 128 --> 0.42261 +# 256 --> 0.57851 +# 512 --> 0.74851 +# 1024 --> 0.89384 +# 2048 --> 0.97583 +# +# Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98 +# Random Distribution Ration = 512/(5401-512)=0.105 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR + +EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75 + +# Char to FreqOrder table , +EUCTW_TABLE_SIZE = 5376 + +EUCTW_CHAR_TO_FREQ_ORDER = ( + 1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, # 2742 +3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, # 2758 +1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, # 2774 + 63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, # 2790 +3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, # 2806 +4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, # 2822 +7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, # 2838 + 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, # 2854 + 179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, # 2870 + 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, # 2886 +2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, # 2902 +1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, # 2918 +3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, # 2934 + 706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, # 2950 +1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, # 2966 +3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, # 2982 +2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, # 2998 + 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, # 3014 +3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, # 3030 +1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, # 3046 +7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, # 3062 + 266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, # 3078 +7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, # 3094 +1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, # 3110 + 32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, # 3126 + 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, # 3142 +3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, # 3158 +3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, # 3174 + 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, # 3190 +2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, # 3206 +2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, # 3222 + 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, # 3238 + 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, # 3254 +3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, # 3270 +1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, # 3286 +1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, # 3302 +1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, # 3318 +2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, # 3334 + 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, # 3350 +4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, # 3366 +1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, # 3382 +7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, # 3398 +2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, # 3414 + 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, # 3430 + 98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, # 3446 + 523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, # 3462 + 710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, # 3478 +7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, # 3494 + 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, # 3510 +1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, # 3526 + 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, # 3542 + 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, # 3558 +7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, # 3574 +1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, # 3590 + 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, # 3606 +3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, # 3622 +4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, # 3638 +3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, # 3654 + 279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, # 3670 + 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, # 3686 +1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, # 3702 +4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, # 3718 +3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, # 3734 +3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, # 3750 +2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, # 3766 +7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, # 3782 +3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, # 3798 +7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, # 3814 +1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, # 3830 +2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, # 3846 +1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, # 3862 + 78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, # 3878 +1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, # 3894 +4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, # 3910 +3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, # 3926 + 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, # 3942 + 165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, # 3958 + 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, # 3974 +2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, # 3990 +7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, # 4006 +1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, # 4022 +2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, # 4038 +1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, # 4054 +1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, # 4070 +7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, # 4086 +7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, # 4102 +7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, # 4118 +3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, # 4134 +4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, # 4150 +1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, # 4166 +7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, # 4182 +2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, # 4198 +7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, # 4214 +3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, # 4230 +3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, # 4246 +7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, # 4262 +2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, # 4278 +7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, # 4294 + 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, # 4310 +4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, # 4326 +2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, # 4342 +7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, # 4358 +3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, # 4374 +2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, # 4390 +2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, # 4406 + 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, # 4422 +2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, # 4438 +1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, # 4454 +1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, # 4470 +2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, # 4486 +1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, # 4502 +7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, # 4518 +7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, # 4534 +2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, # 4550 +4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, # 4566 +1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, # 4582 +7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, # 4598 + 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, # 4614 +4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, # 4630 + 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, # 4646 +2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, # 4662 + 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, # 4678 +1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, # 4694 +1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, # 4710 + 730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, # 4726 +3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, # 4742 +3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, # 4758 +1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, # 4774 +3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, # 4790 +7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, # 4806 +7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, # 4822 +1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, # 4838 +2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, # 4854 +1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, # 4870 +3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, # 4886 +2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, # 4902 +3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, # 4918 +2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, # 4934 +4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, # 4950 +4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, # 4966 +3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, # 4982 + 97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, # 4998 +3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, # 5014 + 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, # 5030 +3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, # 5046 +3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, # 5062 +3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, # 5078 +1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, # 5094 +7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, # 5110 + 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, # 5126 +7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, # 5142 +1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, # 5158 + 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, # 5174 +4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, # 5190 +3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, # 5206 + 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, # 5222 +2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, # 5238 +2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, # 5254 +3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, # 5270 +1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, # 5286 +4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, # 5302 +2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, # 5318 +1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, # 5334 +1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, # 5350 +2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, # 5366 +3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, # 5382 +1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, # 5398 +7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, # 5414 +1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, # 5430 +4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, # 5446 +1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, # 5462 + 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, # 5478 +1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, # 5494 +3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, # 5510 +3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, # 5526 +2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, # 5542 +1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, # 5558 +4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, # 5574 + 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, # 5590 +7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, # 5606 +2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, # 5622 +3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, # 5638 +4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, # 5654 + 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, # 5670 +7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, # 5686 +7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, # 5702 +1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, # 5718 +4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, # 5734 +3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, # 5750 +2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, # 5766 +3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, # 5782 +3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, # 5798 +2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, # 5814 +1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, # 5830 +4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, # 5846 +3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, # 5862 +3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, # 5878 +2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, # 5894 +4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, # 5910 +7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, # 5926 +3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, # 5942 +2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, # 5958 +3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, # 5974 +1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, # 5990 +2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, # 6006 +3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, # 6022 +4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, # 6038 +2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, # 6054 +2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, # 6070 +7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, # 6086 +1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, # 6102 +2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, # 6118 +1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, # 6134 +3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, # 6150 +4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, # 6166 +2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, # 6182 +3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, # 6198 +3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, # 6214 +2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, # 6230 +4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, # 6246 +2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, # 6262 +3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, # 6278 +4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, # 6294 +7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, # 6310 +3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, # 6326 + 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, # 6342 +1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, # 6358 +4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, # 6374 +1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, # 6390 +4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, # 6406 +7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, # 6422 + 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, # 6438 +7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, # 6454 +2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, # 6470 +1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, # 6486 +1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, # 6502 +3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, # 6518 + 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, # 6534 + 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, # 6550 + 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, # 6566 +3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, # 6582 +2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, # 6598 + 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, # 6614 +7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, # 6630 +1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, # 6646 +3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, # 6662 +7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, # 6678 +1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, # 6694 +7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, # 6710 +4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, # 6726 +1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, # 6742 +2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, # 6758 +2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, # 6774 +4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, # 6790 + 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, # 6806 + 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, # 6822 +3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, # 6838 +3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, # 6854 +1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, # 6870 +2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, # 6886 +7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, # 6902 +1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, # 6918 +1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, # 6934 +3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, # 6950 + 919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, # 6966 +1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, # 6982 +4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, # 6998 +7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, # 7014 +2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, # 7030 +3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, # 7046 + 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, # 7062 +1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, # 7078 +2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, # 7094 +2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, # 7110 +7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, # 7126 +7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, # 7142 +7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, # 7158 +2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, # 7174 +2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, # 7190 +1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, # 7206 +4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, # 7222 +3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, # 7238 +3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, # 7254 +4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, # 7270 +4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, # 7286 +2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, # 7302 +2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, # 7318 +7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, # 7334 +4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, # 7350 +7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, # 7366 +2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, # 7382 +1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, # 7398 +3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, # 7414 +4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, # 7430 +2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, # 7446 + 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, # 7462 +2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, # 7478 +1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, # 7494 +2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, # 7510 +2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, # 7526 +4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, # 7542 +7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, # 7558 +1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, # 7574 +3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, # 7590 +7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, # 7606 +1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, # 7622 +8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, # 7638 +2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, # 7654 +8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, # 7670 +2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, # 7686 +2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, # 7702 +8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, # 7718 +8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, # 7734 +8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, # 7750 + 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, # 7766 +8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, # 7782 +4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, # 7798 +3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, # 7814 +8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, # 7830 +1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, # 7846 +8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, # 7862 + 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, # 7878 +1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, # 7894 + 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, # 7910 +4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, # 7926 +1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, # 7942 +4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, # 7958 +1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, # 7974 + 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, # 7990 +3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, # 8006 +4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, # 8022 +8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, # 8038 + 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, # 8054 +3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, # 8070 + 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, # 8086 +2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118, # 8102 +) + diff --git a/venv-linux/lib/python3.6/site-packages/chardet/euctwprober.py b/venv-linux/lib/python3.6/site-packages/chardet/euctwprober.py new file mode 100644 index 0000000..35669cc --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/euctwprober.py @@ -0,0 +1,46 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import EUCTWDistributionAnalysis +from .mbcssm import EUCTW_SM_MODEL + +class EUCTWProber(MultiByteCharSetProber): + def __init__(self): + super(EUCTWProber, self).__init__() + self.coding_sm = CodingStateMachine(EUCTW_SM_MODEL) + self.distribution_analyzer = EUCTWDistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "EUC-TW" + + @property + def language(self): + return "Taiwan" diff --git a/venv-linux/lib/python3.6/site-packages/chardet/gb2312freq.py b/venv-linux/lib/python3.6/site-packages/chardet/gb2312freq.py new file mode 100644 index 0000000..697837b --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/gb2312freq.py @@ -0,0 +1,283 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# GB2312 most frequently used character table +# +# Char to FreqOrder table , from hz6763 + +# 512 --> 0.79 -- 0.79 +# 1024 --> 0.92 -- 0.13 +# 2048 --> 0.98 -- 0.06 +# 6768 --> 1.00 -- 0.02 +# +# Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79 +# Random Distribution Ration = 512 / (3755 - 512) = 0.157 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR + +GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9 + +GB2312_TABLE_SIZE = 3760 + +GB2312_CHAR_TO_FREQ_ORDER = ( +1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, +2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, +2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, + 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, +1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, +1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, + 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, +1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, +2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, +3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, + 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, +1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, + 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, +2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, + 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, +2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, +1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, +3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, + 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, +1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, + 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, +2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, +1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, +3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, +1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, +2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, +1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, + 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, +3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, +3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, + 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, +3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, + 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, +1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, +3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, +2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, +1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, + 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, +1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, +4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, + 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, +3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, +3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, + 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, +1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, +2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, +1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, +1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, + 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, +3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, +3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, +4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, + 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, +3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, +1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, +1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, +4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, + 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, + 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, +3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, +1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, + 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, +1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, +2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, + 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, + 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, + 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, +3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, +4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, +3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, + 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, +2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, +2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, +2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, + 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, +2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, + 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, + 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, + 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, +3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, +2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, +2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, +1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, + 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, +2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, + 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, + 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, +1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, +1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, + 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, + 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, +1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, +2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, +3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, +2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, +2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, +2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, +3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, +1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, +1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, +2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, +1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, +3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, +1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, +1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, +3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, + 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, +2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, +1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, +4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, +1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, +1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, +3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, +1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, + 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, + 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, +1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, + 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, +1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, +1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, + 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, +3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, +4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, +3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, +2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, +2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, +1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, +3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, +2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, +1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, +1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, + 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, +2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, +2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, +3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, +4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, +3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, + 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, +3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, +2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, +1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, + 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, + 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, +3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, +4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, +2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, +1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, +1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, + 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, +1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, +3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, + 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, + 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, +1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, + 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, +1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, + 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, +2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, + 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, +2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, +2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, +1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, +1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, +2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, + 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, +1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, +1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, +2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, +2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, +3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, +1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, +4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, + 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, + 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, +3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, +1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, + 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, +3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, +1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, +4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, +1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, +2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, +1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, + 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, +1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, +3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, + 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, +2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, + 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, +1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, +1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, +1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, +3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, +2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, +3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, +3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, +3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, + 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, +2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, + 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, +2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, + 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, +1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, + 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, + 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, +1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, +3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, +3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, +1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, +1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, +3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, +2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, +2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, +1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, +3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, + 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, +4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, +1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, +2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, +3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, +3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, +1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, + 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, + 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, +2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, + 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, +1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, + 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, +1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, +1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, +1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, +1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, +1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, + 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, + 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, #last 512 +) + diff --git a/venv-linux/lib/python3.6/site-packages/chardet/gb2312prober.py b/venv-linux/lib/python3.6/site-packages/chardet/gb2312prober.py new file mode 100644 index 0000000..8446d2d --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/gb2312prober.py @@ -0,0 +1,46 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import GB2312DistributionAnalysis +from .mbcssm import GB2312_SM_MODEL + +class GB2312Prober(MultiByteCharSetProber): + def __init__(self): + super(GB2312Prober, self).__init__() + self.coding_sm = CodingStateMachine(GB2312_SM_MODEL) + self.distribution_analyzer = GB2312DistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "GB2312" + + @property + def language(self): + return "Chinese" diff --git a/venv-linux/lib/python3.6/site-packages/chardet/hebrewprober.py b/venv-linux/lib/python3.6/site-packages/chardet/hebrewprober.py new file mode 100644 index 0000000..b0e1bf4 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/hebrewprober.py @@ -0,0 +1,292 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Shy Shalom +# Portions created by the Initial Developer are Copyright (C) 2005 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState + +# This prober doesn't actually recognize a language or a charset. +# It is a helper prober for the use of the Hebrew model probers + +### General ideas of the Hebrew charset recognition ### +# +# Four main charsets exist in Hebrew: +# "ISO-8859-8" - Visual Hebrew +# "windows-1255" - Logical Hebrew +# "ISO-8859-8-I" - Logical Hebrew +# "x-mac-hebrew" - ?? Logical Hebrew ?? +# +# Both "ISO" charsets use a completely identical set of code points, whereas +# "windows-1255" and "x-mac-hebrew" are two different proper supersets of +# these code points. windows-1255 defines additional characters in the range +# 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific +# diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. +# x-mac-hebrew defines similar additional code points but with a different +# mapping. +# +# As far as an average Hebrew text with no diacritics is concerned, all four +# charsets are identical with respect to code points. Meaning that for the +# main Hebrew alphabet, all four map the same values to all 27 Hebrew letters +# (including final letters). +# +# The dominant difference between these charsets is their directionality. +# "Visual" directionality means that the text is ordered as if the renderer is +# not aware of a BIDI rendering algorithm. The renderer sees the text and +# draws it from left to right. The text itself when ordered naturally is read +# backwards. A buffer of Visual Hebrew generally looks like so: +# "[last word of first line spelled backwards] [whole line ordered backwards +# and spelled backwards] [first word of first line spelled backwards] +# [end of line] [last word of second line] ... etc' " +# adding punctuation marks, numbers and English text to visual text is +# naturally also "visual" and from left to right. +# +# "Logical" directionality means the text is ordered "naturally" according to +# the order it is read. It is the responsibility of the renderer to display +# the text from right to left. A BIDI algorithm is used to place general +# punctuation marks, numbers and English text in the text. +# +# Texts in x-mac-hebrew are almost impossible to find on the Internet. From +# what little evidence I could find, it seems that its general directionality +# is Logical. +# +# To sum up all of the above, the Hebrew probing mechanism knows about two +# charsets: +# Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are +# backwards while line order is natural. For charset recognition purposes +# the line order is unimportant (In fact, for this implementation, even +# word order is unimportant). +# Logical Hebrew - "windows-1255" - normal, naturally ordered text. +# +# "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be +# specifically identified. +# "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew +# that contain special punctuation marks or diacritics is displayed with +# some unconverted characters showing as question marks. This problem might +# be corrected using another model prober for x-mac-hebrew. Due to the fact +# that x-mac-hebrew texts are so rare, writing another model prober isn't +# worth the effort and performance hit. +# +#### The Prober #### +# +# The prober is divided between two SBCharSetProbers and a HebrewProber, +# all of which are managed, created, fed data, inquired and deleted by the +# SBCSGroupProber. The two SBCharSetProbers identify that the text is in +# fact some kind of Hebrew, Logical or Visual. The final decision about which +# one is it is made by the HebrewProber by combining final-letter scores +# with the scores of the two SBCharSetProbers to produce a final answer. +# +# The SBCSGroupProber is responsible for stripping the original text of HTML +# tags, English characters, numbers, low-ASCII punctuation characters, spaces +# and new lines. It reduces any sequence of such characters to a single space. +# The buffer fed to each prober in the SBCS group prober is pure text in +# high-ASCII. +# The two SBCharSetProbers (model probers) share the same language model: +# Win1255Model. +# The first SBCharSetProber uses the model normally as any other +# SBCharSetProber does, to recognize windows-1255, upon which this model was +# built. The second SBCharSetProber is told to make the pair-of-letter +# lookup in the language model backwards. This in practice exactly simulates +# a visual Hebrew model using the windows-1255 logical Hebrew model. +# +# The HebrewProber is not using any language model. All it does is look for +# final-letter evidence suggesting the text is either logical Hebrew or visual +# Hebrew. Disjointed from the model probers, the results of the HebrewProber +# alone are meaningless. HebrewProber always returns 0.00 as confidence +# since it never identifies a charset by itself. Instead, the pointer to the +# HebrewProber is passed to the model probers as a helper "Name Prober". +# When the Group prober receives a positive identification from any prober, +# it asks for the name of the charset identified. If the prober queried is a +# Hebrew model prober, the model prober forwards the call to the +# HebrewProber to make the final decision. In the HebrewProber, the +# decision is made according to the final-letters scores maintained and Both +# model probers scores. The answer is returned in the form of the name of the +# charset identified, either "windows-1255" or "ISO-8859-8". + +class HebrewProber(CharSetProber): + # windows-1255 / ISO-8859-8 code points of interest + FINAL_KAF = 0xea + NORMAL_KAF = 0xeb + FINAL_MEM = 0xed + NORMAL_MEM = 0xee + FINAL_NUN = 0xef + NORMAL_NUN = 0xf0 + FINAL_PE = 0xf3 + NORMAL_PE = 0xf4 + FINAL_TSADI = 0xf5 + NORMAL_TSADI = 0xf6 + + # Minimum Visual vs Logical final letter score difference. + # If the difference is below this, don't rely solely on the final letter score + # distance. + MIN_FINAL_CHAR_DISTANCE = 5 + + # Minimum Visual vs Logical model score difference. + # If the difference is below this, don't rely at all on the model score + # distance. + MIN_MODEL_DISTANCE = 0.01 + + VISUAL_HEBREW_NAME = "ISO-8859-8" + LOGICAL_HEBREW_NAME = "windows-1255" + + def __init__(self): + super(HebrewProber, self).__init__() + self._final_char_logical_score = None + self._final_char_visual_score = None + self._prev = None + self._before_prev = None + self._logical_prober = None + self._visual_prober = None + self.reset() + + def reset(self): + self._final_char_logical_score = 0 + self._final_char_visual_score = 0 + # The two last characters seen in the previous buffer, + # mPrev and mBeforePrev are initialized to space in order to simulate + # a word delimiter at the beginning of the data + self._prev = ' ' + self._before_prev = ' ' + # These probers are owned by the group prober. + + def set_model_probers(self, logicalProber, visualProber): + self._logical_prober = logicalProber + self._visual_prober = visualProber + + def is_final(self, c): + return c in [self.FINAL_KAF, self.FINAL_MEM, self.FINAL_NUN, + self.FINAL_PE, self.FINAL_TSADI] + + def is_non_final(self, c): + # The normal Tsadi is not a good Non-Final letter due to words like + # 'lechotet' (to chat) containing an apostrophe after the tsadi. This + # apostrophe is converted to a space in FilterWithoutEnglishLetters + # causing the Non-Final tsadi to appear at an end of a word even + # though this is not the case in the original text. + # The letters Pe and Kaf rarely display a related behavior of not being + # a good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' + # for example legally end with a Non-Final Pe or Kaf. However, the + # benefit of these letters as Non-Final letters outweighs the damage + # since these words are quite rare. + return c in [self.NORMAL_KAF, self.NORMAL_MEM, + self.NORMAL_NUN, self.NORMAL_PE] + + def feed(self, byte_str): + # Final letter analysis for logical-visual decision. + # Look for evidence that the received buffer is either logical Hebrew + # or visual Hebrew. + # The following cases are checked: + # 1) A word longer than 1 letter, ending with a final letter. This is + # an indication that the text is laid out "naturally" since the + # final letter really appears at the end. +1 for logical score. + # 2) A word longer than 1 letter, ending with a Non-Final letter. In + # normal Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, + # should not end with the Non-Final form of that letter. Exceptions + # to this rule are mentioned above in isNonFinal(). This is an + # indication that the text is laid out backwards. +1 for visual + # score + # 3) A word longer than 1 letter, starting with a final letter. Final + # letters should not appear at the beginning of a word. This is an + # indication that the text is laid out backwards. +1 for visual + # score. + # + # The visual score and logical score are accumulated throughout the + # text and are finally checked against each other in GetCharSetName(). + # No checking for final letters in the middle of words is done since + # that case is not an indication for either Logical or Visual text. + # + # We automatically filter out all 7-bit characters (replace them with + # spaces) so the word boundary detection works properly. [MAP] + + if self.state == ProbingState.NOT_ME: + # Both model probers say it's not them. No reason to continue. + return ProbingState.NOT_ME + + byte_str = self.filter_high_byte_only(byte_str) + + for cur in byte_str: + if cur == ' ': + # We stand on a space - a word just ended + if self._before_prev != ' ': + # next-to-last char was not a space so self._prev is not a + # 1 letter word + if self.is_final(self._prev): + # case (1) [-2:not space][-1:final letter][cur:space] + self._final_char_logical_score += 1 + elif self.is_non_final(self._prev): + # case (2) [-2:not space][-1:Non-Final letter][ + # cur:space] + self._final_char_visual_score += 1 + else: + # Not standing on a space + if ((self._before_prev == ' ') and + (self.is_final(self._prev)) and (cur != ' ')): + # case (3) [-2:space][-1:final letter][cur:not space] + self._final_char_visual_score += 1 + self._before_prev = self._prev + self._prev = cur + + # Forever detecting, till the end or until both model probers return + # ProbingState.NOT_ME (handled above) + return ProbingState.DETECTING + + @property + def charset_name(self): + # Make the decision: is it Logical or Visual? + # If the final letter score distance is dominant enough, rely on it. + finalsub = self._final_char_logical_score - self._final_char_visual_score + if finalsub >= self.MIN_FINAL_CHAR_DISTANCE: + return self.LOGICAL_HEBREW_NAME + if finalsub <= -self.MIN_FINAL_CHAR_DISTANCE: + return self.VISUAL_HEBREW_NAME + + # It's not dominant enough, try to rely on the model scores instead. + modelsub = (self._logical_prober.get_confidence() + - self._visual_prober.get_confidence()) + if modelsub > self.MIN_MODEL_DISTANCE: + return self.LOGICAL_HEBREW_NAME + if modelsub < -self.MIN_MODEL_DISTANCE: + return self.VISUAL_HEBREW_NAME + + # Still no good, back to final letter distance, maybe it'll save the + # day. + if finalsub < 0.0: + return self.VISUAL_HEBREW_NAME + + # (finalsub > 0 - Logical) or (don't know what to do) default to + # Logical. + return self.LOGICAL_HEBREW_NAME + + @property + def language(self): + return 'Hebrew' + + @property + def state(self): + # Remain active as long as any of the model probers are active. + if (self._logical_prober.state == ProbingState.NOT_ME) and \ + (self._visual_prober.state == ProbingState.NOT_ME): + return ProbingState.NOT_ME + return ProbingState.DETECTING diff --git a/venv-linux/lib/python3.6/site-packages/chardet/jisfreq.py b/venv-linux/lib/python3.6/site-packages/chardet/jisfreq.py new file mode 100644 index 0000000..83fc082 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/jisfreq.py @@ -0,0 +1,325 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Sampling from about 20M text materials include literature and computer technology +# +# Japanese frequency table, applied to both S-JIS and EUC-JP +# They are sorted in order. + +# 128 --> 0.77094 +# 256 --> 0.85710 +# 512 --> 0.92635 +# 1024 --> 0.97130 +# 2048 --> 0.99431 +# +# Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 +# Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 +# +# Typical Distribution Ratio, 25% of IDR + +JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0 + +# Char to FreqOrder table , +JIS_TABLE_SIZE = 4368 + +JIS_CHAR_TO_FREQ_ORDER = ( + 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16 +3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32 +1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48 +2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64 +2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80 +5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96 +1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112 +5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128 +5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144 +5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160 +5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176 +5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192 +5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208 +1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224 +1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240 +1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256 +2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272 +3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288 +3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304 + 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320 + 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336 +1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352 + 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368 +5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384 + 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400 + 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416 + 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432 + 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448 + 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464 +5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480 +5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496 +5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512 +4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528 +5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544 +5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560 +5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576 +5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592 +5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608 +5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624 +5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640 +5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656 +5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672 +3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688 +5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704 +5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720 +5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736 +5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752 +5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768 +5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784 +5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800 +5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816 +5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832 +5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848 +5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864 +5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880 +5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896 +5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912 +5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928 +5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944 +5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960 +5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976 +5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992 +5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008 +5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024 +5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040 +5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056 +5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072 +5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088 +5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104 +5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120 +5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136 +5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152 +5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168 +5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184 +5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200 +5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216 +5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232 +5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248 +5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264 +5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280 +5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296 +6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312 +6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328 +6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344 +6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360 +6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376 +6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392 +6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408 +6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424 +4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440 + 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456 + 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472 +1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488 +1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504 + 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520 +3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536 +3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552 + 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568 +3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584 +3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600 + 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616 +2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632 + 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648 +3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664 +1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680 + 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696 +1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712 + 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728 +2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744 +2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760 +2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776 +2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792 +1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808 +1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824 +1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840 +1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856 +2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872 +1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888 +2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904 +1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920 +1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936 +1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952 +1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968 +1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984 +1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000 + 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016 + 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032 +1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048 +2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064 +2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080 +2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096 +3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112 +3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128 + 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144 +3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160 +1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176 + 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192 +2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208 +1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224 + 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240 +3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256 +4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272 +2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288 +1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304 +2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320 +1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336 + 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352 + 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368 +1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384 +2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400 +2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416 +2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432 +3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448 +1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464 +2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480 + 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496 + 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512 + 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528 +1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544 +2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560 + 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576 +1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592 +1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608 + 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624 +1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640 +1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656 +1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672 + 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688 +2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704 + 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720 +2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736 +3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752 +2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768 +1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784 +6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800 +1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816 +2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832 +1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848 + 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864 + 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880 +3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896 +3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912 +1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928 +1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944 +1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960 +1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976 + 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992 + 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008 +2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024 + 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040 +3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056 +2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072 + 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088 +1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104 +2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120 + 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136 +1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152 + 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168 +4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184 +2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200 +1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216 + 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232 +1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248 +2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264 + 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280 +6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296 +1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312 +1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328 +2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344 +3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360 + 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376 +3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392 +1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408 + 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424 +1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440 + 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456 +3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472 + 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488 +2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504 + 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520 +4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536 +2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552 +1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568 +1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584 +1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600 + 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616 +1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632 +3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648 +1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664 +3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680 + 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696 + 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712 + 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728 +2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744 +1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760 + 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776 +1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792 + 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808 +1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824 + 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840 + 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856 + 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872 +1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888 +1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904 +2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920 +4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936 + 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952 +1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968 + 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984 +1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000 +3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016 +1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032 +2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048 +2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064 +1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080 +1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096 +2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112 + 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128 +2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144 +1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160 +1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176 +1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192 +1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208 +3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224 +2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240 +2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256 + 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272 +3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288 +3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304 +1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320 +2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336 +1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352 +2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512 +) + + diff --git a/venv-linux/lib/python3.6/site-packages/chardet/jpcntx.py b/venv-linux/lib/python3.6/site-packages/chardet/jpcntx.py new file mode 100644 index 0000000..20044e4 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/jpcntx.py @@ -0,0 +1,233 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + + +# This is hiragana 2-char sequence table, the number in each cell represents its frequency category +jp2CharContext = ( +(0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1), +(2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4), +(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2), +(0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4), +(1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4), +(0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3), +(0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3), +(0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3), +(0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4), +(0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3), +(2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4), +(0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3), +(0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5), +(0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3), +(2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5), +(0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4), +(1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4), +(0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3), +(0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3), +(0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3), +(0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5), +(0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4), +(0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5), +(0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3), +(0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4), +(0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4), +(0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4), +(0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1), +(0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0), +(1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3), +(0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0), +(0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3), +(0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3), +(0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5), +(0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4), +(2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5), +(0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3), +(0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3), +(0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3), +(0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3), +(0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4), +(0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4), +(0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2), +(0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3), +(0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3), +(0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3), +(0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3), +(0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4), +(0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3), +(0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4), +(0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3), +(0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3), +(0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4), +(0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4), +(0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3), +(2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4), +(0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4), +(0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3), +(0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4), +(0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4), +(1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4), +(0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3), +(0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2), +(0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2), +(0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3), +(0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3), +(0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5), +(0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3), +(0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4), +(1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4), +(0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1), +(0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2), +(0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3), +(0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1), +) + +class JapaneseContextAnalysis(object): + NUM_OF_CATEGORY = 6 + DONT_KNOW = -1 + ENOUGH_REL_THRESHOLD = 100 + MAX_REL_THRESHOLD = 1000 + MINIMUM_DATA_THRESHOLD = 4 + + def __init__(self): + self._total_rel = None + self._rel_sample = None + self._need_to_skip_char_num = None + self._last_char_order = None + self._done = None + self.reset() + + def reset(self): + self._total_rel = 0 # total sequence received + # category counters, each integer counts sequence in its category + self._rel_sample = [0] * self.NUM_OF_CATEGORY + # if last byte in current buffer is not the last byte of a character, + # we need to know how many bytes to skip in next buffer + self._need_to_skip_char_num = 0 + self._last_char_order = -1 # The order of previous char + # If this flag is set to True, detection is done and conclusion has + # been made + self._done = False + + def feed(self, byte_str, num_bytes): + if self._done: + return + + # The buffer we got is byte oriented, and a character may span in more than one + # buffers. In case the last one or two byte in last buffer is not + # complete, we record how many byte needed to complete that character + # and skip these bytes here. We can choose to record those bytes as + # well and analyse the character once it is complete, but since a + # character will not make much difference, by simply skipping + # this character will simply our logic and improve performance. + i = self._need_to_skip_char_num + while i < num_bytes: + order, char_len = self.get_order(byte_str[i:i + 2]) + i += char_len + if i > num_bytes: + self._need_to_skip_char_num = i - num_bytes + self._last_char_order = -1 + else: + if (order != -1) and (self._last_char_order != -1): + self._total_rel += 1 + if self._total_rel > self.MAX_REL_THRESHOLD: + self._done = True + break + self._rel_sample[jp2CharContext[self._last_char_order][order]] += 1 + self._last_char_order = order + + def got_enough_data(self): + return self._total_rel > self.ENOUGH_REL_THRESHOLD + + def get_confidence(self): + # This is just one way to calculate confidence. It works well for me. + if self._total_rel > self.MINIMUM_DATA_THRESHOLD: + return (self._total_rel - self._rel_sample[0]) / self._total_rel + else: + return self.DONT_KNOW + + def get_order(self, byte_str): + return -1, 1 + +class SJISContextAnalysis(JapaneseContextAnalysis): + def __init__(self): + super(SJISContextAnalysis, self).__init__() + self._charset_name = "SHIFT_JIS" + + @property + def charset_name(self): + return self._charset_name + + def get_order(self, byte_str): + if not byte_str: + return -1, 1 + # find out current char's byte length + first_char = byte_str[0] + if (0x81 <= first_char <= 0x9F) or (0xE0 <= first_char <= 0xFC): + char_len = 2 + if (first_char == 0x87) or (0xFA <= first_char <= 0xFC): + self._charset_name = "CP932" + else: + char_len = 1 + + # return its order if it is hiragana + if len(byte_str) > 1: + second_char = byte_str[1] + if (first_char == 202) and (0x9F <= second_char <= 0xF1): + return second_char - 0x9F, char_len + + return -1, char_len + +class EUCJPContextAnalysis(JapaneseContextAnalysis): + def get_order(self, byte_str): + if not byte_str: + return -1, 1 + # find out current char's byte length + first_char = byte_str[0] + if (first_char == 0x8E) or (0xA1 <= first_char <= 0xFE): + char_len = 2 + elif first_char == 0x8F: + char_len = 3 + else: + char_len = 1 + + # return its order if it is hiragana + if len(byte_str) > 1: + second_char = byte_str[1] + if (first_char == 0xA4) and (0xA1 <= second_char <= 0xF3): + return second_char - 0xA1, char_len + + return -1, char_len + + diff --git a/venv-linux/lib/python3.6/site-packages/chardet/langbulgarianmodel.py b/venv-linux/lib/python3.6/site-packages/chardet/langbulgarianmodel.py new file mode 100644 index 0000000..2aa4fb2 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/langbulgarianmodel.py @@ -0,0 +1,228 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Character Mapping Table: +# this table is modified base on win1251BulgarianCharToOrderMap, so +# only number <64 is sure valid + +Latin5_BulgarianCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 +110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 +253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 +116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 +194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209, # 80 +210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225, # 90 + 81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238, # a0 + 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # b0 + 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56, # c0 + 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # d0 + 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16, # e0 + 62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253, # f0 +) + +win1251BulgarianCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 +110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 +253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 +116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 +206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220, # 80 +221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229, # 90 + 88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240, # a0 + 73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250, # b0 + 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # c0 + 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56, # d0 + 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # e0 + 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16, # f0 +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 96.9392% +# first 1024 sequences:3.0618% +# rest sequences: 0.2992% +# negative sequences: 0.0020% +BulgarianLangModel = ( +0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2, +3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1, +0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0, +0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0, +0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0, +0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0, +0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3, +2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1, +3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2, +1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0, +3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1, +1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0, +2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2, +2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0, +3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2, +1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0, +2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2, +2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0, +3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2, +1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0, +2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2, +2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0, +2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2, +1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0, +2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2, +1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0, +3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2, +1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0, +3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1, +1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0, +2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1, +1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0, +2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2, +1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0, +2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1, +1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0, +3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, +1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2, +1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1, +2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2, +1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0, +2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2, +1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1, +0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2, +1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1, +1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0, +1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1, +0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1, +0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, +0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0, +1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, +0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, +1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1, +1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, +1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +) + +Latin5BulgarianModel = { + 'char_to_order_map': Latin5_BulgarianCharToOrderMap, + 'precedence_matrix': BulgarianLangModel, + 'typical_positive_ratio': 0.969392, + 'keep_english_letter': False, + 'charset_name': "ISO-8859-5", + 'language': 'Bulgairan', +} + +Win1251BulgarianModel = { + 'char_to_order_map': win1251BulgarianCharToOrderMap, + 'precedence_matrix': BulgarianLangModel, + 'typical_positive_ratio': 0.969392, + 'keep_english_letter': False, + 'charset_name': "windows-1251", + 'language': 'Bulgarian', +} diff --git a/venv-linux/lib/python3.6/site-packages/chardet/langcyrillicmodel.py b/venv-linux/lib/python3.6/site-packages/chardet/langcyrillicmodel.py new file mode 100644 index 0000000..e5f9a1f --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/langcyrillicmodel.py @@ -0,0 +1,333 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# KOI8-R language model +# Character Mapping Table: +KOI8R_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, # 80 +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, # 90 +223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237, # a0 +238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253, # b0 + 27, 3, 21, 28, 13, 2, 39, 19, 26, 4, 23, 11, 8, 12, 5, 1, # c0 + 15, 16, 9, 7, 6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54, # d0 + 59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34, # e0 + 35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70, # f0 +) + +win1251_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, +223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, +239,240,241,242,243,244,245,246, 68,247,248,249,250,251,252,253, + 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, + 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, + 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, + 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, +) + +latin5_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, +223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, + 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, + 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, + 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, + 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, +239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, +) + +macCyrillic_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 + 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, + 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, +223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, +239,240,241,242,243,244,245,246,247,248,249,250,251,252, 68, 16, + 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, + 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255, +) + +IBM855_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 +191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205, +206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70, + 3, 37, 21, 44, 28, 58, 13, 41, 2, 48, 39, 53, 19, 46,218,219, +220,221,222,223,224, 26, 55, 4, 42,225,226,227,228, 23, 60,229, +230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243, + 8, 49, 12, 38, 5, 31, 1, 34, 15,244,245,246,247, 35, 16,248, + 43, 9, 45, 7, 32, 6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249, +250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255, +) + +IBM866_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 + 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, + 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, + 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, +223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, + 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, +239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 97.6601% +# first 1024 sequences: 2.3389% +# rest sequences: 0.1237% +# negative sequences: 0.0009% +RussianLangModel = ( +0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2, +3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, +0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, +0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1, +1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1, +1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0, +2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1, +1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0, +3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1, +1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0, +2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2, +1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1, +1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1, +1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, +2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1, +1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0, +3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2, +1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1, +2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1, +1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0, +2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1, +1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0, +1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1, +1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0, +3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1, +2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1, +3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1, +1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1, +1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1, +0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0, +2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1, +1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0, +1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1, +0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1, +1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2, +2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1, +1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0, +1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0, +2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0, +1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1, +0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, +2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1, +1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1, +1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0, +0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1, +0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1, +0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1, +0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, +0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, +1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1, +0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, +2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0, +0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, +) + +Koi8rModel = { + 'char_to_order_map': KOI8R_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "KOI8-R", + 'language': 'Russian', +} + +Win1251CyrillicModel = { + 'char_to_order_map': win1251_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "windows-1251", + 'language': 'Russian', +} + +Latin5CyrillicModel = { + 'char_to_order_map': latin5_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "ISO-8859-5", + 'language': 'Russian', +} + +MacCyrillicModel = { + 'char_to_order_map': macCyrillic_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "MacCyrillic", + 'language': 'Russian', +} + +Ibm866Model = { + 'char_to_order_map': IBM866_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "IBM866", + 'language': 'Russian', +} + +Ibm855Model = { + 'char_to_order_map': IBM855_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "IBM855", + 'language': 'Russian', +} diff --git a/venv-linux/lib/python3.6/site-packages/chardet/langgreekmodel.py b/venv-linux/lib/python3.6/site-packages/chardet/langgreekmodel.py new file mode 100644 index 0000000..5332221 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/langgreekmodel.py @@ -0,0 +1,225 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Character Mapping Table: +Latin7_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 + 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 +253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 + 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 +253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 +253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123, # b0 +110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 + 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 +124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 + 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 +) + +win1253_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 + 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 +253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 + 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 +253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 +253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123, # b0 +110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 + 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 +124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 + 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 98.2851% +# first 1024 sequences:1.7001% +# rest sequences: 0.0359% +# negative sequences: 0.0148% +GreekLangModel = ( +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0, +3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, +0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0, +2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0, +0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0, +2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0, +2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0, +0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0, +2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0, +0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0, +3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0, +3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0, +2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0, +2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0, +0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0, +0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0, +0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2, +0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0, +0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2, +0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0, +0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2, +0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2, +0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0, +0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2, +0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0, +0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0, +0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0, +0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, +0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0, +0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2, +0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0, +0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2, +0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2, +0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0, +0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2, +0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0, +0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1, +0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0, +0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2, +0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, +0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2, +0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2, +0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0, +0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0, +0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1, +0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0, +0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0, +0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +) + +Latin7GreekModel = { + 'char_to_order_map': Latin7_char_to_order_map, + 'precedence_matrix': GreekLangModel, + 'typical_positive_ratio': 0.982851, + 'keep_english_letter': False, + 'charset_name': "ISO-8859-7", + 'language': 'Greek', +} + +Win1253GreekModel = { + 'char_to_order_map': win1253_char_to_order_map, + 'precedence_matrix': GreekLangModel, + 'typical_positive_ratio': 0.982851, + 'keep_english_letter': False, + 'charset_name': "windows-1253", + 'language': 'Greek', +} diff --git a/venv-linux/lib/python3.6/site-packages/chardet/langhebrewmodel.py b/venv-linux/lib/python3.6/site-packages/chardet/langhebrewmodel.py new file mode 100644 index 0000000..58f4c87 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/langhebrewmodel.py @@ -0,0 +1,200 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Simon Montagu +# Portions created by the Initial Developer are Copyright (C) 2005 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Shoshannah Forbes - original C code (?) +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Windows-1255 language model +# Character Mapping Table: +WIN1255_CHAR_TO_ORDER_MAP = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85, # 40 + 78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253, # 50 +253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49, # 60 + 66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253, # 70 +124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214, +215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221, + 34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227, +106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234, + 30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237, +238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250, + 9, 8, 20, 16, 3, 2, 24, 14, 22, 1, 25, 15, 4, 11, 6, 23, + 12, 19, 13, 26, 18, 27, 21, 17, 7, 10, 5,251,252,128, 96,253, +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 98.4004% +# first 1024 sequences: 1.5981% +# rest sequences: 0.087% +# negative sequences: 0.0015% +HEBREW_LANG_MODEL = ( +0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0, +3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2, +1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2, +1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3, +1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2, +1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2, +1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2, +0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2, +0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2, +1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0, +3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2, +0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1, +0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0, +0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, +0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2, +0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0, +3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2, +0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2, +0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2, +0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2, +0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1, +0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2, +0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0, +3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2, +0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2, +0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2, +0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0, +1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2, +0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0, +0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3, +0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0, +0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0, +0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, +0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0, +2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0, +0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2, +0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0, +0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1, +1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1, +0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1, +2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1, +1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1, +2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1, +1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1, +2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, +0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1, +1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1, +0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0, +) + +Win1255HebrewModel = { + 'char_to_order_map': WIN1255_CHAR_TO_ORDER_MAP, + 'precedence_matrix': HEBREW_LANG_MODEL, + 'typical_positive_ratio': 0.984004, + 'keep_english_letter': False, + 'charset_name': "windows-1255", + 'language': 'Hebrew', +} diff --git a/venv-linux/lib/python3.6/site-packages/chardet/langhungarianmodel.py b/venv-linux/lib/python3.6/site-packages/chardet/langhungarianmodel.py new file mode 100644 index 0000000..bb7c095 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/langhungarianmodel.py @@ -0,0 +1,225 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Character Mapping Table: +Latin2_HungarianCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, + 46, 71, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, +253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, + 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, +159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174, +175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190, +191,192,193,194,195,196,197, 75,198,199,200,201,202,203,204,205, + 79,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, +221, 51, 81,222, 78,223,224,225,226, 44,227,228,229, 61,230,231, +232,233,234, 58,235, 66, 59,236,237,238, 60, 69, 63,239,240,241, + 82, 14, 74,242, 70, 80,243, 72,244, 15, 83, 77, 84, 30, 76, 85, +245,246,247, 25, 73, 42, 24,248,249,250, 31, 56, 29,251,252,253, +) + +win1250HungarianCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, + 46, 72, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, +253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, + 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, +161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176, +177,178,179,180, 78,181, 69,182,183,184,185,186,187,188,189,190, +191,192,193,194,195,196,197, 76,198,199,200,201,202,203,204,205, + 81,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, +221, 51, 83,222, 80,223,224,225,226, 44,227,228,229, 61,230,231, +232,233,234, 58,235, 66, 59,236,237,238, 60, 70, 63,239,240,241, + 84, 14, 75,242, 71, 82,243, 73,244, 15, 85, 79, 86, 30, 77, 87, +245,246,247, 25, 74, 42, 24,248,249,250, 31, 56, 29,251,252,253, +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 94.7368% +# first 1024 sequences:5.2623% +# rest sequences: 0.8894% +# negative sequences: 0.0009% +HungarianLangModel = ( +0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, +3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,1,1,2,2,2,2,2,1,2, +3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,1,2,3,3,3,3,2,3,3,1,1,3,3,0,1,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, +3,2,1,3,3,3,3,3,2,3,3,3,3,3,1,1,2,3,3,3,3,3,3,3,1,1,3,2,0,1,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,1,1,2,3,3,3,1,3,3,3,3,3,1,3,3,2,2,0,3,2,3, +0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,2,3,3,2,2,3,2,3,2,0,3,2,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, +3,3,3,3,3,3,2,3,3,3,3,3,2,3,3,3,1,2,3,2,2,3,1,2,3,3,2,2,0,3,3,3, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,0,2,3,2, +0,0,0,1,1,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,2,1,3,2,2,3,2,1,3,2,2,1,0,3,3,1, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,2,2,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,3,2,2,3,1,1,3,2,0,1,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,1,3,3,3,3,3,2,2,1,3,3,3,0,1,1,2, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,0,3,2,3, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0, +3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,1,3,2,2,2,3,1,1,3,3,1,1,0,3,3,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,2,3,3,3,3,3,1,2,3,2,2,0,2,2,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,2,2,2,3,1,3,3,2,2,1,3,3,3,1,1,3,1,2,3,2,3,2,2,2,1,0,2,2,2, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, +3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,2,2,3,2,1,0,3,2,0,1,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,1,0,3,3,3,3,0,2,3,0,0,2,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,2,3,3,2,2,2,2,3,3,0,1,2,3,2,3,2,2,3,2,1,2,0,2,2,2, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, +3,3,3,3,3,3,1,2,3,3,3,2,1,2,3,3,2,2,2,3,2,3,3,1,3,3,1,1,0,2,3,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,1,2,2,2,2,3,3,3,1,1,1,3,3,1,1,3,1,1,3,2,1,2,3,1,1,0,2,2,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,2,1,2,1,1,3,3,1,1,1,1,3,3,1,1,2,2,1,2,1,1,2,2,1,1,0,2,2,1, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,1,1,2,1,1,3,3,1,0,1,1,3,3,2,0,1,1,2,3,1,0,2,2,1,0,0,1,3,2, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,2,1,3,3,3,3,3,1,2,3,2,3,3,2,1,1,3,2,3,2,1,2,2,0,1,2,1,0,0,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,2,2,2,2,3,1,2,2,1,1,3,3,0,3,2,1,2,3,2,1,3,3,1,1,0,2,1,3, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,2,2,2,3,2,3,3,3,2,1,1,3,3,1,1,1,2,2,3,2,3,2,2,2,1,0,2,2,1, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +1,0,0,3,3,3,3,3,0,0,3,3,2,3,0,0,0,2,3,3,1,0,1,2,0,0,1,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,2,3,3,3,3,3,1,2,3,3,2,2,1,1,0,3,3,2,2,1,2,2,1,0,2,2,0,1,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,2,2,1,3,1,2,3,3,2,2,1,1,2,2,1,1,1,1,3,2,1,1,1,1,2,1,0,1,2,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +2,3,3,1,1,1,1,1,3,3,3,0,1,1,3,3,1,1,1,1,1,2,2,0,3,1,1,2,0,2,1,1, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,1,0,1,2,1,2,2,0,1,2,3,1,2,0,0,0,2,1,1,1,1,1,2,0,0,1,1,0,0,0,0, +1,2,1,2,2,2,1,2,1,2,0,2,0,2,2,1,1,2,1,1,2,1,1,1,0,1,0,0,0,1,1,0, +1,1,1,2,3,2,3,3,0,1,2,2,3,1,0,1,0,2,1,2,2,0,1,1,0,0,1,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,3,3,2,2,1,0,0,3,2,3,2,0,0,0,1,1,3,0,0,1,1,0,0,2,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,2,2,3,3,1,0,1,3,2,3,1,1,1,0,1,1,1,1,1,3,1,0,0,2,2,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,1,2,2,2,1,0,1,2,3,3,2,0,0,0,2,1,1,1,2,1,1,1,0,1,1,1,0,0,0, +1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,0,0,1,1, +3,2,2,1,0,0,1,1,2,2,0,3,0,1,2,1,1,0,0,1,1,1,0,1,1,1,1,0,2,1,1,1, +2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,2,3,1,1,1,1,1,1,1,1,1,0,1, +2,3,3,0,1,0,0,0,3,3,1,0,0,1,2,2,1,0,0,0,0,2,0,0,1,1,1,0,2,1,1,1, +2,1,1,1,1,1,1,2,1,1,0,1,1,0,1,1,1,0,1,2,1,1,0,1,1,1,1,1,1,1,0,1, +2,3,3,0,1,0,0,0,2,2,0,0,0,0,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,1,0, +2,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, +3,2,2,0,1,0,1,0,2,3,2,0,0,1,2,2,1,0,0,1,1,1,0,0,2,1,0,1,2,2,1,1, +2,1,1,1,1,1,1,2,1,1,1,1,1,1,0,2,1,0,1,1,0,1,1,1,0,1,1,2,1,1,0,1, +2,2,2,0,0,1,0,0,2,2,1,1,0,0,2,1,1,0,0,0,1,2,0,0,2,1,0,0,2,1,1,1, +2,1,1,1,1,2,1,2,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1, +1,2,3,0,0,0,1,0,3,2,1,0,0,1,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,2,1, +1,1,0,0,0,1,0,1,1,1,1,1,2,0,0,1,0,0,0,2,0,0,1,1,1,1,1,1,1,1,0,1, +3,0,0,2,1,2,2,1,0,0,2,1,2,2,0,0,0,2,1,1,1,0,1,1,0,0,1,1,2,0,0,0, +1,2,1,2,2,1,1,2,1,2,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,0,0,1, +1,3,2,0,0,0,1,0,2,2,2,0,0,0,2,2,1,0,0,0,0,3,1,1,1,1,0,0,2,1,1,1, +2,1,0,1,1,1,0,1,1,1,1,1,1,1,0,2,1,0,0,1,0,1,1,0,1,1,1,1,1,1,0,1, +2,3,2,0,0,0,1,0,2,2,0,0,0,0,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,1,0, +2,1,1,1,1,2,1,2,1,2,0,1,1,1,0,2,1,1,1,2,1,1,1,1,0,1,1,1,1,1,0,1, +3,1,1,2,2,2,3,2,1,1,2,2,1,1,0,1,0,2,2,1,1,1,1,1,0,0,1,1,0,1,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,1,0,0,0,1,1,0,0,1,2,0,0,2,1,1,1, +2,2,1,1,1,2,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,1,1,0,1,2,1,1,1,0,1, +1,0,0,1,2,3,2,1,0,0,2,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0, +1,2,1,2,1,2,1,1,1,2,0,2,1,1,1,0,1,2,0,0,1,1,1,0,0,0,0,0,0,0,0,0, +2,3,2,0,0,0,0,0,1,1,2,1,0,0,1,1,1,0,0,0,0,2,0,0,1,1,0,0,2,1,1,1, +2,1,1,1,1,1,1,2,1,0,1,1,1,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1, +1,2,2,0,1,1,1,0,2,2,2,0,0,0,3,2,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0, +1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,0,0,1,1,1,0,1,0,1, +2,1,0,2,1,1,2,2,1,1,2,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0, +1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0, +1,2,3,0,0,0,1,0,2,2,0,0,0,0,2,2,0,0,0,0,0,1,0,0,1,0,0,0,2,0,1,0, +2,1,1,1,1,1,0,2,0,0,0,1,2,1,1,1,1,0,1,2,0,1,0,1,0,1,1,1,0,1,0,1, +2,2,2,0,0,0,1,0,2,1,2,0,0,0,1,1,2,0,0,0,0,1,0,0,1,1,0,0,2,1,0,1, +2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, +1,2,2,0,0,0,1,0,2,2,2,0,0,0,1,1,0,0,0,0,0,1,1,0,2,0,0,1,1,1,0,1, +1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1, +1,0,0,1,0,1,2,1,0,0,1,1,1,2,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0, +0,2,1,2,1,1,1,1,1,2,0,2,0,1,1,0,1,2,1,0,1,1,1,0,0,0,0,0,0,1,0,0, +2,1,1,0,1,2,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,2,1,0,1, +2,2,1,1,1,1,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,0,1,0,1,1,1,1,1,0,1, +1,2,2,0,0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0,0,2,0,0,2,2,0,0,2,0,0,1, +2,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1, +1,1,2,0,0,3,1,0,2,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0, +1,2,1,0,1,1,1,2,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0, +2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,2,0,0,0, +2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,1,0,1, +2,1,1,1,2,1,1,1,0,1,1,2,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,1,0,1,1,1,1,1,0,0,1,1,2,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0, +1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0, +2,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,2,0,0,1,0,0,1,0,1,0,0,0, +0,1,1,1,1,1,1,1,1,2,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, +1,0,0,1,1,1,1,1,0,0,2,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0, +0,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0, +1,0,0,1,1,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, +0,0,0,1,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, +2,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, +0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0, +) + +Latin2HungarianModel = { + 'char_to_order_map': Latin2_HungarianCharToOrderMap, + 'precedence_matrix': HungarianLangModel, + 'typical_positive_ratio': 0.947368, + 'keep_english_letter': True, + 'charset_name': "ISO-8859-2", + 'language': 'Hungarian', +} + +Win1250HungarianModel = { + 'char_to_order_map': win1250HungarianCharToOrderMap, + 'precedence_matrix': HungarianLangModel, + 'typical_positive_ratio': 0.947368, + 'keep_english_letter': True, + 'charset_name': "windows-1250", + 'language': 'Hungarian', +} diff --git a/venv-linux/lib/python3.6/site-packages/chardet/langthaimodel.py b/venv-linux/lib/python3.6/site-packages/chardet/langthaimodel.py new file mode 100644 index 0000000..15f94c2 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/langthaimodel.py @@ -0,0 +1,199 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# The following result for thai was collected from a limited sample (1M). + +# Character Mapping Table: +TIS620CharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,182,106,107,100,183,184,185,101, 94,186,187,108,109,110,111, # 40 +188,189,190, 89, 95,112,113,191,192,193,194,253,253,253,253,253, # 50 +253, 64, 72, 73,114, 74,115,116,102, 81,201,117, 90,103, 78, 82, # 60 + 96,202, 91, 79, 84,104,105, 97, 98, 92,203,253,253,253,253,253, # 70 +209,210,211,212,213, 88,214,215,216,217,218,219,220,118,221,222, +223,224, 99, 85, 83,225,226,227,228,229,230,231,232,233,234,235, +236, 5, 30,237, 24,238, 75, 8, 26, 52, 34, 51,119, 47, 58, 57, + 49, 53, 55, 43, 20, 19, 44, 14, 48, 3, 17, 25, 39, 62, 31, 54, + 45, 9, 16, 2, 61, 15,239, 12, 42, 46, 18, 21, 76, 4, 66, 63, + 22, 10, 1, 36, 23, 13, 40, 27, 32, 35, 86,240,241,242,243,244, + 11, 28, 41, 29, 33,245, 50, 37, 6, 7, 67, 77, 38, 93,246,247, + 68, 56, 59, 65, 69, 60, 70, 80, 71, 87,248,249,250,251,252,253, +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 92.6386% +# first 1024 sequences:7.3177% +# rest sequences: 1.0230% +# negative sequences: 0.0436% +ThaiLangModel = ( +0,1,3,3,3,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,0,0,3,3,3,0,3,3,3,3, +0,3,3,0,0,0,1,3,0,3,3,2,3,3,0,1,2,3,3,3,3,0,2,0,2,0,0,3,2,1,2,2, +3,0,3,3,2,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,0,3,2,3,0,2,2,2,3, +0,2,3,0,0,0,0,1,0,1,2,3,1,1,3,2,2,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1, +3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,2,3,3,2,2,2, +3,1,2,3,0,3,3,2,2,1,2,3,3,1,2,0,1,3,0,1,0,0,1,0,0,0,0,0,0,0,1,1, +3,3,2,2,3,3,3,3,1,2,3,3,3,3,3,2,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2, +3,3,1,2,3,1,2,2,3,3,1,0,2,1,0,0,3,1,2,1,0,0,1,0,0,0,0,0,0,1,0,1, +3,3,3,3,3,3,2,2,3,3,3,3,2,3,2,2,3,3,2,2,3,2,2,2,2,1,1,3,1,2,1,1, +3,2,1,0,2,1,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0, +3,3,3,2,3,2,3,3,2,2,3,2,3,3,2,3,1,1,2,3,2,2,2,3,2,2,2,2,2,1,2,1, +2,2,1,1,3,3,2,1,0,1,2,2,0,1,3,0,0,0,1,1,0,0,0,0,0,2,3,0,0,2,1,1, +3,3,2,3,3,2,0,0,3,3,0,3,3,0,2,2,3,1,2,2,1,1,1,0,2,2,2,0,2,2,1,1, +0,2,1,0,2,0,0,2,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,2,3,3,2,0,0,3,3,0,2,3,0,2,1,2,2,2,2,1,2,0,0,2,2,2,0,2,2,1,1, +0,2,1,0,2,0,0,2,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, +3,3,2,3,2,3,2,0,2,2,1,3,2,1,3,2,1,2,3,2,2,3,0,2,3,2,2,1,2,2,2,2, +1,2,2,0,0,0,0,2,0,1,2,0,1,1,1,0,1,0,3,1,1,0,0,0,0,0,0,0,0,0,1,0, +3,3,2,3,3,2,3,2,2,2,3,2,2,3,2,2,1,2,3,2,2,3,1,3,2,2,2,3,2,2,2,3, +3,2,1,3,0,1,1,1,0,2,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0, +1,0,0,3,0,3,3,3,3,3,0,0,3,0,2,2,3,3,3,3,3,0,0,0,1,1,3,0,0,0,0,2, +0,0,1,0,0,0,0,0,0,0,2,3,0,0,0,3,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0, +2,0,3,3,3,3,0,0,2,3,0,0,3,0,3,3,2,3,3,3,3,3,0,0,3,3,3,0,0,0,3,3, +0,0,3,0,0,0,0,2,0,0,2,1,1,3,0,0,1,0,0,2,3,0,1,0,0,0,0,0,0,0,1,0, +3,3,3,3,2,3,3,3,3,3,3,3,1,2,1,3,3,2,2,1,2,2,2,3,1,1,2,0,2,1,2,1, +2,2,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0, +3,0,2,1,2,3,3,3,0,2,0,2,2,0,2,1,3,2,2,1,2,1,0,0,2,2,1,0,2,1,2,2, +0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,2,1,3,3,1,1,3,0,2,3,1,1,3,2,1,1,2,0,2,2,3,2,1,1,1,1,1,2, +3,0,0,1,3,1,2,1,2,0,3,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, +3,3,1,1,3,2,3,3,3,1,3,2,1,3,2,1,3,2,2,2,2,1,3,3,1,2,1,3,1,2,3,0, +2,1,1,3,2,2,2,1,2,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, +3,3,2,3,2,3,3,2,3,2,3,2,3,3,2,1,0,3,2,2,2,1,2,2,2,1,2,2,1,2,1,1, +2,2,2,3,0,1,3,1,1,1,1,0,1,1,0,2,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,2,3,2,2,1,1,3,2,3,2,3,2,0,3,2,2,1,2,0,2,2,2,1,2,2,2,2,1, +3,2,1,2,2,1,0,2,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,2,3,1,2,3,3,2,2,3,0,1,1,2,0,3,3,2,2,3,0,1,1,3,0,0,0,0, +3,1,0,3,3,0,2,0,2,1,0,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,2,3,2,3,3,0,1,3,1,1,2,1,2,1,1,3,1,1,0,2,3,1,1,1,1,1,1,1,1, +3,1,1,2,2,2,2,1,1,1,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,2,2,1,1,2,1,3,3,2,3,2,2,3,2,2,3,1,2,2,1,2,0,3,2,1,2,2,2,2,2,1, +3,2,1,2,2,2,1,1,1,1,0,0,1,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,1,3,3,0,2,1,0,3,2,0,0,3,1,0,1,1,0,1,0,0,0,0,0,1, +1,0,0,1,0,3,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,2,2,2,3,0,0,1,3,0,3,2,0,3,2,2,3,3,3,3,3,1,0,2,2,2,0,2,2,1,2, +0,2,3,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,0,2,3,1,3,3,2,3,3,0,3,3,0,3,2,2,3,2,3,3,3,0,0,2,2,3,0,1,1,1,3, +0,0,3,0,0,0,2,2,0,1,3,0,1,2,2,2,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1, +3,2,3,3,2,0,3,3,2,2,3,1,3,2,1,3,2,0,1,2,2,0,2,3,2,1,0,3,0,0,0,0, +3,0,0,2,3,1,3,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,3,2,2,2,1,2,0,1,3,1,1,3,1,3,0,0,2,1,1,1,1,2,1,1,1,0,2,1,0,1, +1,2,0,0,0,3,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,3,1,0,0,0,1,0, +3,3,3,3,2,2,2,2,2,1,3,1,1,1,2,0,1,1,2,1,2,1,3,2,0,0,3,1,1,1,1,1, +3,1,0,2,3,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,2,3,0,3,3,0,2,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,2,3,1,3,0,0,1,2,0,0,2,0,3,3,2,3,3,3,2,3,0,0,2,2,2,0,0,0,2,2, +0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +0,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,1,2,3,1,3,3,0,0,1,0,3,0,0,0,0,0, +0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,1,2,3,1,2,3,1,0,3,0,2,2,1,0,2,1,1,2,0,1,0,0,1,1,1,1,0,1,0,0, +1,0,0,0,0,1,1,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,2,1,0,1,1,1,3,1,2,2,2,2,2,2,1,1,1,1,0,3,1,0,1,3,1,1,1,1, +1,1,0,2,0,1,3,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1, +3,0,2,2,1,3,3,2,3,3,0,1,1,0,2,2,1,2,1,3,3,1,0,0,3,2,0,0,0,0,2,1, +0,1,0,0,0,0,1,2,0,1,1,3,1,1,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,0,3,0,0,1,0,0,0,3,0,0,3,0,3,1,0,1,1,1,3,2,0,0,0,3,0,0,0,0,2,0, +0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,1,3,2,1,3,3,1,2,2,0,1,2,1,0,1,2,0,0,0,0,0,3,0,0,0,3,0,0,0,0, +3,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,1,2,0,3,3,3,2,2,0,1,1,0,1,3,0,0,0,2,2,0,0,0,0,3,1,0,1,0,0,0, +0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,2,3,1,2,0,0,2,1,0,3,1,0,1,2,0,1,1,1,1,3,0,0,3,1,1,0,2,2,1,1, +0,2,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,3,1,2,0,0,2,2,0,1,2,0,1,0,1,3,1,2,1,0,0,0,2,0,3,0,0,0,1,0, +0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,1,1,2,2,0,0,0,2,0,2,1,0,1,1,0,1,1,1,2,1,0,0,1,1,1,0,2,1,1,1, +0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1, +0,0,0,2,0,1,3,1,1,1,1,0,0,0,0,3,2,0,1,0,0,0,1,2,0,0,0,1,0,0,0,0, +0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,2,3,2,2,0,0,0,1,0,0,0,0,2,3,2,1,2,2,3,0,0,0,2,3,1,0,0,0,1,1, +0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0, +3,3,2,2,0,1,0,0,0,0,2,0,2,0,1,0,0,0,1,1,0,0,0,2,1,0,1,0,1,1,0,0, +0,1,0,2,0,0,1,0,3,0,1,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,1,0,0,1,0,0,0,0,0,1,1,2,0,0,0,0,1,0,0,1,3,1,0,0,0,0,1,1,0,0, +0,1,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0, +3,3,1,1,1,1,2,3,0,0,2,1,1,1,1,1,0,2,1,1,0,0,0,2,1,0,1,2,1,1,0,1, +2,1,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,3,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1, +0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,2,0,0,0,0,0,0,1,2,1,0,1,1,0,2,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,2,0,0,0,1,3,0,1,0,0,0,2,0,0,0,0,0,0,0,1,2,0,0,0,0,0, +3,3,0,0,1,1,2,0,0,1,2,1,0,1,1,1,0,1,1,0,0,2,1,1,0,1,0,0,1,1,1,0, +0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,1,0,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,0,0,1,1,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,1,0,1,2,0,1,2,0,0,1,1,0,2,0,1,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,0, +1,0,0,1,0,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,2,1,3,0,0,0,0,1,1,0,0,0,0,0,0,0,3, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,1,0,1,0,0,2,0,0,2,0,0,1,1,2,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0, +1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0, +1,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,1,0,0,2,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +) + +TIS620ThaiModel = { + 'char_to_order_map': TIS620CharToOrderMap, + 'precedence_matrix': ThaiLangModel, + 'typical_positive_ratio': 0.926386, + 'keep_english_letter': False, + 'charset_name': "TIS-620", + 'language': 'Thai', +} diff --git a/venv-linux/lib/python3.6/site-packages/chardet/langturkishmodel.py b/venv-linux/lib/python3.6/site-packages/chardet/langturkishmodel.py new file mode 100644 index 0000000..a427a45 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/langturkishmodel.py @@ -0,0 +1,193 @@ +# -*- coding: utf-8 -*- +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Özgür Baskın - Turkish Language Model +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Character Mapping Table: +Latin5_TurkishCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255, 23, 37, 47, 39, 29, 52, 36, 45, 53, 60, 16, 49, 20, 46, 42, + 48, 69, 44, 35, 31, 51, 38, 62, 65, 43, 56,255,255,255,255,255, +255, 1, 21, 28, 12, 2, 18, 27, 25, 3, 24, 10, 5, 13, 4, 15, + 26, 64, 7, 8, 9, 14, 32, 57, 58, 11, 22,255,255,255,255,255, +180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165, +164,163,162,161,160,159,101,158,157,156,155,154,153,152,151,106, +150,149,148,147,146,145,144,100,143,142,141,140,139,138,137,136, + 94, 80, 93,135,105,134,133, 63,132,131,130,129,128,127,126,125, +124,104, 73, 99, 79, 85,123, 54,122, 98, 92,121,120, 91,103,119, + 68,118,117, 97,116,115, 50, 90,114,113,112,111, 55, 41, 40, 86, + 89, 70, 59, 78, 71, 82, 88, 33, 77, 66, 84, 83,110, 75, 61, 96, + 30, 67,109, 74, 87,102, 34, 95, 81,108, 76, 72, 17, 6, 19,107, +) + +TurkishLangModel = ( +3,2,3,3,3,1,3,3,3,3,3,3,3,3,2,1,1,3,3,1,3,3,0,3,3,3,3,3,0,3,1,3, +3,2,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,2,2,0,0,1,0,0,1, +3,2,2,3,3,0,3,3,3,3,3,3,3,2,3,1,0,3,3,1,3,3,0,3,3,3,3,3,0,3,0,3, +3,1,1,0,1,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,2,2,0,0,0,1,0,1, +3,3,2,3,3,0,3,3,3,3,3,3,3,2,3,1,1,3,3,0,3,3,1,2,3,3,3,3,0,3,0,3, +3,1,1,0,0,0,1,0,0,0,0,1,1,0,1,2,1,0,0,0,1,0,0,0,0,2,0,0,0,0,0,1, +3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,1,3,3,2,0,3,2,1,2,2,1,3,3,0,0,0,2, +2,2,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1, +3,3,3,2,3,3,1,2,3,3,3,3,3,3,3,1,3,2,1,0,3,2,0,1,2,3,3,2,1,0,0,2, +2,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0, +1,0,1,3,3,1,3,3,3,3,3,3,3,1,2,0,0,2,3,0,2,3,0,0,2,2,2,3,0,3,0,1, +2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,0,3,2,0,2,3,2,3,3,1,0,0,2, +3,2,0,0,1,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,2,0,0,1, +3,3,3,2,3,3,2,3,3,3,3,2,3,3,3,0,3,3,0,0,2,1,0,0,2,3,2,2,0,0,0,2, +2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,2,0,0,1, +3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,0,3,2,0,1,3,2,1,1,3,2,3,2,1,0,0,2, +2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, +3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,0,3,2,2,0,2,3,0,0,2,2,2,2,0,0,0,2, +3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,1,0,0,0, +3,3,3,3,3,3,3,2,2,2,2,3,2,3,3,0,3,3,1,1,2,2,0,0,2,2,3,2,0,0,1,3, +0,3,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1, +3,3,3,2,3,3,3,2,1,2,2,3,2,3,3,0,3,2,0,0,1,1,0,1,1,2,1,2,0,0,0,1, +0,3,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0, +3,3,3,2,3,3,2,3,2,2,2,3,3,3,3,1,3,1,1,0,3,2,1,1,3,3,2,3,1,0,0,1, +1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,0,1, +3,2,2,3,3,0,3,3,3,3,3,3,3,2,2,1,0,3,3,1,3,3,0,1,3,3,2,3,0,3,0,3, +2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, +2,2,2,3,3,0,3,3,3,3,3,3,3,3,3,0,0,3,2,0,3,3,0,3,2,3,3,3,0,3,1,3, +2,0,0,0,0,0,0,0,0,0,0,1,0,1,2,0,1,0,0,0,0,0,0,0,2,2,0,0,1,0,0,1, +3,3,3,1,2,3,3,1,0,0,1,0,0,3,3,2,3,0,0,2,0,0,2,0,2,0,0,0,2,0,2,0, +0,3,1,0,1,0,0,0,2,2,1,0,1,1,2,1,2,2,2,0,2,1,1,0,0,0,2,0,0,0,0,0, +1,2,1,3,3,0,3,3,3,3,3,2,3,0,0,0,0,2,3,0,2,3,1,0,2,3,1,3,0,3,0,2, +3,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,1,3,3,2,2,3,2,2,0,1,2,3,0,1,2,1,0,1,0,0,0,1,0,2,2,0,0,0,1, +1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0, +3,3,3,1,3,3,1,1,3,3,1,1,3,3,1,0,2,1,2,0,2,1,0,0,1,1,2,1,0,0,0,2, +2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,1,0,2,1,3,0,0,2,0,0,3,3,0,3,0,0,1,0,1,2,0,0,1,1,2,2,0,1,0, +0,1,2,1,1,0,1,0,1,1,1,1,1,0,1,1,1,2,2,1,2,0,1,0,0,0,0,0,0,1,0,0, +3,3,3,2,3,2,3,3,0,2,2,2,3,3,3,0,3,0,0,0,2,2,0,1,2,1,1,1,0,0,0,1, +0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +3,3,3,3,3,3,2,1,2,2,3,3,3,3,2,0,2,0,0,0,2,2,0,0,2,1,3,3,0,0,1,1, +1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0, +1,1,2,3,3,0,3,3,3,3,3,3,2,2,0,2,0,2,3,2,3,2,2,2,2,2,2,2,1,3,2,3, +2,0,2,1,2,2,2,2,1,1,2,2,1,2,2,1,2,0,0,2,1,1,0,2,1,0,0,1,0,0,0,1, +2,3,3,1,1,1,0,1,1,1,2,3,2,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0, +0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,2,2,2,3,2,3,2,2,1,3,3,3,0,2,1,2,0,2,1,0,0,1,1,1,1,1,0,0,1, +2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,2,0,1,0,0,0, +3,3,3,2,3,3,3,3,3,2,3,1,2,3,3,1,2,0,0,0,0,0,0,0,3,2,1,1,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, +3,3,3,2,2,3,3,2,1,1,1,1,1,3,3,0,3,1,0,0,1,1,0,0,3,1,2,1,0,0,0,0, +0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, +3,3,3,2,2,3,2,2,2,3,2,1,1,3,3,0,3,0,0,0,0,1,0,0,3,1,1,2,0,0,0,1, +1,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +1,1,1,3,3,0,3,3,3,3,3,2,2,2,1,2,0,2,1,2,2,1,1,0,1,2,2,2,2,2,2,2, +0,0,2,1,2,1,2,1,0,1,1,3,1,2,1,1,2,0,0,2,0,1,0,1,0,1,0,0,0,1,0,1, +3,3,3,1,3,3,3,0,1,1,0,2,2,3,1,0,3,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,2,0,0,2,2,1,0,0,1,0,0,3,3,1,3,0,0,1,1,0,2,0,3,0,0,0,2,0,1,1, +0,1,2,0,1,2,2,0,2,2,2,2,1,0,2,1,1,0,2,0,2,1,2,0,0,0,0,0,0,0,0,0, +3,3,3,1,3,2,3,2,0,2,2,2,1,3,2,0,2,1,2,0,1,2,0,0,1,0,2,2,0,0,0,2, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0, +3,3,3,0,3,3,1,1,2,3,1,0,3,2,3,0,3,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0, +1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,3,3,0,3,3,2,3,3,2,2,0,0,0,0,1,2,0,1,3,0,0,0,3,1,1,0,3,0,2, +2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,1,2,2,1,0,3,1,1,1,1,3,3,2,3,0,0,1,0,1,2,0,2,2,0,2,2,0,2,1, +0,2,2,1,1,1,1,0,2,1,1,0,1,1,1,1,2,1,2,1,2,0,1,0,1,0,0,0,0,0,0,0, +3,3,3,0,1,1,3,0,0,1,1,0,0,2,2,0,3,0,0,1,1,0,1,0,0,0,0,0,2,0,0,0, +0,3,1,0,1,0,1,0,2,0,0,1,0,1,0,1,1,1,2,1,1,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,0,2,0,2,0,1,1,1,0,0,3,3,0,2,0,0,1,0,0,2,1,1,0,1,0,1,0,1,0, +0,2,0,1,2,0,2,0,2,1,1,0,1,0,2,1,1,0,2,1,1,0,1,0,0,0,1,1,0,0,0,0, +3,2,3,0,1,0,0,0,0,0,0,0,0,1,2,0,1,0,0,1,0,0,1,0,0,0,0,0,2,0,0,0, +0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,2,1,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,0,0,2,3,0,0,1,0,1,0,2,3,2,3,0,0,1,3,0,2,1,0,0,0,0,2,0,1,0, +0,2,1,0,0,1,1,0,2,1,0,0,1,0,0,1,1,0,1,1,2,0,1,0,0,0,0,1,0,0,0,0, +3,2,2,0,0,1,1,0,0,0,0,0,0,3,1,1,1,0,0,0,0,0,1,0,0,0,0,0,2,0,1,0, +0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,3,3,0,2,3,2,2,1,2,2,1,1,2,0,1,3,2,2,2,0,0,2,2,0,0,0,1,2,1, +3,0,2,1,1,0,1,1,1,0,1,2,2,2,1,1,2,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0, +0,1,1,2,3,0,3,3,3,2,2,2,2,1,0,1,0,1,0,1,2,2,0,0,2,2,1,3,1,1,2,1, +0,0,1,1,2,0,1,1,0,0,1,2,0,2,1,1,2,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0, +3,3,2,0,0,3,1,0,0,0,0,0,0,3,2,1,2,0,0,1,0,0,2,0,0,0,0,0,2,0,1,0, +0,2,1,1,0,0,1,0,1,2,0,0,1,1,0,0,2,1,1,1,1,0,2,0,0,0,0,0,0,0,0,0, +3,3,2,0,0,1,0,0,0,0,1,0,0,3,3,2,2,0,0,1,0,0,2,0,1,0,0,0,2,0,1,0, +0,0,1,1,0,0,2,0,2,1,0,0,1,1,2,1,2,0,2,1,2,1,1,1,0,0,1,1,0,0,0,0, +3,3,2,0,0,2,2,0,0,0,1,1,0,2,2,1,3,1,0,1,0,1,2,0,0,0,0,0,1,0,1,0, +0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,2,0,0,0,1,0,0,1,0,0,2,3,1,2,0,0,1,0,0,2,0,0,0,1,0,2,0,2,0, +0,1,1,2,2,1,2,0,2,1,1,0,0,1,1,0,1,1,1,1,2,1,1,0,0,0,0,0,0,0,0,0, +3,3,3,0,2,1,2,1,0,0,1,1,0,3,3,1,2,0,0,1,0,0,2,0,2,0,1,1,2,0,0,0, +0,0,1,1,1,1,2,0,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0, +3,3,3,0,2,2,3,2,0,0,1,0,0,2,3,1,0,0,0,0,0,0,2,0,2,0,0,0,2,0,0,0, +0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,0,0,0,0,0,0,0,1,0,0,2,2,2,2,0,0,1,0,0,2,0,0,0,0,0,2,0,1,0, +0,0,2,1,1,0,1,0,2,1,1,0,0,1,1,2,1,0,2,0,2,0,1,0,0,0,2,0,0,0,0,0, +0,0,0,2,2,0,2,1,1,1,1,2,2,0,0,1,0,1,0,0,1,3,0,0,0,0,1,0,0,2,1,0, +0,0,1,0,1,0,0,0,0,0,2,1,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, +2,0,0,2,3,0,2,3,1,2,2,0,2,0,0,2,0,2,1,1,1,2,1,0,0,1,2,1,1,2,1,0, +1,0,2,0,1,0,1,1,0,0,2,2,1,2,1,1,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,0,2,1,2,0,0,0,1,0,0,3,2,0,1,0,0,1,0,0,2,0,0,0,1,2,1,0,1,0, +0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,2,2,0,2,2,1,1,0,1,1,1,1,1,0,0,1,2,1,1,1,0,1,0,0,0,1,1,1,1, +0,0,2,1,0,1,1,1,0,1,1,2,1,2,1,1,2,0,1,1,2,1,0,2,0,0,0,0,0,0,0,0, +3,2,2,0,0,2,0,0,0,0,0,0,0,2,2,0,2,0,0,1,0,0,2,0,0,0,0,0,2,0,0,0, +0,2,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,3,2,0,2,2,0,1,1,0,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0, +2,0,1,0,1,0,1,1,0,0,1,2,0,1,0,1,1,0,0,1,0,1,0,2,0,0,0,0,0,0,0,0, +2,2,2,0,1,1,0,0,0,1,0,0,0,1,2,0,1,0,0,1,0,0,1,0,0,0,0,1,2,0,1,0, +0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,1,0,1,1,1,0,0,0,0,1,2,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, +1,1,2,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,1, +0,0,1,2,2,0,2,1,2,1,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,0,0,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +2,2,2,0,0,0,1,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +) + +Latin5TurkishModel = { + 'char_to_order_map': Latin5_TurkishCharToOrderMap, + 'precedence_matrix': TurkishLangModel, + 'typical_positive_ratio': 0.970290, + 'keep_english_letter': True, + 'charset_name': "ISO-8859-9", + 'language': 'Turkish', +} diff --git a/venv-linux/lib/python3.6/site-packages/chardet/latin1prober.py b/venv-linux/lib/python3.6/site-packages/chardet/latin1prober.py new file mode 100644 index 0000000..7d1e8c2 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/latin1prober.py @@ -0,0 +1,145 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState + +FREQ_CAT_NUM = 4 + +UDF = 0 # undefined +OTH = 1 # other +ASC = 2 # ascii capital letter +ASS = 3 # ascii small letter +ACV = 4 # accent capital vowel +ACO = 5 # accent capital other +ASV = 6 # accent small vowel +ASO = 7 # accent small other +CLASS_NUM = 8 # total classes + +Latin1_CharToClass = ( + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F + OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47 + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57 + ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F + OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67 + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77 + ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F + OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87 + OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F + UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97 + OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF + ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7 + ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF + ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7 + ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF + ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7 + ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF + ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7 + ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF +) + +# 0 : illegal +# 1 : very unlikely +# 2 : normal +# 3 : very likely +Latin1ClassModel = ( +# UDF OTH ASC ASS ACV ACO ASV ASO + 0, 0, 0, 0, 0, 0, 0, 0, # UDF + 0, 3, 3, 3, 3, 3, 3, 3, # OTH + 0, 3, 3, 3, 3, 3, 3, 3, # ASC + 0, 3, 3, 3, 1, 1, 3, 3, # ASS + 0, 3, 3, 3, 1, 2, 1, 2, # ACV + 0, 3, 3, 3, 3, 3, 3, 3, # ACO + 0, 3, 1, 3, 1, 1, 1, 3, # ASV + 0, 3, 1, 3, 1, 1, 3, 3, # ASO +) + + +class Latin1Prober(CharSetProber): + def __init__(self): + super(Latin1Prober, self).__init__() + self._last_char_class = None + self._freq_counter = None + self.reset() + + def reset(self): + self._last_char_class = OTH + self._freq_counter = [0] * FREQ_CAT_NUM + CharSetProber.reset(self) + + @property + def charset_name(self): + return "ISO-8859-1" + + @property + def language(self): + return "" + + def feed(self, byte_str): + byte_str = self.filter_with_english_letters(byte_str) + for c in byte_str: + char_class = Latin1_CharToClass[c] + freq = Latin1ClassModel[(self._last_char_class * CLASS_NUM) + + char_class] + if freq == 0: + self._state = ProbingState.NOT_ME + break + self._freq_counter[freq] += 1 + self._last_char_class = char_class + + return self.state + + def get_confidence(self): + if self.state == ProbingState.NOT_ME: + return 0.01 + + total = sum(self._freq_counter) + if total < 0.01: + confidence = 0.0 + else: + confidence = ((self._freq_counter[3] - self._freq_counter[1] * 20.0) + / total) + if confidence < 0.0: + confidence = 0.0 + # lower the confidence of latin1 so that other more accurate + # detector can take priority. + confidence = confidence * 0.73 + return confidence diff --git a/venv-linux/lib/python3.6/site-packages/chardet/mbcharsetprober.py b/venv-linux/lib/python3.6/site-packages/chardet/mbcharsetprober.py new file mode 100644 index 0000000..6256ecf --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/mbcharsetprober.py @@ -0,0 +1,91 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Proofpoint, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState, MachineState + + +class MultiByteCharSetProber(CharSetProber): + """ + MultiByteCharSetProber + """ + + def __init__(self, lang_filter=None): + super(MultiByteCharSetProber, self).__init__(lang_filter=lang_filter) + self.distribution_analyzer = None + self.coding_sm = None + self._last_char = [0, 0] + + def reset(self): + super(MultiByteCharSetProber, self).reset() + if self.coding_sm: + self.coding_sm.reset() + if self.distribution_analyzer: + self.distribution_analyzer.reset() + self._last_char = [0, 0] + + @property + def charset_name(self): + raise NotImplementedError + + @property + def language(self): + raise NotImplementedError + + def feed(self, byte_str): + for i in range(len(byte_str)): + coding_state = self.coding_sm.next_state(byte_str[i]) + if coding_state == MachineState.ERROR: + self.logger.debug('%s %s prober hit error at byte %s', + self.charset_name, self.language, i) + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte_str[0] + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.distribution_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if (self.distribution_analyzer.got_enough_data() and + (self.get_confidence() > self.SHORTCUT_THRESHOLD)): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + return self.distribution_analyzer.get_confidence() diff --git a/venv-linux/lib/python3.6/site-packages/chardet/mbcsgroupprober.py b/venv-linux/lib/python3.6/site-packages/chardet/mbcsgroupprober.py new file mode 100644 index 0000000..530abe7 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/mbcsgroupprober.py @@ -0,0 +1,54 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Proofpoint, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetgroupprober import CharSetGroupProber +from .utf8prober import UTF8Prober +from .sjisprober import SJISProber +from .eucjpprober import EUCJPProber +from .gb2312prober import GB2312Prober +from .euckrprober import EUCKRProber +from .cp949prober import CP949Prober +from .big5prober import Big5Prober +from .euctwprober import EUCTWProber + + +class MBCSGroupProber(CharSetGroupProber): + def __init__(self, lang_filter=None): + super(MBCSGroupProber, self).__init__(lang_filter=lang_filter) + self.probers = [ + UTF8Prober(), + SJISProber(), + EUCJPProber(), + GB2312Prober(), + EUCKRProber(), + CP949Prober(), + Big5Prober(), + EUCTWProber() + ] + self.reset() diff --git a/venv-linux/lib/python3.6/site-packages/chardet/mbcssm.py b/venv-linux/lib/python3.6/site-packages/chardet/mbcssm.py new file mode 100644 index 0000000..8360d0f --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/mbcssm.py @@ -0,0 +1,572 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import MachineState + +# BIG5 + +BIG5_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as legal value + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,1, # 78 - 7f + 4,4,4,4,4,4,4,4, # 80 - 87 + 4,4,4,4,4,4,4,4, # 88 - 8f + 4,4,4,4,4,4,4,4, # 90 - 97 + 4,4,4,4,4,4,4,4, # 98 - 9f + 4,3,3,3,3,3,3,3, # a0 - a7 + 3,3,3,3,3,3,3,3, # a8 - af + 3,3,3,3,3,3,3,3, # b0 - b7 + 3,3,3,3,3,3,3,3, # b8 - bf + 3,3,3,3,3,3,3,3, # c0 - c7 + 3,3,3,3,3,3,3,3, # c8 - cf + 3,3,3,3,3,3,3,3, # d0 - d7 + 3,3,3,3,3,3,3,3, # d8 - df + 3,3,3,3,3,3,3,3, # e0 - e7 + 3,3,3,3,3,3,3,3, # e8 - ef + 3,3,3,3,3,3,3,3, # f0 - f7 + 3,3,3,3,3,3,3,0 # f8 - ff +) + +BIG5_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,#08-0f + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START#10-17 +) + +BIG5_CHAR_LEN_TABLE = (0, 1, 1, 2, 0) + +BIG5_SM_MODEL = {'class_table': BIG5_CLS, + 'class_factor': 5, + 'state_table': BIG5_ST, + 'char_len_table': BIG5_CHAR_LEN_TABLE, + 'name': 'Big5'} + +# CP949 + +CP949_CLS = ( + 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,0,0, # 00 - 0f + 1,1,1,1,1,1,1,1, 1,1,1,0,1,1,1,1, # 10 - 1f + 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 20 - 2f + 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 30 - 3f + 1,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4, # 40 - 4f + 4,4,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 50 - 5f + 1,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5, # 60 - 6f + 5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 70 - 7f + 0,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 80 - 8f + 6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 90 - 9f + 6,7,7,7,7,7,7,7, 7,7,7,7,7,8,8,8, # a0 - af + 7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7, # b0 - bf + 7,7,7,7,7,7,9,2, 2,3,2,2,2,2,2,2, # c0 - cf + 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # d0 - df + 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # e0 - ef + 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,0, # f0 - ff +) + +CP949_ST = ( +#cls= 0 1 2 3 4 5 6 7 8 9 # previous state = + MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START, 4, 5,MachineState.ERROR, 6, # MachineState.START + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, # MachineState.ERROR + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME, # MachineState.ITS_ME + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 3 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 4 + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 5 + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 6 +) + +CP949_CHAR_LEN_TABLE = (0, 1, 2, 0, 1, 1, 2, 2, 0, 2) + +CP949_SM_MODEL = {'class_table': CP949_CLS, + 'class_factor': 10, + 'state_table': CP949_ST, + 'char_len_table': CP949_CHAR_LEN_TABLE, + 'name': 'CP949'} + +# EUC-JP + +EUCJP_CLS = ( + 4,4,4,4,4,4,4,4, # 00 - 07 + 4,4,4,4,4,4,5,5, # 08 - 0f + 4,4,4,4,4,4,4,4, # 10 - 17 + 4,4,4,5,4,4,4,4, # 18 - 1f + 4,4,4,4,4,4,4,4, # 20 - 27 + 4,4,4,4,4,4,4,4, # 28 - 2f + 4,4,4,4,4,4,4,4, # 30 - 37 + 4,4,4,4,4,4,4,4, # 38 - 3f + 4,4,4,4,4,4,4,4, # 40 - 47 + 4,4,4,4,4,4,4,4, # 48 - 4f + 4,4,4,4,4,4,4,4, # 50 - 57 + 4,4,4,4,4,4,4,4, # 58 - 5f + 4,4,4,4,4,4,4,4, # 60 - 67 + 4,4,4,4,4,4,4,4, # 68 - 6f + 4,4,4,4,4,4,4,4, # 70 - 77 + 4,4,4,4,4,4,4,4, # 78 - 7f + 5,5,5,5,5,5,5,5, # 80 - 87 + 5,5,5,5,5,5,1,3, # 88 - 8f + 5,5,5,5,5,5,5,5, # 90 - 97 + 5,5,5,5,5,5,5,5, # 98 - 9f + 5,2,2,2,2,2,2,2, # a0 - a7 + 2,2,2,2,2,2,2,2, # a8 - af + 2,2,2,2,2,2,2,2, # b0 - b7 + 2,2,2,2,2,2,2,2, # b8 - bf + 2,2,2,2,2,2,2,2, # c0 - c7 + 2,2,2,2,2,2,2,2, # c8 - cf + 2,2,2,2,2,2,2,2, # d0 - d7 + 2,2,2,2,2,2,2,2, # d8 - df + 0,0,0,0,0,0,0,0, # e0 - e7 + 0,0,0,0,0,0,0,0, # e8 - ef + 0,0,0,0,0,0,0,0, # f0 - f7 + 0,0,0,0,0,0,0,5 # f8 - ff +) + +EUCJP_ST = ( + 3, 4, 3, 5,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 3,MachineState.ERROR,#18-1f + 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START#20-27 +) + +EUCJP_CHAR_LEN_TABLE = (2, 2, 2, 3, 1, 0) + +EUCJP_SM_MODEL = {'class_table': EUCJP_CLS, + 'class_factor': 6, + 'state_table': EUCJP_ST, + 'char_len_table': EUCJP_CHAR_LEN_TABLE, + 'name': 'EUC-JP'} + +# EUC-KR + +EUCKR_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 1,1,1,1,1,1,1,1, # 40 - 47 + 1,1,1,1,1,1,1,1, # 48 - 4f + 1,1,1,1,1,1,1,1, # 50 - 57 + 1,1,1,1,1,1,1,1, # 58 - 5f + 1,1,1,1,1,1,1,1, # 60 - 67 + 1,1,1,1,1,1,1,1, # 68 - 6f + 1,1,1,1,1,1,1,1, # 70 - 77 + 1,1,1,1,1,1,1,1, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,0,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,2,2,2,2,2,2,2, # a0 - a7 + 2,2,2,2,2,3,3,3, # a8 - af + 2,2,2,2,2,2,2,2, # b0 - b7 + 2,2,2,2,2,2,2,2, # b8 - bf + 2,2,2,2,2,2,2,2, # c0 - c7 + 2,3,2,2,2,2,2,2, # c8 - cf + 2,2,2,2,2,2,2,2, # d0 - d7 + 2,2,2,2,2,2,2,2, # d8 - df + 2,2,2,2,2,2,2,2, # e0 - e7 + 2,2,2,2,2,2,2,2, # e8 - ef + 2,2,2,2,2,2,2,2, # f0 - f7 + 2,2,2,2,2,2,2,0 # f8 - ff +) + +EUCKR_ST = ( + MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #08-0f +) + +EUCKR_CHAR_LEN_TABLE = (0, 1, 2, 0) + +EUCKR_SM_MODEL = {'class_table': EUCKR_CLS, + 'class_factor': 4, + 'state_table': EUCKR_ST, + 'char_len_table': EUCKR_CHAR_LEN_TABLE, + 'name': 'EUC-KR'} + +# EUC-TW + +EUCTW_CLS = ( + 2,2,2,2,2,2,2,2, # 00 - 07 + 2,2,2,2,2,2,0,0, # 08 - 0f + 2,2,2,2,2,2,2,2, # 10 - 17 + 2,2,2,0,2,2,2,2, # 18 - 1f + 2,2,2,2,2,2,2,2, # 20 - 27 + 2,2,2,2,2,2,2,2, # 28 - 2f + 2,2,2,2,2,2,2,2, # 30 - 37 + 2,2,2,2,2,2,2,2, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,2, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,6,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,3,4,4,4,4,4,4, # a0 - a7 + 5,5,1,1,1,1,1,1, # a8 - af + 1,1,1,1,1,1,1,1, # b0 - b7 + 1,1,1,1,1,1,1,1, # b8 - bf + 1,1,3,1,3,3,3,3, # c0 - c7 + 3,3,3,3,3,3,3,3, # c8 - cf + 3,3,3,3,3,3,3,3, # d0 - d7 + 3,3,3,3,3,3,3,3, # d8 - df + 3,3,3,3,3,3,3,3, # e0 - e7 + 3,3,3,3,3,3,3,3, # e8 - ef + 3,3,3,3,3,3,3,3, # f0 - f7 + 3,3,3,3,3,3,3,0 # f8 - ff +) + +EUCTW_ST = ( + MachineState.ERROR,MachineState.ERROR,MachineState.START, 3, 3, 3, 4,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.ERROR,#10-17 + MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,#20-27 + MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f +) + +EUCTW_CHAR_LEN_TABLE = (0, 0, 1, 2, 2, 2, 3) + +EUCTW_SM_MODEL = {'class_table': EUCTW_CLS, + 'class_factor': 7, + 'state_table': EUCTW_ST, + 'char_len_table': EUCTW_CHAR_LEN_TABLE, + 'name': 'x-euc-tw'} + +# GB2312 + +GB2312_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 3,3,3,3,3,3,3,3, # 30 - 37 + 3,3,1,1,1,1,1,1, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,4, # 78 - 7f + 5,6,6,6,6,6,6,6, # 80 - 87 + 6,6,6,6,6,6,6,6, # 88 - 8f + 6,6,6,6,6,6,6,6, # 90 - 97 + 6,6,6,6,6,6,6,6, # 98 - 9f + 6,6,6,6,6,6,6,6, # a0 - a7 + 6,6,6,6,6,6,6,6, # a8 - af + 6,6,6,6,6,6,6,6, # b0 - b7 + 6,6,6,6,6,6,6,6, # b8 - bf + 6,6,6,6,6,6,6,6, # c0 - c7 + 6,6,6,6,6,6,6,6, # c8 - cf + 6,6,6,6,6,6,6,6, # d0 - d7 + 6,6,6,6,6,6,6,6, # d8 - df + 6,6,6,6,6,6,6,6, # e0 - e7 + 6,6,6,6,6,6,6,6, # e8 - ef + 6,6,6,6,6,6,6,6, # f0 - f7 + 6,6,6,6,6,6,6,0 # f8 - ff +) + +GB2312_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, 3,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,#10-17 + 4,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#20-27 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f +) + +# To be accurate, the length of class 6 can be either 2 or 4. +# But it is not necessary to discriminate between the two since +# it is used for frequency analysis only, and we are validating +# each code range there as well. So it is safe to set it to be +# 2 here. +GB2312_CHAR_LEN_TABLE = (0, 1, 1, 1, 1, 1, 2) + +GB2312_SM_MODEL = {'class_table': GB2312_CLS, + 'class_factor': 7, + 'state_table': GB2312_ST, + 'char_len_table': GB2312_CHAR_LEN_TABLE, + 'name': 'GB2312'} + +# Shift_JIS + +SJIS_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,1, # 78 - 7f + 3,3,3,3,3,2,2,3, # 80 - 87 + 3,3,3,3,3,3,3,3, # 88 - 8f + 3,3,3,3,3,3,3,3, # 90 - 97 + 3,3,3,3,3,3,3,3, # 98 - 9f + #0xa0 is illegal in sjis encoding, but some pages does + #contain such byte. We need to be more error forgiven. + 2,2,2,2,2,2,2,2, # a0 - a7 + 2,2,2,2,2,2,2,2, # a8 - af + 2,2,2,2,2,2,2,2, # b0 - b7 + 2,2,2,2,2,2,2,2, # b8 - bf + 2,2,2,2,2,2,2,2, # c0 - c7 + 2,2,2,2,2,2,2,2, # c8 - cf + 2,2,2,2,2,2,2,2, # d0 - d7 + 2,2,2,2,2,2,2,2, # d8 - df + 3,3,3,3,3,3,3,3, # e0 - e7 + 3,3,3,3,3,4,4,4, # e8 - ef + 3,3,3,3,3,3,3,3, # f0 - f7 + 3,3,3,3,3,0,0,0) # f8 - ff + + +SJIS_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START #10-17 +) + +SJIS_CHAR_LEN_TABLE = (0, 1, 1, 2, 0, 0) + +SJIS_SM_MODEL = {'class_table': SJIS_CLS, + 'class_factor': 6, + 'state_table': SJIS_ST, + 'char_len_table': SJIS_CHAR_LEN_TABLE, + 'name': 'Shift_JIS'} + +# UCS2-BE + +UCS2BE_CLS = ( + 0,0,0,0,0,0,0,0, # 00 - 07 + 0,0,1,0,0,2,0,0, # 08 - 0f + 0,0,0,0,0,0,0,0, # 10 - 17 + 0,0,0,3,0,0,0,0, # 18 - 1f + 0,0,0,0,0,0,0,0, # 20 - 27 + 0,3,3,3,3,3,0,0, # 28 - 2f + 0,0,0,0,0,0,0,0, # 30 - 37 + 0,0,0,0,0,0,0,0, # 38 - 3f + 0,0,0,0,0,0,0,0, # 40 - 47 + 0,0,0,0,0,0,0,0, # 48 - 4f + 0,0,0,0,0,0,0,0, # 50 - 57 + 0,0,0,0,0,0,0,0, # 58 - 5f + 0,0,0,0,0,0,0,0, # 60 - 67 + 0,0,0,0,0,0,0,0, # 68 - 6f + 0,0,0,0,0,0,0,0, # 70 - 77 + 0,0,0,0,0,0,0,0, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,0,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,0,0,0,0,0,0,0, # a0 - a7 + 0,0,0,0,0,0,0,0, # a8 - af + 0,0,0,0,0,0,0,0, # b0 - b7 + 0,0,0,0,0,0,0,0, # b8 - bf + 0,0,0,0,0,0,0,0, # c0 - c7 + 0,0,0,0,0,0,0,0, # c8 - cf + 0,0,0,0,0,0,0,0, # d0 - d7 + 0,0,0,0,0,0,0,0, # d8 - df + 0,0,0,0,0,0,0,0, # e0 - e7 + 0,0,0,0,0,0,0,0, # e8 - ef + 0,0,0,0,0,0,0,0, # f0 - f7 + 0,0,0,0,0,0,4,5 # f8 - ff +) + +UCS2BE_ST = ( + 5, 7, 7,MachineState.ERROR, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME, 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,#10-17 + 6, 6, 6, 6, 6,MachineState.ITS_ME, 6, 6,#18-1f + 6, 6, 6, 6, 5, 7, 7,MachineState.ERROR,#20-27 + 5, 8, 6, 6,MachineState.ERROR, 6, 6, 6,#28-2f + 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #30-37 +) + +UCS2BE_CHAR_LEN_TABLE = (2, 2, 2, 0, 2, 2) + +UCS2BE_SM_MODEL = {'class_table': UCS2BE_CLS, + 'class_factor': 6, + 'state_table': UCS2BE_ST, + 'char_len_table': UCS2BE_CHAR_LEN_TABLE, + 'name': 'UTF-16BE'} + +# UCS2-LE + +UCS2LE_CLS = ( + 0,0,0,0,0,0,0,0, # 00 - 07 + 0,0,1,0,0,2,0,0, # 08 - 0f + 0,0,0,0,0,0,0,0, # 10 - 17 + 0,0,0,3,0,0,0,0, # 18 - 1f + 0,0,0,0,0,0,0,0, # 20 - 27 + 0,3,3,3,3,3,0,0, # 28 - 2f + 0,0,0,0,0,0,0,0, # 30 - 37 + 0,0,0,0,0,0,0,0, # 38 - 3f + 0,0,0,0,0,0,0,0, # 40 - 47 + 0,0,0,0,0,0,0,0, # 48 - 4f + 0,0,0,0,0,0,0,0, # 50 - 57 + 0,0,0,0,0,0,0,0, # 58 - 5f + 0,0,0,0,0,0,0,0, # 60 - 67 + 0,0,0,0,0,0,0,0, # 68 - 6f + 0,0,0,0,0,0,0,0, # 70 - 77 + 0,0,0,0,0,0,0,0, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,0,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,0,0,0,0,0,0,0, # a0 - a7 + 0,0,0,0,0,0,0,0, # a8 - af + 0,0,0,0,0,0,0,0, # b0 - b7 + 0,0,0,0,0,0,0,0, # b8 - bf + 0,0,0,0,0,0,0,0, # c0 - c7 + 0,0,0,0,0,0,0,0, # c8 - cf + 0,0,0,0,0,0,0,0, # d0 - d7 + 0,0,0,0,0,0,0,0, # d8 - df + 0,0,0,0,0,0,0,0, # e0 - e7 + 0,0,0,0,0,0,0,0, # e8 - ef + 0,0,0,0,0,0,0,0, # f0 - f7 + 0,0,0,0,0,0,4,5 # f8 - ff +) + +UCS2LE_ST = ( + 6, 6, 7, 6, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME, 5, 5, 5,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#10-17 + 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR, 6, 6,#18-1f + 7, 6, 8, 8, 5, 5, 5,MachineState.ERROR,#20-27 + 5, 5, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5,#28-2f + 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR,MachineState.START,MachineState.START #30-37 +) + +UCS2LE_CHAR_LEN_TABLE = (2, 2, 2, 2, 2, 2) + +UCS2LE_SM_MODEL = {'class_table': UCS2LE_CLS, + 'class_factor': 6, + 'state_table': UCS2LE_ST, + 'char_len_table': UCS2LE_CHAR_LEN_TABLE, + 'name': 'UTF-16LE'} + +# UTF-8 + +UTF8_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as a legal value + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 1,1,1,1,1,1,1,1, # 40 - 47 + 1,1,1,1,1,1,1,1, # 48 - 4f + 1,1,1,1,1,1,1,1, # 50 - 57 + 1,1,1,1,1,1,1,1, # 58 - 5f + 1,1,1,1,1,1,1,1, # 60 - 67 + 1,1,1,1,1,1,1,1, # 68 - 6f + 1,1,1,1,1,1,1,1, # 70 - 77 + 1,1,1,1,1,1,1,1, # 78 - 7f + 2,2,2,2,3,3,3,3, # 80 - 87 + 4,4,4,4,4,4,4,4, # 88 - 8f + 4,4,4,4,4,4,4,4, # 90 - 97 + 4,4,4,4,4,4,4,4, # 98 - 9f + 5,5,5,5,5,5,5,5, # a0 - a7 + 5,5,5,5,5,5,5,5, # a8 - af + 5,5,5,5,5,5,5,5, # b0 - b7 + 5,5,5,5,5,5,5,5, # b8 - bf + 0,0,6,6,6,6,6,6, # c0 - c7 + 6,6,6,6,6,6,6,6, # c8 - cf + 6,6,6,6,6,6,6,6, # d0 - d7 + 6,6,6,6,6,6,6,6, # d8 - df + 7,8,8,8,8,8,8,8, # e0 - e7 + 8,8,8,8,8,9,8,8, # e8 - ef + 10,11,11,11,11,11,11,11, # f0 - f7 + 12,13,13,13,14,15,0,0 # f8 - ff +) + +UTF8_ST = ( + MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12, 10,#00-07 + 9, 11, 8, 7, 6, 5, 4, 3,#08-0f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#20-27 + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#28-2f + MachineState.ERROR,MachineState.ERROR, 5, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#30-37 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#38-3f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#40-47 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#48-4f + MachineState.ERROR,MachineState.ERROR, 7, 7, 7, 7,MachineState.ERROR,MachineState.ERROR,#50-57 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#58-5f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 7, 7,MachineState.ERROR,MachineState.ERROR,#60-67 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#68-6f + MachineState.ERROR,MachineState.ERROR, 9, 9, 9, 9,MachineState.ERROR,MachineState.ERROR,#70-77 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#78-7f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 9,MachineState.ERROR,MachineState.ERROR,#80-87 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#88-8f + MachineState.ERROR,MachineState.ERROR, 12, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,#90-97 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#98-9f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12,MachineState.ERROR,MachineState.ERROR,#a0-a7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#a8-af + MachineState.ERROR,MachineState.ERROR, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b0-b7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b8-bf + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,#c0-c7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR #c8-cf +) + +UTF8_CHAR_LEN_TABLE = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6) + +UTF8_SM_MODEL = {'class_table': UTF8_CLS, + 'class_factor': 16, + 'state_table': UTF8_ST, + 'char_len_table': UTF8_CHAR_LEN_TABLE, + 'name': 'UTF-8'} diff --git a/venv-linux/lib/python3.6/site-packages/chardet/sbcharsetprober.py b/venv-linux/lib/python3.6/site-packages/chardet/sbcharsetprober.py new file mode 100644 index 0000000..0adb51d --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/sbcharsetprober.py @@ -0,0 +1,132 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import CharacterCategory, ProbingState, SequenceLikelihood + + +class SingleByteCharSetProber(CharSetProber): + SAMPLE_SIZE = 64 + SB_ENOUGH_REL_THRESHOLD = 1024 # 0.25 * SAMPLE_SIZE^2 + POSITIVE_SHORTCUT_THRESHOLD = 0.95 + NEGATIVE_SHORTCUT_THRESHOLD = 0.05 + + def __init__(self, model, reversed=False, name_prober=None): + super(SingleByteCharSetProber, self).__init__() + self._model = model + # TRUE if we need to reverse every pair in the model lookup + self._reversed = reversed + # Optional auxiliary prober for name decision + self._name_prober = name_prober + self._last_order = None + self._seq_counters = None + self._total_seqs = None + self._total_char = None + self._freq_char = None + self.reset() + + def reset(self): + super(SingleByteCharSetProber, self).reset() + # char order of last character + self._last_order = 255 + self._seq_counters = [0] * SequenceLikelihood.get_num_categories() + self._total_seqs = 0 + self._total_char = 0 + # characters that fall in our sampling range + self._freq_char = 0 + + @property + def charset_name(self): + if self._name_prober: + return self._name_prober.charset_name + else: + return self._model['charset_name'] + + @property + def language(self): + if self._name_prober: + return self._name_prober.language + else: + return self._model.get('language') + + def feed(self, byte_str): + if not self._model['keep_english_letter']: + byte_str = self.filter_international_words(byte_str) + if not byte_str: + return self.state + char_to_order_map = self._model['char_to_order_map'] + for i, c in enumerate(byte_str): + # XXX: Order is in range 1-64, so one would think we want 0-63 here, + # but that leads to 27 more test failures than before. + order = char_to_order_map[c] + # XXX: This was SYMBOL_CAT_ORDER before, with a value of 250, but + # CharacterCategory.SYMBOL is actually 253, so we use CONTROL + # to make it closer to the original intent. The only difference + # is whether or not we count digits and control characters for + # _total_char purposes. + if order < CharacterCategory.CONTROL: + self._total_char += 1 + if order < self.SAMPLE_SIZE: + self._freq_char += 1 + if self._last_order < self.SAMPLE_SIZE: + self._total_seqs += 1 + if not self._reversed: + i = (self._last_order * self.SAMPLE_SIZE) + order + model = self._model['precedence_matrix'][i] + else: # reverse the order of the letters in the lookup + i = (order * self.SAMPLE_SIZE) + self._last_order + model = self._model['precedence_matrix'][i] + self._seq_counters[model] += 1 + self._last_order = order + + charset_name = self._model['charset_name'] + if self.state == ProbingState.DETECTING: + if self._total_seqs > self.SB_ENOUGH_REL_THRESHOLD: + confidence = self.get_confidence() + if confidence > self.POSITIVE_SHORTCUT_THRESHOLD: + self.logger.debug('%s confidence = %s, we have a winner', + charset_name, confidence) + self._state = ProbingState.FOUND_IT + elif confidence < self.NEGATIVE_SHORTCUT_THRESHOLD: + self.logger.debug('%s confidence = %s, below negative ' + 'shortcut threshhold %s', charset_name, + confidence, + self.NEGATIVE_SHORTCUT_THRESHOLD) + self._state = ProbingState.NOT_ME + + return self.state + + def get_confidence(self): + r = 0.01 + if self._total_seqs > 0: + r = ((1.0 * self._seq_counters[SequenceLikelihood.POSITIVE]) / + self._total_seqs / self._model['typical_positive_ratio']) + r = r * self._freq_char / self._total_char + if r >= 1.0: + r = 0.99 + return r diff --git a/venv-linux/lib/python3.6/site-packages/chardet/sbcsgroupprober.py b/venv-linux/lib/python3.6/site-packages/chardet/sbcsgroupprober.py new file mode 100644 index 0000000..98e95dc --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/sbcsgroupprober.py @@ -0,0 +1,73 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetgroupprober import CharSetGroupProber +from .sbcharsetprober import SingleByteCharSetProber +from .langcyrillicmodel import (Win1251CyrillicModel, Koi8rModel, + Latin5CyrillicModel, MacCyrillicModel, + Ibm866Model, Ibm855Model) +from .langgreekmodel import Latin7GreekModel, Win1253GreekModel +from .langbulgarianmodel import Latin5BulgarianModel, Win1251BulgarianModel +# from .langhungarianmodel import Latin2HungarianModel, Win1250HungarianModel +from .langthaimodel import TIS620ThaiModel +from .langhebrewmodel import Win1255HebrewModel +from .hebrewprober import HebrewProber +from .langturkishmodel import Latin5TurkishModel + + +class SBCSGroupProber(CharSetGroupProber): + def __init__(self): + super(SBCSGroupProber, self).__init__() + self.probers = [ + SingleByteCharSetProber(Win1251CyrillicModel), + SingleByteCharSetProber(Koi8rModel), + SingleByteCharSetProber(Latin5CyrillicModel), + SingleByteCharSetProber(MacCyrillicModel), + SingleByteCharSetProber(Ibm866Model), + SingleByteCharSetProber(Ibm855Model), + SingleByteCharSetProber(Latin7GreekModel), + SingleByteCharSetProber(Win1253GreekModel), + SingleByteCharSetProber(Latin5BulgarianModel), + SingleByteCharSetProber(Win1251BulgarianModel), + # TODO: Restore Hungarian encodings (iso-8859-2 and windows-1250) + # after we retrain model. + # SingleByteCharSetProber(Latin2HungarianModel), + # SingleByteCharSetProber(Win1250HungarianModel), + SingleByteCharSetProber(TIS620ThaiModel), + SingleByteCharSetProber(Latin5TurkishModel), + ] + hebrew_prober = HebrewProber() + logical_hebrew_prober = SingleByteCharSetProber(Win1255HebrewModel, + False, hebrew_prober) + visual_hebrew_prober = SingleByteCharSetProber(Win1255HebrewModel, True, + hebrew_prober) + hebrew_prober.set_model_probers(logical_hebrew_prober, visual_hebrew_prober) + self.probers.extend([hebrew_prober, logical_hebrew_prober, + visual_hebrew_prober]) + + self.reset() diff --git a/venv-linux/lib/python3.6/site-packages/chardet/sjisprober.py b/venv-linux/lib/python3.6/site-packages/chardet/sjisprober.py new file mode 100644 index 0000000..9e29623 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/sjisprober.py @@ -0,0 +1,92 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import SJISDistributionAnalysis +from .jpcntx import SJISContextAnalysis +from .mbcssm import SJIS_SM_MODEL +from .enums import ProbingState, MachineState + + +class SJISProber(MultiByteCharSetProber): + def __init__(self): + super(SJISProber, self).__init__() + self.coding_sm = CodingStateMachine(SJIS_SM_MODEL) + self.distribution_analyzer = SJISDistributionAnalysis() + self.context_analyzer = SJISContextAnalysis() + self.reset() + + def reset(self): + super(SJISProber, self).reset() + self.context_analyzer.reset() + + @property + def charset_name(self): + return self.context_analyzer.charset_name + + @property + def language(self): + return "Japanese" + + def feed(self, byte_str): + for i in range(len(byte_str)): + coding_state = self.coding_sm.next_state(byte_str[i]) + if coding_state == MachineState.ERROR: + self.logger.debug('%s %s prober hit error at byte %s', + self.charset_name, self.language, i) + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte_str[0] + self.context_analyzer.feed(self._last_char[2 - char_len:], + char_len) + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.context_analyzer.feed(byte_str[i + 1 - char_len:i + 3 + - char_len], char_len) + self.distribution_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if (self.context_analyzer.got_enough_data() and + (self.get_confidence() > self.SHORTCUT_THRESHOLD)): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + context_conf = self.context_analyzer.get_confidence() + distrib_conf = self.distribution_analyzer.get_confidence() + return max(context_conf, distrib_conf) diff --git a/venv-linux/lib/python3.6/site-packages/chardet/universaldetector.py b/venv-linux/lib/python3.6/site-packages/chardet/universaldetector.py new file mode 100644 index 0000000..7b4e92d --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/universaldetector.py @@ -0,0 +1,286 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### +""" +Module containing the UniversalDetector detector class, which is the primary +class a user of ``chardet`` should use. + +:author: Mark Pilgrim (initial port to Python) +:author: Shy Shalom (original C code) +:author: Dan Blanchard (major refactoring for 3.0) +:author: Ian Cordasco +""" + + +import codecs +import logging +import re + +from .charsetgroupprober import CharSetGroupProber +from .enums import InputState, LanguageFilter, ProbingState +from .escprober import EscCharSetProber +from .latin1prober import Latin1Prober +from .mbcsgroupprober import MBCSGroupProber +from .sbcsgroupprober import SBCSGroupProber + + +class UniversalDetector(object): + """ + The ``UniversalDetector`` class underlies the ``chardet.detect`` function + and coordinates all of the different charset probers. + + To get a ``dict`` containing an encoding and its confidence, you can simply + run: + + .. code:: + + u = UniversalDetector() + u.feed(some_bytes) + u.close() + detected = u.result + + """ + + MINIMUM_THRESHOLD = 0.20 + HIGH_BYTE_DETECTOR = re.compile(b'[\x80-\xFF]') + ESC_DETECTOR = re.compile(b'(\033|~{)') + WIN_BYTE_DETECTOR = re.compile(b'[\x80-\x9F]') + ISO_WIN_MAP = {'iso-8859-1': 'Windows-1252', + 'iso-8859-2': 'Windows-1250', + 'iso-8859-5': 'Windows-1251', + 'iso-8859-6': 'Windows-1256', + 'iso-8859-7': 'Windows-1253', + 'iso-8859-8': 'Windows-1255', + 'iso-8859-9': 'Windows-1254', + 'iso-8859-13': 'Windows-1257'} + + def __init__(self, lang_filter=LanguageFilter.ALL): + self._esc_charset_prober = None + self._charset_probers = [] + self.result = None + self.done = None + self._got_data = None + self._input_state = None + self._last_char = None + self.lang_filter = lang_filter + self.logger = logging.getLogger(__name__) + self._has_win_bytes = None + self.reset() + + def reset(self): + """ + Reset the UniversalDetector and all of its probers back to their + initial states. This is called by ``__init__``, so you only need to + call this directly in between analyses of different documents. + """ + self.result = {'encoding': None, 'confidence': 0.0, 'language': None} + self.done = False + self._got_data = False + self._has_win_bytes = False + self._input_state = InputState.PURE_ASCII + self._last_char = b'' + if self._esc_charset_prober: + self._esc_charset_prober.reset() + for prober in self._charset_probers: + prober.reset() + + def feed(self, byte_str): + """ + Takes a chunk of a document and feeds it through all of the relevant + charset probers. + + After calling ``feed``, you can check the value of the ``done`` + attribute to see if you need to continue feeding the + ``UniversalDetector`` more data, or if it has made a prediction + (in the ``result`` attribute). + + .. note:: + You should always call ``close`` when you're done feeding in your + document if ``done`` is not already ``True``. + """ + if self.done: + return + + if not len(byte_str): + return + + if not isinstance(byte_str, bytearray): + byte_str = bytearray(byte_str) + + # First check for known BOMs, since these are guaranteed to be correct + if not self._got_data: + # If the data starts with BOM, we know it is UTF + if byte_str.startswith(codecs.BOM_UTF8): + # EF BB BF UTF-8 with BOM + self.result = {'encoding': "UTF-8-SIG", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith((codecs.BOM_UTF32_LE, + codecs.BOM_UTF32_BE)): + # FF FE 00 00 UTF-32, little-endian BOM + # 00 00 FE FF UTF-32, big-endian BOM + self.result = {'encoding': "UTF-32", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith(b'\xFE\xFF\x00\x00'): + # FE FF 00 00 UCS-4, unusual octet order BOM (3412) + self.result = {'encoding': "X-ISO-10646-UCS-4-3412", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith(b'\x00\x00\xFF\xFE'): + # 00 00 FF FE UCS-4, unusual octet order BOM (2143) + self.result = {'encoding': "X-ISO-10646-UCS-4-2143", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith((codecs.BOM_LE, codecs.BOM_BE)): + # FF FE UTF-16, little endian BOM + # FE FF UTF-16, big endian BOM + self.result = {'encoding': "UTF-16", + 'confidence': 1.0, + 'language': ''} + + self._got_data = True + if self.result['encoding'] is not None: + self.done = True + return + + # If none of those matched and we've only see ASCII so far, check + # for high bytes and escape sequences + if self._input_state == InputState.PURE_ASCII: + if self.HIGH_BYTE_DETECTOR.search(byte_str): + self._input_state = InputState.HIGH_BYTE + elif self._input_state == InputState.PURE_ASCII and \ + self.ESC_DETECTOR.search(self._last_char + byte_str): + self._input_state = InputState.ESC_ASCII + + self._last_char = byte_str[-1:] + + # If we've seen escape sequences, use the EscCharSetProber, which + # uses a simple state machine to check for known escape sequences in + # HZ and ISO-2022 encodings, since those are the only encodings that + # use such sequences. + if self._input_state == InputState.ESC_ASCII: + if not self._esc_charset_prober: + self._esc_charset_prober = EscCharSetProber(self.lang_filter) + if self._esc_charset_prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = {'encoding': + self._esc_charset_prober.charset_name, + 'confidence': + self._esc_charset_prober.get_confidence(), + 'language': + self._esc_charset_prober.language} + self.done = True + # If we've seen high bytes (i.e., those with values greater than 127), + # we need to do more complicated checks using all our multi-byte and + # single-byte probers that are left. The single-byte probers + # use character bigram distributions to determine the encoding, whereas + # the multi-byte probers use a combination of character unigram and + # bigram distributions. + elif self._input_state == InputState.HIGH_BYTE: + if not self._charset_probers: + self._charset_probers = [MBCSGroupProber(self.lang_filter)] + # If we're checking non-CJK encodings, use single-byte prober + if self.lang_filter & LanguageFilter.NON_CJK: + self._charset_probers.append(SBCSGroupProber()) + self._charset_probers.append(Latin1Prober()) + for prober in self._charset_probers: + if prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = {'encoding': prober.charset_name, + 'confidence': prober.get_confidence(), + 'language': prober.language} + self.done = True + break + if self.WIN_BYTE_DETECTOR.search(byte_str): + self._has_win_bytes = True + + def close(self): + """ + Stop analyzing the current document and come up with a final + prediction. + + :returns: The ``result`` attribute, a ``dict`` with the keys + `encoding`, `confidence`, and `language`. + """ + # Don't bother with checks if we're already done + if self.done: + return self.result + self.done = True + + if not self._got_data: + self.logger.debug('no data received!') + + # Default to ASCII if it is all we've seen so far + elif self._input_state == InputState.PURE_ASCII: + self.result = {'encoding': 'ascii', + 'confidence': 1.0, + 'language': ''} + + # If we have seen non-ASCII, return the best that met MINIMUM_THRESHOLD + elif self._input_state == InputState.HIGH_BYTE: + prober_confidence = None + max_prober_confidence = 0.0 + max_prober = None + for prober in self._charset_probers: + if not prober: + continue + prober_confidence = prober.get_confidence() + if prober_confidence > max_prober_confidence: + max_prober_confidence = prober_confidence + max_prober = prober + if max_prober and (max_prober_confidence > self.MINIMUM_THRESHOLD): + charset_name = max_prober.charset_name + lower_charset_name = max_prober.charset_name.lower() + confidence = max_prober.get_confidence() + # Use Windows encoding name instead of ISO-8859 if we saw any + # extra Windows-specific bytes + if lower_charset_name.startswith('iso-8859'): + if self._has_win_bytes: + charset_name = self.ISO_WIN_MAP.get(lower_charset_name, + charset_name) + self.result = {'encoding': charset_name, + 'confidence': confidence, + 'language': max_prober.language} + + # Log all prober confidences if none met MINIMUM_THRESHOLD + if self.logger.getEffectiveLevel() == logging.DEBUG: + if self.result['encoding'] is None: + self.logger.debug('no probers hit minimum threshold') + for group_prober in self._charset_probers: + if not group_prober: + continue + if isinstance(group_prober, CharSetGroupProber): + for prober in group_prober.probers: + self.logger.debug('%s %s confidence = %s', + prober.charset_name, + prober.language, + prober.get_confidence()) + else: + self.logger.debug('%s %s confidence = %s', + prober.charset_name, + prober.language, + prober.get_confidence()) + return self.result diff --git a/venv-linux/lib/python3.6/site-packages/chardet/utf8prober.py b/venv-linux/lib/python3.6/site-packages/chardet/utf8prober.py new file mode 100644 index 0000000..6c3196c --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/utf8prober.py @@ -0,0 +1,82 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState, MachineState +from .codingstatemachine import CodingStateMachine +from .mbcssm import UTF8_SM_MODEL + + + +class UTF8Prober(CharSetProber): + ONE_CHAR_PROB = 0.5 + + def __init__(self): + super(UTF8Prober, self).__init__() + self.coding_sm = CodingStateMachine(UTF8_SM_MODEL) + self._num_mb_chars = None + self.reset() + + def reset(self): + super(UTF8Prober, self).reset() + self.coding_sm.reset() + self._num_mb_chars = 0 + + @property + def charset_name(self): + return "utf-8" + + @property + def language(self): + return "" + + def feed(self, byte_str): + for c in byte_str: + coding_state = self.coding_sm.next_state(c) + if coding_state == MachineState.ERROR: + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + if self.coding_sm.get_current_charlen() >= 2: + self._num_mb_chars += 1 + + if self.state == ProbingState.DETECTING: + if self.get_confidence() > self.SHORTCUT_THRESHOLD: + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + unlike = 0.99 + if self._num_mb_chars < 6: + unlike *= self.ONE_CHAR_PROB ** self._num_mb_chars + return 1.0 - unlike + else: + return unlike diff --git a/venv-linux/lib/python3.6/site-packages/chardet/version.py b/venv-linux/lib/python3.6/site-packages/chardet/version.py new file mode 100644 index 0000000..bb2a34a --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/chardet/version.py @@ -0,0 +1,9 @@ +""" +This module exists only to simplify retrieving the version number of chardet +from within setup.py and from chardet subpackages. + +:author: Dan Blanchard (dan.blanchard@gmail.com) +""" + +__version__ = "3.0.4" +VERSION = __version__.split('.') diff --git a/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/INSTALLER b/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/METADATA b/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/METADATA new file mode 100644 index 0000000..6ec366b --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/METADATA @@ -0,0 +1,16 @@ +Metadata-Version: 2.1 +Name: discord +Version: 1.0.1 +Summary: A mirror package for discord.py. Please install that instead. +Home-page: https://github.com/Rapptz/discord.py +Author: Rapptz +License: UNKNOWN +Platform: UNKNOWN +Description-Content-Type: text/markdown +Requires-Dist: discord.py (>=1.0.1) + +### This is a mirror package! + +It is recommended to install `discord.py` instead. + + diff --git a/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/RECORD b/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/RECORD new file mode 100644 index 0000000..f1242ce --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/RECORD @@ -0,0 +1,5 @@ +discord-1.0.1.dist-info/METADATA,sha256=ltDh9YLNROUEeIzhrNNveNBj_xRkM9YfqjeZTg7lSUw,381 +discord-1.0.1.dist-info/WHEEL,sha256=qB97nP5e4MrOsXW5bIU5cUn_KSVr10EV0l-GCHG9qNs,97 +discord-1.0.1.dist-info/top_level.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 +discord-1.0.1.dist-info/RECORD,, +discord-1.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 diff --git a/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/WHEEL b/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/WHEEL new file mode 100644 index 0000000..00dddfa --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/top_level.txt b/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/top_level.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/discord-1.0.1.dist-info/top_level.txt @@ -0,0 +1 @@ + diff --git a/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/INSTALLER b/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/LICENSE b/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/LICENSE new file mode 100644 index 0000000..eb8cdf6 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2020 Rapptz + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/METADATA b/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/METADATA new file mode 100644 index 0000000..06cf303 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/METADATA @@ -0,0 +1,149 @@ +Metadata-Version: 2.1 +Name: discord.py +Version: 1.5.1 +Summary: A Python wrapper for the Discord API +Home-page: https://github.com/Rapptz/discord.py +Author: Rapptz +License: MIT +Project-URL: Documentation, https://discordpy.readthedocs.io/en/latest/ +Project-URL: Issue tracker, https://github.com/Rapptz/discord.py/issues +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: License :: OSI Approved :: MIT License +Classifier: Intended Audience :: Developers +Classifier: Natural Language :: English +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Topic :: Internet +Classifier: Topic :: Software Development :: Libraries +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Utilities +Requires-Python: >=3.5.3 +Description-Content-Type: text/x-rst +Requires-Dist: aiohttp (<3.7.0,>=3.6.0) +Provides-Extra: docs +Requires-Dist: sphinx (==1.8.5) ; extra == 'docs' +Requires-Dist: sphinxcontrib-trio (==1.1.1) ; extra == 'docs' +Requires-Dist: sphinxcontrib-websupport ; extra == 'docs' +Provides-Extra: voice +Requires-Dist: PyNaCl (==1.3.0) ; extra == 'voice' + +discord.py +========== + +.. image:: https://discord.com/api/guilds/336642139381301249/embed.png + :target: https://discord.gg/r3sSKJJ + :alt: Discord server invite +.. image:: https://img.shields.io/pypi/v/discord.py.svg + :target: https://pypi.python.org/pypi/discord.py + :alt: PyPI version info +.. image:: https://img.shields.io/pypi/pyversions/discord.py.svg + :target: https://pypi.python.org/pypi/discord.py + :alt: PyPI supported Python versions + +A modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python. + +Key Features +------------- + +- Modern Pythonic API using ``async`` and ``await``. +- Proper rate limit handling. +- 100% coverage of the supported Discord API. +- Optimised in both speed and memory. + +Installing +---------- + +**Python 3.5.3 or higher is required** + +To install the library without full voice support, you can just run the following command: + +.. code:: sh + + # Linux/macOS + python3 -m pip install -U discord.py + + # Windows + py -3 -m pip install -U discord.py + +Otherwise to get voice support you should run the following command: + +.. code:: sh + + # Linux/macOS + python3 -m pip install -U "discord.py[voice]" + + # Windows + py -3 -m pip install -U discord.py[voice] + + +To install the development version, do the following: + +.. code:: sh + + $ git clone https://github.com/Rapptz/discord.py + $ cd discord.py + $ python3 -m pip install -U .[voice] + + +Optional Packages +~~~~~~~~~~~~~~~~~~ + +* PyNaCl (for voice support) + +Please note that on Linux installing voice you must install the following packages via your favourite package manager (e.g. ``apt``, ``dnf``, etc) before running the above commands: + +* libffi-dev (or ``libffi-devel`` on some systems) +* python-dev (e.g. ``python3.6-dev`` for Python 3.6) + +Quick Example +-------------- + +.. code:: py + + import discord + + class MyClient(discord.Client): + async def on_ready(self): + print('Logged on as', self.user) + + async def on_message(self, message): + # don't respond to ourselves + if message.author == self.user: + return + + if message.content == 'ping': + await message.channel.send('pong') + + client = MyClient() + client.run('token') + +Bot Example +~~~~~~~~~~~~~ + +.. code:: py + + import discord + from discord.ext import commands + + bot = commands.Bot(command_prefix='>') + + @bot.command() + async def ping(ctx): + await ctx.send('pong') + + bot.run('token') + +You can find more examples in the examples directory. + +Links +------ + +- `Documentation `_ +- `Official Discord Server `_ +- `Discord API `_ + + diff --git a/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/RECORD b/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/RECORD new file mode 100644 index 0000000..8a63265 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/RECORD @@ -0,0 +1,129 @@ +discord/__init__.py,sha256=ABJSvJRE7YCB3XxAKbe9ew9HDVRX9uhmgC3H-kblWdU,2087 +discord/__main__.py,sha256=ooH8tfr48ciak8V3_Qn1N7EnmfYTKFidnOWJuHyzpg0,9885 +discord/abc.py,sha256=s7XY6D_Roi4bxKKuH3wW6Ce40aAw-TVe2M2664DCE4c,40045 +discord/activity.py,sha256=TCN4SzmNY4f8huwpsy_3lg2H3CN1N2MbUVP8oINyBvs,23444 +discord/appinfo.py,sha256=pSljy54mIZa9rkyYfh0vsuKtSb_26ay-PQGgPMZatUo,5229 +discord/asset.py,sha256=pMBqi5tHhH5ycmky1saYHUv8IQjXmyASEjguOZMf6dw,7595 +discord/audit_logs.py,sha256=lbfBxRYTNY7XHf22HnDtH-aBIi8WDTmRtsYIZsFaorY,13403 +discord/backoff.py,sha256=btxvujy2vUATg9C0odcSVSjsbV6JNQXUlV0dGqG8jg4,3166 +discord/calls.py,sha256=voiZw0sLyJUraBoSs7dtsQRsq7Xj2Z6yO4YBie3_P4U,5292 +discord/channel.py,sha256=uHD539DVQRGbqL5J9Hrc5onlBWiEIInHJyrx8KwrmbU,42352 +discord/client.py,sha256=NZPBQz4rZWgyGe5HDQoV56SJ1IN6u12thMbITcdno7I,49704 +discord/colour.py,sha256=SdxhhACprJEAeDVnui0qI6rnmjkQg7pL2_fN3-pHy7M,7493 +discord/context_managers.py,sha256=Yz9XznhY6A9KHstnDMoff53o9BMpqelTZpcHgn-NO90,2281 +discord/embeds.py,sha256=Q9DStAV3Q7ezrA_G4vFfWBLTwnEUwyMxnGKYc_ls_7M,17385 +discord/emoji.py,sha256=Yi40p7DS9rDDedSmgBypehH5hct3MksByTLEnv4p_T0,7103 +discord/enums.py,sha256=qJeEhhacTISVtsSoDI6-BCmUXm7j3KerVeW_rr_93-s,13334 +discord/errors.py,sha256=Z3Ld7JIAWL0jqNZCkNcmY0QpWTjBP8O6jpdFm-tGK9E,6981 +discord/file.py,sha256=VQobigUOo4DjVfi8F9XeFipYXhLgpO4HuiRvJIZtWyg,3977 +discord/flags.py,sha256=7V5NCWj5U-HXcTBRb-N3xul8gLc2Fbtu_U22lqbpLmE,30196 +discord/gateway.py,sha256=6Hfi4JqBevHomrs19TIWkPRacn62t_4a1xRxxviXsFs,31269 +discord/guild.py,sha256=N4cUTAJbknkIqdsIe2g6Jq_9OS3Du4gabLyUQvI6OC0,74021 +discord/http.py,sha256=UwWAlp8Mr5_yfN9z4axpIJ4YZd0qI4E5fNxBxnp0fVw,37399 +discord/integrations.py,sha256=e6fW4O9nbP1r0DX-jqd-Qk3ElMg5fGAS18JeWHCCTss,7146 +discord/invite.py,sha256=V2LAMA_TAdL1D-0rhnTg5FZHkPtwu87J7dj1PGxH6kk,14459 +discord/iterators.py,sha256=9IFyw7j6VOvdutDzg6-DXqOA4fpbQ-lbwrPEgbOHnMU,22259 +discord/member.py,sha256=bnxmtrR7Lh-CDMws_X5ic4zQVvFpV_8Kmh-GUQLf2gA,24519 +discord/mentions.py,sha256=oN4D0YFDtKm6LDdbE0ubz-nWZ7HeUfAE-204OowcfkM,4413 +discord/message.py,sha256=ELu6x3hmTZJCH10OlXUyplAhR2UYxb8trhaRVnlAb8Q,40723 +discord/mixins.py,sha256=OLAVyfyr9kc01MJaCqfNFm5O3acEH0Be6mUlUt2OvEQ,1505 +discord/object.py,sha256=mSKJA8fsp-PZekk7JXpc85BLYGfWsFP8bFsy3FhNthU,2664 +discord/oggparse.py,sha256=RwlVDlzsXhWZcwEhUblH3bcrHqYk4olzPO1qMdJX9rI,3136 +discord/opus.py,sha256=MzSDKi2kIwPSQAlWtADmNaNIkEIXcXVHkHBPdpueH8Q,8545 +discord/partial_emoji.py,sha256=kN109imyTbdmg2QV05gKllXRIj_OI7c-3PlRhrabNfw,4500 +discord/permissions.py,sha256=vzAuYjmkBPsd1k5aHI1vZZhozvhxzwXFIbVUTfUFbxE,18279 +discord/player.py,sha256=zGaB3VqNbMH9Aho0DTUL2gY9MfAri5TnNa22R53QEL4,22943 +discord/raw_models.py,sha256=NVvTLE-gN6wGsIF4aBkeqIMMzPEZBb_RUWER8O_K98E,7224 +discord/reaction.py,sha256=OxGDN9RYq5f3Bc2SgsSxAgpWqtxpcSJ-SSctLsVeNWY,6395 +discord/relationship.py,sha256=oQSHFWcAKyYQ2jzIkQrKLvGddJ-sBCkYBbJsOkMblcg,2431 +discord/role.py,sha256=USTMNkqU2MHisTgpj-mqXzZMQpPfYBEhvnzvEljtfiY,9564 +discord/shard.py,sha256=pxvM33JIoBhd8sTuBBtAQDQjqLRmP5SXGYIZgzctpbk,18546 +discord/state.py,sha256=Kz9EtbjTfcLfEPCi7R5EuReThzJnvZczVuVoPphj_Ms,47215 +discord/team.py,sha256=XJ34MJv6xAQfkrSxwj3VcAconzfpsdiCmwueabCJC3k,4211 +discord/template.py,sha256=2oDgjxW8KFL284wBb965dPjoJexOImfK-OER4P1UxTQ,5283 +discord/user.py,sha256=rJIPDkx9BGA_p3DhJBM9QhF7vTDe2n_pSzaogFGaOA8,28471 +discord/utils.py,sha256=3eH9eWeSYbsYlt1cxji057rO3owF_Wc_DbZlASOyEzE,17053 +discord/voice_client.py,sha256=Ur9FXYmHXzprtG3YTS5N3M6C77PtJUxPgXqPCPCaQiM,22645 +discord/webhook.py,sha256=x1rzouxSSx4ZtOCgNxtijsUrbRZIDYkdozqAnPZnrY0,30723 +discord/widget.py,sha256=IrTEVGATg7K0bNItnzqAWgVIBT0LW9PAENxM2nXM2gc,8619 +discord/bin/libopus-0.x64.dll,sha256=zqIypk0pRCwXafYPCDVbDJsWPjNb-Emf8I2YbWsN790,423142 +discord/bin/libopus-0.x86.dll,sha256=3T1ErXk2NKZC13CzwfovFOmdSXtkwpoVRL3j8FykAlM,380885 +discord/ext/commands/__init__.py,sha256=flll4nfZB_6_lrET8U35knwWrA-EMgYMnJigW_vzX4M,449 +discord/ext/commands/_types.py,sha256=kPsr-QZLMDmGERmAHGsz4qWZbmF7FSZB3AQzNRuYMJw,1287 +discord/ext/commands/bot.py,sha256=XIg6lOh5EGWLvxpVfdOz3CqFYCdBeNpkfVu-rcW5-IM,34733 +discord/ext/commands/cog.py,sha256=fROZe24-JyI4HAykpaNDuI1HhID6Qs65Ma_J1TuV7Kg,15201 +discord/ext/commands/context.py,sha256=NBTgALx1YtmzeOisCe-i158wQ6B7Xi9pdmBoDNs2r5o,11585 +discord/ext/commands/converter.py,sha256=gbhY31mjU6-4Q1DbrBqANRLHov2Lg39ThC4g-CEAfBM,22312 +discord/ext/commands/cooldowns.py,sha256=lr68n6_XrEYcFrJ6c7v7dQO3LQbvgMzy9wbCReX-Ar0,9219 +discord/ext/commands/core.py,sha256=tlaMcFYZfSRMtLX80EXPMyGlvn8X3X-q-EX3i_JJ0RA,69442 +discord/ext/commands/errors.py,sha256=uZoCwUQ1_A7cEFtZgMn5mX8xJvVCmBZlWBI8TEbJiCY,24839 +discord/ext/commands/help.py,sha256=CyYa1a7PQJQn_ztgvmAz52J9edI9EGY5hi06FxJxwCY,47717 +discord/ext/commands/view.py,sha256=v8Cr1UqULWKeb5NgFQVpDj6M_Atn4yrW0pD2oCuVMDU,5996 +discord/ext/tasks/__init__.py,sha256=PxHRluZL9cO7SoOraWkHZjzl9pQlH8tq2g2Vvgv-rAM,16485 +discord.py-1.5.1.dist-info/LICENSE,sha256=d2k2mW1m6rbORuTheZyYRXXbkg1lWLfG7jHUdI3YLGI,1078 +discord.py-1.5.1.dist-info/METADATA,sha256=5H1sV440_k4Tyr9FsXDH_mpy-hCExJQS0Hm5DAFzqQE,4092 +discord.py-1.5.1.dist-info/WHEEL,sha256=v8slff5hmCpvciQ3G55d2d1CnOBupjDFJHDE2dUb1Ao,97 +discord.py-1.5.1.dist-info/authors.sh,sha256=voAGwpshKMpc51nQU3Zst1sKCUJvtjhjZCo6MKAp9kU,203 +discord.py-1.5.1.dist-info/top_level.txt,sha256=fJkrNbR-_8ubMBUcDEJBcfkpECrvSEmMrNKgvLlQFoM,8 +discord.py-1.5.1.dist-info/RECORD,, +discord.py-1.5.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +discord/__pycache__/message.cpython-36.pyc,, +discord/__pycache__/context_managers.cpython-36.pyc,, +discord/__pycache__/__main__.cpython-36.pyc,, +discord/__pycache__/appinfo.cpython-36.pyc,, +discord/__pycache__/relationship.cpython-36.pyc,, +discord/__pycache__/enums.cpython-36.pyc,, +discord/__pycache__/channel.cpython-36.pyc,, +discord/__pycache__/asset.cpython-36.pyc,, +discord/__pycache__/member.cpython-36.pyc,, +discord/__pycache__/state.cpython-36.pyc,, +discord/__pycache__/webhook.cpython-36.pyc,, +discord/__pycache__/widget.cpython-36.pyc,, +discord/__pycache__/reaction.cpython-36.pyc,, +discord/__pycache__/role.cpython-36.pyc,, +discord/__pycache__/audit_logs.cpython-36.pyc,, +discord/__pycache__/shard.cpython-36.pyc,, +discord/__pycache__/__init__.cpython-36.pyc,, +discord/__pycache__/mixins.cpython-36.pyc,, +discord/__pycache__/object.cpython-36.pyc,, +discord/__pycache__/http.cpython-36.pyc,, +discord/__pycache__/embeds.cpython-36.pyc,, +discord/__pycache__/colour.cpython-36.pyc,, +discord/__pycache__/voice_client.cpython-36.pyc,, +discord/__pycache__/guild.cpython-36.pyc,, +discord/__pycache__/emoji.cpython-36.pyc,, +discord/__pycache__/gateway.cpython-36.pyc,, +discord/__pycache__/iterators.cpython-36.pyc,, +discord/__pycache__/permissions.cpython-36.pyc,, +discord/__pycache__/backoff.cpython-36.pyc,, +discord/__pycache__/player.cpython-36.pyc,, +discord/__pycache__/template.cpython-36.pyc,, +discord/__pycache__/partial_emoji.cpython-36.pyc,, +discord/__pycache__/team.cpython-36.pyc,, +discord/__pycache__/calls.cpython-36.pyc,, +discord/__pycache__/utils.cpython-36.pyc,, +discord/__pycache__/opus.cpython-36.pyc,, +discord/__pycache__/integrations.cpython-36.pyc,, +discord/__pycache__/user.cpython-36.pyc,, +discord/__pycache__/flags.cpython-36.pyc,, +discord/__pycache__/file.cpython-36.pyc,, +discord/__pycache__/client.cpython-36.pyc,, +discord/__pycache__/oggparse.cpython-36.pyc,, +discord/__pycache__/invite.cpython-36.pyc,, +discord/__pycache__/raw_models.cpython-36.pyc,, +discord/__pycache__/errors.cpython-36.pyc,, +discord/__pycache__/mentions.cpython-36.pyc,, +discord/__pycache__/activity.cpython-36.pyc,, +discord/__pycache__/abc.cpython-36.pyc,, +discord/ext/tasks/__pycache__/__init__.cpython-36.pyc,, +discord/ext/commands/__pycache__/__init__.cpython-36.pyc,, +discord/ext/commands/__pycache__/cooldowns.cpython-36.pyc,, +discord/ext/commands/__pycache__/converter.cpython-36.pyc,, +discord/ext/commands/__pycache__/bot.cpython-36.pyc,, +discord/ext/commands/__pycache__/context.cpython-36.pyc,, +discord/ext/commands/__pycache__/help.cpython-36.pyc,, +discord/ext/commands/__pycache__/core.cpython-36.pyc,, +discord/ext/commands/__pycache__/cog.cpython-36.pyc,, +discord/ext/commands/__pycache__/errors.cpython-36.pyc,, +discord/ext/commands/__pycache__/view.cpython-36.pyc,, +discord/ext/commands/__pycache__/_types.cpython-36.pyc,, diff --git a/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/WHEEL b/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/WHEEL new file mode 100644 index 0000000..d4fe38c --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.6) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/authors.sh b/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/authors.sh new file mode 100644 index 0000000..e27c182 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/authors.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# save as i.e.: git-authors and set the executable flag +git ls-tree -r -z --name-only HEAD -- $1 | xargs -0 -n1 git blame -w \ + --line-porcelain HEAD |grep "^author "|sort|uniq -c|sort -nr diff --git a/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/top_level.txt b/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/top_level.txt new file mode 100644 index 0000000..e46fba2 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/discord.py-1.5.1.dist-info/top_level.txt @@ -0,0 +1 @@ +discord diff --git a/venv-linux/lib/python3.6/site-packages/discord/__init__.py b/venv-linux/lib/python3.6/site-packages/discord/__init__.py new file mode 100644 index 0000000..44a8bbf --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/discord/__init__.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- + +""" +Discord API Wrapper +~~~~~~~~~~~~~~~~~~~ + +A basic wrapper for the Discord API. + +:copyright: (c) 2015-2020 Rapptz +:license: MIT, see LICENSE for more details. + +""" + +__title__ = 'discord' +__author__ = 'Rapptz' +__license__ = 'MIT' +__copyright__ = 'Copyright 2015-2020 Rapptz' +__version__ = '1.5.1' + +__path__ = __import__('pkgutil').extend_path(__path__, __name__) + +from collections import namedtuple +import logging + +from .client import Client +from .appinfo import AppInfo +from .user import User, ClientUser, Profile +from .emoji import Emoji +from .partial_emoji import PartialEmoji +from .activity import * +from .channel import * +from .guild import Guild +from .flags import * +from .relationship import Relationship +from .member import Member, VoiceState +from .message import Message, MessageReference, Attachment +from .asset import Asset +from .errors import * +from .calls import CallMessage, GroupCall +from .permissions import Permissions, PermissionOverwrite +from .role import Role +from .file import File +from .colour import Color, Colour +from .integrations import Integration, IntegrationAccount +from .invite import Invite, PartialInviteChannel, PartialInviteGuild +from .template import Template +from .widget import Widget, WidgetMember, WidgetChannel +from .object import Object +from .reaction import Reaction +from . import utils, opus, abc +from .enums import * +from .embeds import Embed +from .mentions import AllowedMentions +from .shard import AutoShardedClient, ShardInfo +from .player import * +from .webhook import * +from .voice_client import VoiceClient, VoiceProtocol +from .audit_logs import AuditLogChanges, AuditLogEntry, AuditLogDiff +from .raw_models import * +from .team import * + +VersionInfo = namedtuple('VersionInfo', 'major minor micro releaselevel serial') + +version_info = VersionInfo(major=1, minor=5, micro=1, releaselevel='final', serial=0) + +try: + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + def emit(self, record): + pass + +logging.getLogger(__name__).addHandler(NullHandler()) diff --git a/venv-linux/lib/python3.6/site-packages/discord/__main__.py b/venv-linux/lib/python3.6/site-packages/discord/__main__.py new file mode 100644 index 0000000..7085474 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/discord/__main__.py @@ -0,0 +1,303 @@ +# -*- coding: utf-8 -*- + +""" +The MIT License (MIT) + +Copyright (c) 2015-2020 Rapptz + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +""" + +import argparse +import sys +from pathlib import Path + +import discord +import pkg_resources +import aiohttp +import platform + +def show_version(): + entries = [] + + entries.append('- Python v{0.major}.{0.minor}.{0.micro}-{0.releaselevel}'.format(sys.version_info)) + version_info = discord.version_info + entries.append('- discord.py v{0.major}.{0.minor}.{0.micro}-{0.releaselevel}'.format(version_info)) + if version_info.releaselevel != 'final': + pkg = pkg_resources.get_distribution('discord.py') + if pkg: + entries.append(' - discord.py pkg_resources: v{0}'.format(pkg.version)) + + entries.append('- aiohttp v{0.__version__}'.format(aiohttp)) + uname = platform.uname() + entries.append('- system info: {0.system} {0.release} {0.version}'.format(uname)) + print('\n'.join(entries)) + +def core(parser, args): + if args.version: + show_version() + +bot_template = """#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from discord.ext import commands +import discord +import config + +class Bot(commands.{base}): + def __init__(self, **kwargs): + super().__init__(command_prefix=commands.when_mentioned_or('{prefix}'), **kwargs) + for cog in config.cogs: + try: + self.load_extension(cog) + except Exception as exc: + print('Could not load extension {{0}} due to {{1.__class__.__name__}}: {{1}}'.format(cog, exc)) + + async def on_ready(self): + print('Logged on as {{0}} (ID: {{0.id}})'.format(self.user)) + + +bot = Bot() + +# write general commands here + +bot.run(config.token) +""" + +gitignore_template = """# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# Our configuration files +config.py +""" + +cog_template = '''# -*- coding: utf-8 -*- + +from discord.ext import commands +import discord + +class {name}(commands.Cog{attrs}): + """The description for {name} goes here.""" + + def __init__(self, bot): + self.bot = bot +{extra} +def setup(bot): + bot.add_cog({name}(bot)) +''' + +cog_extras = ''' + def cog_unload(self): + # clean up logic goes here + pass + + async def cog_check(self, ctx): + # checks that apply to every command in here + return True + + async def bot_check(self, ctx): + # checks that apply to every command to the bot + return True + + async def bot_check_once(self, ctx): + # check that apply to every command but is guaranteed to be called only once + return True + + async def cog_command_error(self, ctx, error): + # error handling to every command in here + pass + + async def cog_before_invoke(self, ctx): + # called before a command is called here + pass + + async def cog_after_invoke(self, ctx): + # called after a command is called here + pass + +''' + + +# certain file names and directory names are forbidden +# see: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx +# although some of this doesn't apply to Linux, we might as well be consistent +_base_table = { + '<': '-', + '>': '-', + ':': '-', + '"': '-', + # '/': '-', these are fine + # '\\': '-', + '|': '-', + '?': '-', + '*': '-', +} + +# NUL (0) and 1-31 are disallowed +_base_table.update((chr(i), None) for i in range(32)) + +translation_table = str.maketrans(_base_table) + +def to_path(parser, name, *, replace_spaces=False): + if isinstance(name, Path): + return name + + if sys.platform == 'win32': + forbidden = ('CON', 'PRN', 'AUX', 'NUL', 'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', \ + 'COM8', 'COM9', 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9') + if len(name) <= 4 and name.upper() in forbidden: + parser.error('invalid directory name given, use a different one') + + name = name.translate(translation_table) + if replace_spaces: + name = name.replace(' ', '-') + return Path(name) + +def newbot(parser, args): + new_directory = to_path(parser, args.directory) / to_path(parser, args.name) + + # as a note exist_ok for Path is a 3.5+ only feature + # since we already checked above that we're >3.5 + try: + new_directory.mkdir(exist_ok=True, parents=True) + except OSError as exc: + parser.error('could not create our bot directory ({})'.format(exc)) + + cogs = new_directory / 'cogs' + + try: + cogs.mkdir(exist_ok=True) + init = cogs / '__init__.py' + init.touch() + except OSError as exc: + print('warning: could not create cogs directory ({})'.format(exc)) + + try: + with open(str(new_directory / 'config.py'), 'w', encoding='utf-8') as fp: + fp.write('token = "place your token here"\ncogs = []\n') + except OSError as exc: + parser.error('could not create config file ({})'.format(exc)) + + try: + with open(str(new_directory / 'bot.py'), 'w', encoding='utf-8') as fp: + base = 'Bot' if not args.sharded else 'AutoShardedBot' + fp.write(bot_template.format(base=base, prefix=args.prefix)) + except OSError as exc: + parser.error('could not create bot file ({})'.format(exc)) + + if not args.no_git: + try: + with open(str(new_directory / '.gitignore'), 'w', encoding='utf-8') as fp: + fp.write(gitignore_template) + except OSError as exc: + print('warning: could not create .gitignore file ({})'.format(exc)) + + print('successfully made bot at', new_directory) + +def newcog(parser, args): + cog_dir = to_path(parser, args.directory) + try: + cog_dir.mkdir(exist_ok=True) + except OSError as exc: + print('warning: could not create cogs directory ({})'.format(exc)) + + directory = cog_dir / to_path(parser, args.name) + directory = directory.with_suffix('.py') + try: + with open(str(directory), 'w', encoding='utf-8') as fp: + attrs = '' + extra = cog_extras if args.full else '' + if args.class_name: + name = args.class_name + else: + name = str(directory.stem) + if '-' in name: + name = name.replace('-', ' ').title().replace(' ', '') + else: + name = name.title() + + if args.display_name: + attrs += ', name="{}"'.format(args.display_name) + if args.hide_commands: + attrs += ', command_attrs=dict(hidden=True)' + fp.write(cog_template.format(name=name, extra=extra, attrs=attrs)) + except OSError as exc: + parser.error('could not create cog file ({})'.format(exc)) + else: + print('successfully made cog at', directory) + +def add_newbot_args(subparser): + parser = subparser.add_parser('newbot', help='creates a command bot project quickly') + parser.set_defaults(func=newbot) + + parser.add_argument('name', help='the bot project name') + parser.add_argument('directory', help='the directory to place it in (default: .)', nargs='?', default=Path.cwd()) + parser.add_argument('--prefix', help='the bot prefix (default: $)', default='$', metavar='') + parser.add_argument('--sharded', help='whether to use AutoShardedBot', action='store_true') + parser.add_argument('--no-git', help='do not create a .gitignore file', action='store_true', dest='no_git') + +def add_newcog_args(subparser): + parser = subparser.add_parser('newcog', help='creates a new cog template quickly') + parser.set_defaults(func=newcog) + + parser.add_argument('name', help='the cog name') + parser.add_argument('directory', help='the directory to place it in (default: cogs)', nargs='?', default=Path('cogs')) + parser.add_argument('--class-name', help='the class name of the cog (default: )', dest='class_name') + parser.add_argument('--display-name', help='the cog name (default: )') + parser.add_argument('--hide-commands', help='whether to hide all commands in the cog', action='store_true') + parser.add_argument('--full', help='add all special methods as well', action='store_true') + +def parse_args(): + parser = argparse.ArgumentParser(prog='discord', description='Tools for helping with discord.py') + parser.add_argument('-v', '--version', action='store_true', help='shows the library version') + parser.set_defaults(func=core) + + subparser = parser.add_subparsers(dest='subcommand', title='subcommands') + add_newbot_args(subparser) + add_newcog_args(subparser) + return parser, parser.parse_args() + +def main(): + parser, args = parse_args() + args.func(parser, args) + +main() diff --git a/venv-linux/lib/python3.6/site-packages/discord/__pycache__/__init__.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/discord/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e92320e3448abb5dd1536d46946b8815dca34a9a GIT binary patch literal 2835 zcmZWrTX);W5e6s%q(IW5CE1qm^hLI4OVq`Yn<%yunwAwMmaIxj|i=kyn}&;3h#PM`YZzmTWQEXY_r0S|U(zL}l9%lD zjB`&3|xhG~sm;FrW@xUA&~enrf{jFzkX z>OPIH@@u-k$ghhVaARn@sj*3ZOWcOr8k^!ZaR=^*yKqZfX5Azzo!WTpX8e$O^wLZg_#4;>v`6^!#PvD7`uklaBDy)j9 z@Ko#9`5(lm@TvF=KGXUQz9v40&&4x%CZ5A{josug#24^|mT&PdMH8ChCA<_ZXld*= zeJ^ohgz>b#h^FNAR z*cE%QH}v1v{#E|1?q~UT;s6fBJ9ww<5BT>20K^aQgZL4C9FFu}GtNw$cYM#NFP{F}c@-vpEQ4BeXR~%7y?&ob=kLFN9H&`p zdr9cmjx(oPCziFe$7<&SG#qEmkNYPw?Do>N+MHjntt>6CF03rAEY)@~c6#cp@z7^c z!q#eAoBQ*%gt6M2&DQ$%-nxz`V##U&OTCaM7!C?Swmz`4@oEf*onC8=X8GL&r`B>~ zwXv)U{rBBL8uAZx`|750B2Ta&9rQWd{$OU9-QppOQnVJD{r+auiR)u3|82sgax#;a z3p+CIgq)$DwJzer5QXxNC)3d5Bi(#N){Q~P1G4Ti?xkTICB3j;&nbJ0i8e+3F2>#O zrC!Q#rot9W60gftbtvqz4wEeMnR1$G>iIp9t{qS5WnKlfAOSRv& z51CJyDef}Qr=!Hd79})M`M5tw)R@=y(T*8uGdlB$Cg<@n3%2mg=oD~27n_4L-s^cX zU_q8oHLg{iYTU0*$Iw#I3Z^=Z{g~ry6U{*orf=ddEvw5CRT%;6Q7TVVd8EDyI~|P0 zB%MBmKAjcbAzlv=M!NN7T$7A5FTv)BajbfYwe!KkGE`P4j67bql%)q@N2932VXAz7 zoU*flxZBe9fb*}sDBw)`RN|utzbn}nW*P-%;Mc{#uM2)-elqY2GlsW5FQ22yCr5gy zr~A;tH_2lY80chf|Hr@+%;SnX%9e~cLcTz&Zhm>Xn2P>lKkP5GspJ<<-?OFE>l`f( zuWO@!G7=YEH;ls6brDl}Cc^YJ&7`L{Ppjwl(IDe?J+F$cOSjc^mE*c14hEd$vg`hJ z;PK2NUyj!DaaFQO7;SESG(*wUdcC6xt{cQYh8cI=G)#3wjP4E6UMvwVx$cmeP^q}? zZ#=*JRwq)O~>DT@NP@1;FjHTAA5=_pkRtB7L_Q!Pq5S5@F~w;M)X zW&4_Uq>U&PkQYNN8d)Hp`~Xud@o$46$Ek71#bU%dlKwnErJoUxn_*?bigZKpTAo0` z&u$`EUCN8RfM%>P?sXHOQu>XQWLFy*PdkjN)m+&u;#)SS@kJSb l)RxVvMvB;1wS{`}$^53Z4|&lDvS6Qca+A3nYE^S4|10}3Gadi{ literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/discord/__pycache__/__main__.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/discord/__pycache__/__main__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e55d276af2b389c501a97e175849fb0a02dfa0b GIT binary patch literal 9240 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/discord/__pycache__/abc.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/discord/__pycache__/abc.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ef9ff5984ecf9668ba5256e6ac89ceab066fdbf GIT binary patch literal 35985 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 Y|4Ut%HRgVxy)xIGYs~&YGv+G)ABF~@Bme*a literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/discord/__pycache__/appinfo.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/discord/__pycache__/appinfo.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..639a1a0b077e380191b274df1285600c9607a772 GIT binary patch literal 5456 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 Wiv{)paUIYK6P3aO{Ta);W&9QBR)aeL literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/discord/__pycache__/audit_logs.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/discord/__pycache__/audit_logs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3a6dabf096eec1408a6e2bd8835f62305dcd756 GIT binary patch literal 11866 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 POBMb^k`#_!r}FzR47=VR literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/discord/__pycache__/calls.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/discord/__pycache__/calls.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1a01f7b3517a76f37197020521817c58728d5dc7 GIT binary patch literal 6108 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 r5SJ_}UQuakPe)KnZZGpW&I_1AK# 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/discord/__pycache__/client.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/discord/__pycache__/client.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a96cd88702e0d43c59a448a07e608d692ede96f1 GIT binary patch literal 48317 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/discord/__pycache__/context_managers.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/discord/__pycache__/context_managers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9e4a2b7887bd21020174936beff5eae36fbd5927 GIT binary patch literal 2827 zcmaJ@-EP}P7A7fKk{R1g+HSDh-L|tqwuk`5&ZaFED6&OqnU0CdltIaLts8>kj4Ub= zsSZa?Y&ci$?Y=_q`y71>0(;e~yh5+~ouQ<(X;Hy*=I5L_Ki@fX=#RIz?cw+T4_`G5 z<0s=+zY5l0VB{ZxaARO_lUq}BVDbvDerF7!I!P?jT(Ae&G;O<`%`atgF;?tB++>d*{rl60j~_jL#DZu(S68-uBIGQ|^CU}I zlC!apVtC0eWRxnwTWlnSVA+Vp<49hJ7E>9E(n~fMGRK8%sG=lI(hC;ZG3=0}8beK< zjnwl<3J7x+<#`q-5%e*h#fzCpRiwz?D4B|!Jy3A`UT=BhUbAJx2p7?mB`LHCwqmj8 zi5h1M#iYoUOk&c}f>1nNaPncro+h)Tv|!V99ehrnFLFdcezw>wCpenbV=hvSlNVy-c!POsAwFf!{jT*WR^stgr%XV1Egbw)=dX%_tIk9SI;B zEo2Il0ENQM0GYNp5wW5Z@_dv{r`dA~EzVM&P`vqPwoY_3%)S*mmNK_#rr>Jn0wq8@ zQD$|?%Eu9WABrVlu$!bd9j(Gabc>s(T*FEf?If2W(9ycQpLU#poty?I-JT2c2T<#K{$T(s?y>9lcVQK0%>4=*);n@K9WrG*r|>?2oq)Bw zC+C6p^r+8{x}5_Thx;x(bM`xKX$nELJC1kUVh7H#^OU>`SQlCXo5V`**x8XwM`X{z zU%T&heF~%9_4@&~Ekqgg*H_QHp4(zh;Pv3DeHe71p5Vj{!px_8zFTS`s5LBV*SNtVZmvg+BkY}j~W7PLBil4nt(V*2DhGm&s=DVh>V;$4M>Stl`1xEe^L>Oqe zXtvaR(R3@z=36aW?_h)1c?0J)zR7LOb$*L)VQ%nkfUr~4`r3z>bkdJz8XDAhvA8xT z#>BifLi3uawF0kF)Iz*KC5q}a%jU(cnaFd*77eGOX%$tppOL%;1sbf9)UYiYVTeAg z!th_%<@g#PleT&FR_Vy@in~rTeP&3{j~F=zxwI+GFHI!*J|!9H-7V9Lb8Aw$F+8OB z2ohzw5kYmbF{!<@UfjR7u&dvgrG#my#$=P5ulL_PIV;P<@?TMsn>PH#2PI9#wAgXf zvf=8=(9soJ;e}8u5xI#wMRlwc0Lewlmnkl+gi8vf*vO|s%$pTSm0Q$Ts%vE_youE& z&z2gR5YKOe7^VfdcFen$jRLuCUfo^-w-#L^M-PPX)w!gPw9=WJST_ccs&Mmv7BX7J z8u+N%jcMW>Rblx}Q`(Sk*0s}vZG5B`QiLdeO!BW_X?{^vQT}XjC*u6KMXYNUN+`(R z#T174stOr~pMslHO&I1~l=?c7wLq+^1ALk(8Xd_F7E}Qflb-sj9xeGdoENoNzusoG z1h|0*P6&#kf>mLu;hXND9K{PN$Ioy**U#YB#aQyzkP@Hr_#+8_0q4g3^ zWl|wfF$30Bu|c+ev+O;M@@?FK3i%chsvP+?k#~sD)06LkG_4ZFyL3P$SrYw}>@bX$ zSpFBBHI{eHt2^uGw37H8m^y|(15^H;?3YN&e~@WvPVxgHZ+Nmvo@f~N!Ck?)D$O<1 zZ*J22PotR#!vgN(f1AaW)>~ot%_5qX9Jx&>zs5CY-2d%yyqD12`)D^AkQ*-`ES`t>=Llt#5`HLOPc7gFZM)&Kwi literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/discord/__pycache__/embeds.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/discord/__pycache__/embeds.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4e2b691f8734966d57366df511258e5a2061c5d GIT binary patch literal 17306 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/discord/__pycache__/emoji.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/discord/__pycache__/emoji.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8751a5546ba152556dc92ed40807059d7d1bc66d GIT binary patch literal 8205 zcmd5>%X1sYnV$y$f+LEOW!a7#$8IYR3ke0%_NI0hkrl%vC?cUi764i+Y*d3GdPod4 zz(73%QAEh(KvgBFl&g}%)?QpWrZ)Gz=dgdlUZ-kLd-A`KQ+{9f%mAdxIH??VAx%$D zzrOdQKYn=is7pK}YRW@nxkTUu$}`9~aVwfio6SZ}jUujdX!m)*ff z$+A|1(UI`>`w_d-E3pq&-v9pH4^}={VNGW=iYAt|?TUdHhF&maUdZ~caCeW`zHo+- z%a_=ma9tMcv0mR1`|c8p0_F^l*vJ(jHUzto;|;yxK69)d;Lysbk7L4MFFJIDi^ZHd zVHos02j?*!^u_~s7&#Ha+w*)kWOpJUe!G?IxLsPZ0ED}a&%7Z{b6GmY4!x)!j3Xx8 zFcMym&RD{tofdn9tP*P2% z!oCCCcin_xfa?t{8cN9lb>rPIg5W*yeiR4^?>w1hz~88`*4BFaQMFlP^%mQ1Zhcx` ztF5uy)fT>QFR@4U_Quvun_)$>+Gsy!TkEXac+7rWZ>%k`+P`c!Yps^G)nxUD+nebVtTx&9PIG&!RRj1n9NVZj)|-G*dsu6<%Yce8R{InmthG_y+$2y| zbqClt0jJ4Ux3(WQ>kl^CY-4M4t%ku*YQU`e$!1M~0#U1*)%wFFwpM*ueL&bX*%nS| zTC_}I#~y9eXo%od@qe{l-)ayUt6PnB6Q4_SxZY<;1_6_xZjUkyVyqRu$-{1Baa zyEX_8ytcECkK9h^iXN6`KMTE&@r3`0#??AH{F%Y^j>(rhIljQJzSKH-zR0iPUEtUG zD|pZG8~jzgi~J^k4expWI)4Lii+_#Z!utw;lYbrW1^yQQ2HscQMgBH_=cRV4cdnt& z_`9-y9sS$im@gCPe4={9Mh6D1x6^UhEn)^}jM4twtSW4Wx`Z3IKN+f87V%VhB6T3u18 zumHv^9cHLdA#|{WyI~Km%EgKo?4ys^(R7wptoGgB(~x=a$cKRP6btC<2xMDI?2@_Ptj zR#-(+Qt1L(H>0PG<7ql|;)z0&3_L#F;|-&;ds2zi*UIuN;XWIC!nJ#WPa!A+wi^Wg zbY~rDf?Oc=EZHN&8@Q?1t!Pc+de8S@Z|qKG`$sLuk1FhW$W*taz&b;3K=yPQz(;)- z3=|}!&ClJyLkki*)@D|&rMKXQ>4QBYKe?vFj6 z+kcUdatW)iP1PK_1s3j8T9DBA-0^$|>h)DbPF00eINc@H1?*Lap(846YeYyo{=cR= zv4i36lQUXDD}j|0r9NwlVqzumRd99w5m|$9;lkYK(9Us4F0e8H<15_<#DVf2OrdW} z-gUu#p22~aqs4@Hg`8le`?KvV*$m5y$!cQ=3(ck!E%D-6t&5APXyds=KC$8PI7bQ| z7i$gm^ZZsUlsfJW1cdO@Eo)?{=_ zr+Y*S{fIPLCdv9GI>$QKZxLbCGh|PX4D`)gh^rVk(a*{899WR&d0sdr78K;y952eR zxu|$BA6c{$Yv%X0Qv?5K{}nl6o$4pXu_1mIEr4}bj}3n1Gh=9Qg1jhMxX=)Dz(>qe zBUyQcdPOwr;yT)PoR?A**YHs?#7&xhjr!N7J7W`;INctb`%q3gLmnZB{LaxmRHMUd)6YY7no*TWOuNAu#Jz!z;zds05pl}xzt)D*=CJjAzlY7+mr_HGb*>+PL#KL6<3`#mnT^S-_ngX4SIT7mC)Dxy$^FTVdtVxZA`#AU0g)Bq z*+q&a|QWIX>(vESwfr-DDs{ccfq#ZXSV$uD^gSzQvT7z8ALKs zlVy@d9qXt1LZ(&U#b^Rel+eEb*3h->ql;kC#O0zQSX}=hK{6U&5F5Z-lHuhnrqtB7 zk7rv@G*a3FxJqK|q?QI{LtJ0PDjKFR=>of4BA|Tr<=?xg~aNN($p-7+K?#yB`8%+ z`e{+z*oUV4Lfb>|@kctTPDtx!Pb zlQSk)X3o#ZrT9efSMh|DosqVlvAmU3D`naWt!%@}WVSXVfZ6;U+@OOxmW>c=%at7+!-t5}7lS0YlCU0lv7i@#LGP(*l+LM~kvILGy$0l|KNS7(mY0JkL6kcxvNm8B~)l`1rU zZ{HodFGk}2@9AvCp2=+`VK21DA>EB;v?yI(%By@&rgg;n*uXWwL~%M%sm>K?Q8N%B zx9?-2lvX^S9sW51rem~xLC+zz&gnO@WGGwJ009M*cTo10Y)SQvQoR476TXFpgn0nN z!rMH^p@n&I{WG(U)MW!H6bZLvI{%H$$GG4J$J3g~n(Mm}s>&p|3(8Mq+mC}W8=x|U zLJ7)8f76u;o+gtkYR%+uX6hB&jzCs|WNcaqnbsKYW*Zgt7u+wY<}kfp5~^fcYPqUs z5OL}*n0Y$Z>QfbFJW2~{4yyPO^Mm~v%$klDx?jR7!)QGayB<_`n2n@-qDmJPr(~^1 zd0H+xto$sfrqpTDl}HKIRw7lGUFH2`!lAM$x$#`=iVJGze~@mGS!l0Kl3Yqnz&pw76ZuGa zfK*GeQt~f!(UNMphR(4*Dw1jp>oEp6(vUCO1FJ zLv3?XZ4nO-c=ZLY$(K%a@%p+jPmO-2nnUr3C}rT~X7VDfD0v6&P`ZLh%fW(jm>@ zn8N!?lXU6tNwPZge`k?|!{23(QzDXldCHkD#jX|%LEhqJ9%NB^cc9JYKFJ+G#VtXh z?wm=Af52Ew$B;cD(Ro{iDZ*kVLQV6W^A_4D6_m}AgAhMJ(|Lt9U*;Wh>P~&u%+Dbe z=jen#5>_%vx@94LE$S0%id)H2)f1UTpDVt|@R?P#R0)JiF{Rh3@67v!@ewsL%bGSaIV@m;;gK18aRq-hM{-!q7q1lOiYDHs`nQl@ zm|Iv_$QKtD-w?E?0e)2R?&RfFL|!RkEh!w09Q@hS@e@Z)o>cLK!o1vl5h`)lZ(k~36UWx@C}n#V0L literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/discord/__pycache__/enums.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/discord/__pycache__/enums.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3b2aa9172038fcb893450b1389d585a15444db1a GIT binary patch literal 14367 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/discord/__pycache__/errors.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/discord/__pycache__/errors.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b7eae3fa45c2000adddf4be53ea6b99437f166f7 GIT binary patch literal 8294 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

    23$AKp&gYqIr0(1KDW()31!I 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/discord/__pycache__/gateway.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/discord/__pycache__/gateway.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e1e45c4759665d49451be21200e06656251512b GIT binary patch literal 26631 zcmbt-dvqMvdEe~pd$D*B1WE9z5k-oGL_tqWDlN+d0Z@cRE@=Q1#jV`cVrKyCVzCR| z8IZyjv{QkJ-6pbSpTtca)phMOO`OE1j~vI%=}A+&r)}EA`Kzuwjr*|ErcB%8HqL2J zT{r6Q_uZM<2bPi35}Lbr?%enN-rqN)CkF>}OP~E#>14|=zGHO!OCo;`mwPs57`9O~ z?3iuVW5pPL<8^aAUW~6NiiwymPZm@1JY7u7Z>E@$-)u1}zqw*geg}#J@|!Q_<#(_+ zD8EC+A^9CH4%-PkSsz*7Q{02T6LzXTy1uu#SMurl*!sTWKFMe5`_~T?53G+D$76<* zsU369&dJw~qvZoA*>4Y^WWad<_a|_Fz#hl_xHDWkiIN9Va?sAAB#RzS;qH)~ z$6X$Gr)_h=m^e~?CSe%4#Z||;Jhy0Fs#cta>sY68Gm*$Jd)`}`OJjXs`Ei1>dn#)#YwX9a0 zGnUu1%8e~+!%;38G?%<`wNY)XSmj&=}F+i z-D!AbkK-*@>yB%k_Av3|3qgzH6K8T5#CFPctJ*+sjuk$#ZdJY2=B8&U$MsaT!amNR zQl-9Wa}MF-dUd_3N64|cEZ*hJH(jiN^E_j%H|^>&e;rxY#^zGJ>aL!#>?*rn+VoJ< zWufflnH<*fXj56PQ?Ij!D&{R~ZO`tEtQDhRZ!mtaMKbQK)#f@^l8aV?En41G4Gf7* z;c}bUG8wVvR6Le&=F81`y?KjEt27&SmFsoS=H#HuOU;{(tVN$~qv>I)dI~%MnS?&o z;E}sp#@v^jV8bwOwUJ{{xE!o*bIJ8^@Kx;nMpMany~~`$_!nobg)0{puTRa-T5}85 z)%hzg&CSftSjVRpaDV)ab$xE};+1QQ7HZ5-6&7z;S1wpng&Wq3bA_2R*6hny=Vuod za#!Z9xyx5C&CQ~0t}uP++RR+x1?xQ86|Mk`=K#Oxbn%MC0fVmQW*6Am<=Oe^i|Bdk z{M@Cv#T#dG7v>fV=+nA@PN%G^Q}c^+)7LId&0ANm&0oE;FpJ@5&~0I^aA6*!%wC=? zEKXunlv%Sc;l^6HICbd~hssS|!|dlV&b&2!infy zJrou-eQ9d$@)>Jp>hjbJoZY;21-;DYSWVB)x_)t%MI3Jm|4lE>T`6!G(^m?M^SC{O zRn9L)O|Q=_%$~8P=I0hL)!c>oE9jovi5A?m0^1d4buZj%*`Vk|P=ykn1)!UQK1QaSjRpW1fI3}ox{mD+&oyqA>s5P7tq9`#BQsUE(p2_! zXKA5XS#vypz0?D`W9$TFo!BpE*W(@wr!M*Z4+s1+f-wAtYO-`Gi?K-#tVK5 z7;)|Lte*iQ6&B|%+?a^_8KA7POI2G9qa)vJZlEv$611#FQ6QziV5oh_fB!v?dg~jH zZd5lOS=y}D?MGT`&SPGA`R1b_Xx#3}jjb^I=n4+&R(T6Wex_6c{q{ zxLoirBNI!+x(<$8d5%v$r_mp5@AkTNT~YWMLwq#xblq$m9@{!%Vo@9f_>s2+H1% zD_VtOi9a}d6P)f67>d(yRO{%5a_njadv7^>KrXgf_rM1{OucL2gr9Tla1u$h@Vp(j z6L$!=Njr7N0K}&441SY#mLdhjqXBHopg;P8KHqu#2rG2d-3B`PeO&lgI9Fl+{Kwx2 zPS4;bfKx&%gfPOVz--)0)RH>}?o&3?v_P#{SYappH<9t<>*d$|ta8@1K;Wmqx9sLE zKMqdhr_1hEqf%}9iA%s5KT$_2Fgy`gV`%RuE6vS@r%oW>ySoIQ3%J}o62l~P@-GJ% z-M!EVMk@p!{^R<%&S_lkgGfB1X6zWZV_a*EmwCWgOQ<7uYyoSlfhw#~sEQXZD4~A| zKjBp&COm+)dVw%pI#j=fP2v7n7G#1%ig;&>(7sh78|;nrmtw!|F4m5-&& zTx`S~!r7+G){#CN6gBSJn*sFkHTHHD3D##kWz0dJxM+Oli5Tx=`nc6|o{8g?z1WWJ z#AAk+tfi2P>Dn>lI$C`&XghDbj61B}EVSMi5gLl5LY1w#8SA7=iMivH&sew0kkTNp zot%7P8NwpPHWy6g6egyKV1B&bT=CNojVU#2GJcZfNw*Fz7(x~JZ`~{R?p<<;c*7HL zb4UyT5^3g0tTo=eIPEI|}qt_-rL49Q2nzYWFL^yYe^Eb zZD0wA8Pm)*OR_f8oSi~CV5gDh(aWHaz9Db8HX^w_QEoKK?e)g&%no3yv~N3J+mGJ^ z0zKJ+Z{BkKOcm;sf+QqIzSw#Xg&P7&Con}qg$0QT(mnMV01+gy21NUl?qutk1xf?~ z?5#Rw$*o~jutO*s9sRV21vHLiQ>LQjrxqov`T7$$j_@I56@R!y7Esc)DZD(%3Msqn ztT!97eDDf)#m~yDOU&lpBfP%!8TU^pnf=X4&)8bS-oD0wyZ>w4pq|Mv#V$#r73#?3a{&@)_|)k zuHq_XB^qbjNFw+_JleqJl7Shqy!?%UOJ#&twRu(!w2gnQgT2!2Zq7w^L54Mr%l#a9 z(Oa?Cf12b?bFH1&TQT=DxCcnr5(k8s?HFr@`jnTh!8C$W7z~5}=4u1Bxf8n`^YXPp zA^y4AkR5;1ylu7~+sXrJhIb&iUN;)Y5{5UjmQz0x!#xOOy0*to>;Q3Y7!C7fA&}^I zl(h-o$nOPljicTe^7}aEHsq6o2FWY#azKT6|B<&oXQyr_UjOvg2*Vn+!56_O>PGQE@ z%Z7Jf&Du_429T9lZf9%vZ)2=wbH8yr#huy)vSZc>&iDpKe;L>Hj=jJfej@5uR*qT; z^bF=9rIz3DeN7dRiRygI5u%MchdEZi3bz~Tt7knrqO^< zsa{|rV!%1(9$`Y6RU?T|h9o6wN0G@D$JJ&7NUVT()rJ$02-?_*E3B@(+)l>f>9iMa|ivn?97Ob;cp0JWYkO`9g2;aVD-56 zvn*z!)WjbICDh9xHwrNz5AkU%b_~MQkl7mBMPM*M#84^OlA#K1p)v^^&~ydjp&fgh z60k|(VK1Jk7m+|x*OdO^EQ~AXXQvjSp9Z{XA|`9^S&~{rvoGNiy@--~>&UK2bsT5c zK)av{-~h;d>9k8#)W?lJfR+WiU#r%+s1RvKb zI>wB5Ksu}SADG%gW$jn-{N5w8Ml>=j`x`aL^vK^D1LV>`jq72u8rSIb{Pd}79Gk|GfjXg){$MN9TP%#iZ z$=32@W4oaY6$==>pP=b*I0A*@;ixK;H70Ft+7>w}|21)m+LwuC#xf5<=!|FL6%*OT5RV1sttHjqjdl4po*pz9b0wotAs9Wr7ch)2JO{AfXY(n7D@*Q`@AJdG1 zA{PWM_67^MkTW5WijWlO^6Db;YEExOwp6NskGL=bwU3t4(pPZ>z(g`f38{6gui0<6 zU_{ywVGK<(nm%}@7q7*4pcjl8J2)*NV(~)tKVb!3lq{j8xn;DZgzE{a^v7la*Wct^ zIiS$6`}@zbA0Z=ZM?{6xb2n<2;)37_L2xJ^wUi(=B$fc7L3lE~xIB%nIuM#@;-}!w z0S62)S=CsjjaMS264!nQR|gUkjavu%uLx&-4~%cnD`3T~r+$spHl?!pPeJZm~}C*dUR#M^N}YbuXJ#gw3N8d#V1j|EoY z>3S8SOQfmKi@fDJB1L_VBfvhLs5EWIPXo=|@`?k1y@_&l3kih}*x@vXUeOVr`%99w{AWS7n+5CQ(oX{bmjJu_CL9wnOnFzwK#oIZdiXF zvN_EH%|?A|(wcGL*Mk=lioP}{L#tSVHbC(m*NG_5NB>X?fXr^#13O!z*??+dr-DC4_={rrL(iE^wDt(_^)H`)2mJeJ0Su9IXgG9s}nez zn-&g{ZfV`2_5tJ3^I_QR&MLAYEMj@4)5ZJnQo$1+e zn?n^+dYPa7;I-L>#nR>3%jeL7@~><{aa?!SmmFomq3+RpT(&y)Y_9MU zJdrcl|Iz~dweW*ReZKo_o8s4jZn_0Kthg0%&H|VLY(#xgl@0;RDzCsGrT6IK?4?Ur zqFV1ZA|Sp)N(wA^VMl=$RGON8@g5ycHyg`UwGI=pU@p&0wj=6u(kkHiSIal~2q6Pi z&=JU0QFrBzGlr?z-3;L5g==${W=ab;3e!>5jsuyeR^|%Y$i`drz35p7XB)LzY?}-q zl3EPdXya%A86*fz-P~)gIgPHypCux1*Jl)Ap8}qRfOJddCSi{ zS1+$G+2!XEPGpc78?A=}x*RcyNV=VT4#s`BoS#QVx0)FBQ(A!6=8u^lo0Lja`z1G7NLi=#r3=f}{wOu8+8Xi<=& z{|I-35{$T-<2f@0(?Bk+oqE(PTLN52?dbw1L6|5gV^;oT<#wr*^Y0FZpUcg*`aqUb`d69xi@K?4N71~ z*v_C74p10|v+_K#orTpQ25(8Wl;kh`W!X|1xeR_`>P4E9@&V)q;4IFT^6;u;OM^^n zL-=K@VU!HR!;&qHz}%WG?UB+^HJ`KyJNJjAf!(G=_waKJ{9YhiVZV3Oh0$a z1v*Liibiu-3_(PRYEdkWpWY}d7*Sn+gow|04%k3-Nd^T%6x2sC4fSaxuzi9@mR6h1 zHP_!G0Um%KAU!Gd@|HHv5?1{Iu}okjI^Tbs?MW82S@!~R#nIBH2va5H0RJgRx!Qho zjm>i#2vCEM2K~ar6?Q+2M-w?eUa7-?9-1OjonK>DXm6ebS>c>6g!XMx< zf#y)Ndzgqr%Z!m4gSm4ko`d0&7h?fPJa{KW#LS!d_z+B_Lok^R!RojR%{scRh+@xP zgG(sNL%7it1@4W6M=Km~1x|?An~B?0)8p{4i;}*bpb}VK0tvYenn#}U9qQIB?fg0|-CY!ywYtFI}9r!*v<3$w-oJjByb9;a>F0to8)vd0R=UBMQa zUso?13Um}s4ac1XUOBz3fo0s1Q}!un8Wip1_5%xukqb2S_B6qy5H!=(d;dAIN0;mG znJOhi=XIxo2u~f}1#P3NJ2up#a9O<5-UCDnE?cj@T4*+$S6@AYDl`}9nRAGabDY_Ytl5_Atru+@u)8Ny2m@G?&%q?BfiAyh+*N4tt|vQu^%mVnILChXuWNxA1C)Wz)VLBvi! z$JPiKSj(y!a+xS6_V5*8tJKR&y~J(!{%cv*aql3PliHtUPRa)n$vylwxSX^ZK^qh9 zQuh57=4$!i$sXx#&>rR3xQ6V#Z^pqp2QF%t<8Tm3BKO`19H(@Nrpe1BFl%4y5QTIN zF_CVv0V^A#2wS;;t|KTJ(i6Si{`w&Pazgb-tevOPf- z`U67k$nF;JejlyXHoHiv&)}z+Yoni^2?f34aGe3&;)8Qnn|0gYE6PHNF~Aj76-~?a zV>df3r{V}I4pN_R?2^=X3&o@`5s~pP06(%N5tBTm z2$=>#tLGMnmmENq6Y(Z+Q?d#KV0Hv3tkR8&>Vk|NJ10)S$%#?5hfC&K)eR(mW&X_0{&-w7p!*6DkmUerx+b{RE-)>;%0 z`9n_e%PbRT@~<*Css|Wj{wqwn^(+y7e~NocRZ;d9dpDH8o*mdloJiS&NL^MY`BLE2S{3e}id!#i-LtpJar1xW8hHIQQFADWkJ)FB*n8fL=BjtW9tD9n-(bwlagcIT2sutoPGKMRKE0i` z_sjTiAmnSQe-E{k6>=&lCwA>?hZa@$P5ng-acGAu`PjPHERd2 zIyKIrSMHIizS^hP?jEpj=+UTIVK3}qizO$w(}<4AB0A=H!tfqMbd0I~P)D)I*&jm; z3?LjaGP#$bMo|rnA-3~&?)9&Fr_lcNPHe{b(678=-X6G}-_F-2w$p&3xH|Dx{59S` zbbD}nu=endfwJ@4x!RfS0rtSB7(ZWoM52C%F#fX`e-h)z)yHDS?ctcwI)s*wZVwCe zMJ=ymE;jyd4}W<0Wux&lW;KL19P2Sacn0~;ZO0oK-b>#j=;iV4k?vkN{&nN^L*5hH zfNrc{==K0tvpw)W&h6_#oQ_o}j%v#atQWVS+lXOZ-3B4hem>)!cUpMsVfm3~TPH3+ z0qme>XFCl1v($XfLbWRnhusBUr*_D|}$1wGev%Bg&*d8d(E{_b^6~ ziV?gopEw8JB3jXtxD_h6*qZ2=N@x*>1(6|pu)MXcqV}Zrd&b1Ybpd>pnpSJ?wZ>Yb zd8=VvxeE2vmZ(BM=J`o+5BRB)1iA=aFCv)V4PHPfm0D*z2j+mC=0WQPuspm{z`d|e zFK9zO46wYPm~5G6EI+MD|4i%sy&b_r0kzUyhUs_<8^qTjW}>B`zs&}WO*&Eu-A%Uk zgliBJg@XkB$Ogt$XFyb$^plob$%icobr<~Wp(rrZEIt}%4mgL&@F2p6m_J#gG z!3PQQc0bA3q7F4zcHWP}!K?YyUu4%+*3X1mo}Y~lR=eI9wc-y(jusk;b*RHK8!s{; zlk<~ekd|Oqh)VQ!_@lc`z6kde>5JJ) z88TPB?${#zYl;7Zd@_jenNk#CC0alcHbM^=K`qPAC~Psz4EDqx9pJ-AD-GIZ=6;Qx zB$i-q(J^5h6A@30mGTo*9Q`z22*8VK2-QM7sq?z}BAdyqC}1I4G>+l@IFzX#rtXgf zSZS969q-@Pe$$cAa(5UJq3g|LqdzU7DEG;guA|a z*1GJJ`6i4T#(aP-c(+Iz%2ou85@^_QPv`{c0L}rYZFjPuD5Qe;2&B&-FM&frXn~)N zC|1vzNv)%pz9you=(fgpEj@@u=~^+BLs{|uV8t7GtQ%`&5R{!+qoY4txXVC}yFUv$ zcK3@+ev!#9G5KXCUqXU-1)tOX*Gztw$+wvN8z%pj$-hH_g?*BFTAg4jV|bz%w1f5O zn1F5(6IL`JQ3+Aict1_sz#oX#i6d_v-?h$N4Wbp(;6%CeYq;E1K=sxy@sxE`FAPkS zLrj=xvG$t0c~eW_?9ZZ(7+ysl!gI(98&QocYETO6txo%OwuH)7!DUj{#ibm@&On-X)o1g;KAqV*|^zE}M&)7qHG zXpj#}d%bW|UeejQEh9YDQt%Fu6!6!}(6PTZ&+f@}-P5pqRLJt6gz+8o^3 z0`?*HlnS04K?~x^IAp8zo6v9GFh!a$ZNxW!7*WfNT$UH5Gp*mc3X5g0jV`dz(K4h@ zSnKF3bgRJV8(3;BhT(QvdCFCo;3MOWHu6Nb(~wrybuHA@F^?1k1qBx9U(TTe316;5<{SDK`T4#q%tW88tW z4*ecQWx6KyOeb59!zmR6jA^%tegWa6d&Vl?qshbfZUTIvZ@b+;(2I(kpx4AvjeTGb zTJ*ZWCtpQ^SH<*;d4Bf#!ew`55zO3AEY7~XsJ_WMqTov{S@Le!SCH$3)ThCKy#J}h5x0#Se z;hjKHLdgdG7~bdLgKkQpK990fqz#nZjEsqhT}1B&7unDeFpNxWTv$d5j3x)RHNsTb zPV4Y4O42s6i-(8ZqJMFP3JKvrM1jD&BZ?gE5wRE`dZfB`Dq{%mZA+~Xf@$7>_3%^Z zOuq;8QRak3BF-1457?PQ3duw0SvTKHZP=H&@D!f%-6TYo?RKcKRmd9V$$*R^KgOyZFJc8w^@N_uALLoOuwrrAgI2vbM`9N_*<> zGWk15gn^QIrg0I-1Z-N!KuDkwT2* z!hAx|iP5vOZ6d}H_GcK!lJZ&zUm8hyS=ftH+o`}%Fo0YHloA1uF0@XC^R?DD5%B_L zf>B!HVC;NfezKUTLVD0@Swj77%)7ldSt`(LFH2uU(mJ{TOd*Xve$qXz9W3R>3Sal2 zrE(&#{wu3;8&noak#LOHi#_!kizblxnJ`GI<50z_c8yht0+5%4pnZ=8-McN8Ho@v$ zqWLgB27;-SLUV4J2Toy?FSk40!$fTzAs(mf%-egPIbU6vBZM63^Jawg$2q1G}+qjQf0(A59N zEY$ar_({YKsVy`b?g{(S8yCRJ4_N_QK1*@224 zH&4;FEaT86YR2~ zrPNvGzRl$GOhnqCbfCx|)&F4fznDOY1IJ~;{pgSG<8_>?w}Yf{r{se`W8(FGIceBfvY>5#Y`6ZlfLE?HsHf!n->R^5%!ObddKE z9pYU)>KxM{-Uto94|xgmM&1enz3&eKy^kZP`w@E*Jv?AP3c2rbHHgKPFJi47f!cKJ zw{k_~q3Ky|kV|Jh*K|h1;B?{iVL~e&J%19X`EAJQ498iwVxaNh~OZc!) z37=G2yfS^|Qok;A9Ivh8fbbG1!ZP4gRa^R_C-@c%0y(M5HgAd8pw&BBn2e|ON3r)t zy$8BuFvoVFaC?Jv^au7Vh(-&|ztmc_HJCB*P+E2Ok*z5jqGJ#ET2v67-5#L5%bmgD zL5y%|W_DqEe(oy2n-ulfJ?R%9bV;Y;C59;rHbn_1ArGnI(<{9@uyA#D3g4sZ8@r9L z-0CvF@kJ=n;YUG8dryq48+-t%XVrf~P_W)ygr@88^hg438}Z>{g^3>K+LdrOwNX4; zIJOdj)$$fV`>29hf&pn4C*q0eHSY+SfA`pD&PoniBIo;_4J{P+n&8a6XV~3y-~|r2 zyR2NC0FE85cp6^?D=e0J1KQ^x67vf>3_+rZ6@Z>Z&*?C`4iFFefQ`Pln{LRl`t~aL z6?QDbd`H*qfM)gQL0cr;Lfl8{!@T_nlOJL77nr=kyelqe)g%q1aTUj@wK)NYXiQzK_gd9yBiq?Qg5?cqI*cX} zxYAZrp5Qva%OuiFA&XIl)QWh|+P;hj-{RWH+4v=f$TZutDi<_44CjbUvvIWHFki#v zK8u7>kwhTT7>oA{k;0viGzo!Shf+{RO6}4{;(TBDGw6Xbq=FX(lBKwDIt59nUq6E? zS|E|iacC)OfC9mf^8r^A9_QaU3<4x0sjz41K@0>&k$+rt zBu$^kO?%M{e1rmx7zi#LiZhoEg_*X6K+5LwGyRsIkaZN(fhwdI#6@=PKvwU7NNahn zn~V1oY~-84mg&%*A8IeYfd0SBy$~5$_Cg##+>LvHcNj$z`bY)Lxi?+9S_=gP@tSb} zw&VjkfSMi(L}1_x9P)J=c`Gmp%RMYo(BQCRb_$`?uv2fR7(R^@VQom$UIyRhK+FSz zr%l9=r1&lZY+YyztNsw~^X>a>zO9^TJu@AJHSfY4c&N#!LSK*^_p}7fzB<`T-E!Tt zk3QN;KKlNf?|bSlg;dDUzl@(Sb~!M<6wXZy7BfJL4SdtUgD+TA8uintss0KRp(USY zPN4Pzb5Aq*OH7C^S_I}H0JMLW1%D$dm4?#UkFiYfx(9hFPyc|YH;#-E9|9E9a;nKw z4p0quni;v%dZ4;rOfPXc0&TiZ3EDhHD9^-R92?Z`1e8Tuf@1gxNVkHREEMCLHb1+U zF55Qn24QXdFs7fNm__wE6dZ*ZbwM`N=pJECqjOS-7l3<1jS}GT-Pyi)?GHl_#YYWc zX3?_gFc4MaIF)BHu8bsGC;Joap0*K%!|t}VKho}CN3i;uS%pIed%=iHI*GdXB3>xw z%J|S~v*fy}(zVotKh({z1wddtLPfpkfMS0I19oUR`*G_JX~`uFcR$8e^315=jwGU2 zVtY=zyHUiN(70`1c?dULUT8Yv;&|ZqFdzk=Ih!zxnNY0b7e?@@vaZGAyNsdesBLXu z#xUJ6bDB9`nFtX646btODRSa~CePs{9>b{3X-esGIp?g=Bf_`RItvhZFp zfNmqc>uOUT=rD>N(6s~ku`M%dB>MZ<8BNO&I};GKv2!>)p*2t9DPl$2lErVLK>a!r ze>6~PLKuWnqiq3V*;r$}-(W%yk-xW(PNE4SG1(tx^a#8up){r~3uMjs>=nKh^L6AP z!-)X%UUn)b-!gNYVGnkQIpIk{jfIDlXTZ*axCC(>iQ|Y72YHan)`R_tLAaY?C`ANV zS@cQ3+QH?X!}LE!c?Y0m$8g*xK2|Egg&fOZkVFo$orE;TC1e!tS;lJbz{nEaGvqP6 zM`)SNIO`Zo@XHS_@r!M|%w-9x!MAFFz3_W<$K+4&=&UjtBwN?GdiWxNjXWIZ)eY??nk`Nhi}-K^-JP z7t+2Txw{vzw=MJei#<96isnRRXibF26L@GDim@9Yi3xtP>{hDP*0>E#yFw3fb%W*d zv1Vqv$UG%r0+*QP`9|c2#u!t;Bd*2Z-A6R*C(YOJ`ij6D(1ctaK0&-G0v3k=Z}K=7 zOwOEqOb`rWgMe*hocez5Ioj13Q~vyi2&CjLDWmmVe=yv=sLq!j!;buVOc0Zpt@SLcS@AKLkqaG=kA4_G?__Ar*5{vBc#T2SUN81jhUc ztb>8y&4zSA2}S)Q z77KLH#itGsSV&j!&78JULs{QXX@|X^VDH6Db%O#KW|~3{Gf)q*sYnkzknnKGQ`Ip% zy1)Y=3*>8-5*J0U4E{#plE!DG;;_3T&iqJhG`^p)OtJA;>+}zMa9x1LQ=i85!vri{ z4u#Y(VCfRnd3>Pno^eVvV?@@ZKV77f`d64#FF~C}na!;c1(7jIp?g+%OIz*j7pR1G zdZnRgL4@iK&5BeezBdUrd6-lo-g-J*HxUMLT2oL7@d*;X5YF$c;k*3pRR*zJd|fIC z#R_cfGZ-F$_nYgg$(0e5fVKiQeU|DEm-QgQ7kjp9T((FbST?d-hq zoKeEUS*(%zD01P3l=-|zzp(J!jWz*DLG9vRo6y6@yC6Oi#=aD60u~3J2EQ`+W%zLz z!bVMAKd+?`e03gmGV~{-6v5K%jcDK{f}ma=^)|dgaJ3*vi$WAO7LGs&P-ypt**F{3 z9wEoA?U8ge2-xb=7Cr2>lW)e~fR`Mwm3^aF@BZ*hK(Tf57CwF!|3+Xu=8)PK2VK zgZn(5Z}H$bCj;-p3?a6H-;ElJF`OpyE%%^sJ90*12m8Y@7lbVW`$h->U)ch8q=fqa z?f{c5x`J-QCEY~67Z&;aM>}B=VXXM1b$m}J<~&oL)#>kx0#xGg4ykt*V! z1_3f4m1aVEt0tKv_Gy0@*WR%oa@fMR2JzsFpfd6S;mpx{I=f6bv=aCnVm>p7ccex$ z!i;;VEF`-re)XQb_oY z<>tC8JBR3Weu~o7p+*$P<)aOkFaRFV3?i6=FEHS{4*bH_2U$epmX2vV%G@y~&oGIW zTRfocKM^~d4_{31SWotbo89je@ZAbXVECZ_^9NBw{EqzcBtw~c{!D(fn|~u_E)JBD bzeIc_J(9?oLl2G4kL(*w41L7l-@^X|DDGn1 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/discord/__pycache__/guild.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/discord/__pycache__/guild.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3de4f2a1a83300d533f8bbd205653fe0c1c6e7ee GIT binary patch literal 71766 zcmeIb34B~xS|3`wN+nsA*S6i;ZTDiU$5y-D%glJ(J*}2yx4LcF$a1^8W_n5`-I82# zE$UmPwxy9~m~k`H1Fv~AKwyA@5VEi&1enK8AcO(J43m%tgg_+(5_muZNeGXZh^L^j>&Ldm4)6Oa9F%=t^<`YC)G z=i;%LAIr!5xSy!R^KpD9D~W0{pNz-+l%KAos_A@Mt}~TPwI|;r*FBYNwKv~e&E<3Q zJ6q|i_UHTMy0@~WI*=cb>s)1Pbud3D*L{_3)$RH1a@}9qQQeu}Dc4(&XIFk#b$5QZ z{2r*>HpRNPR`yi)=J!_j<@Z%@&);6XBY#Kr&itL#yYhEc@6O*Xc?Thy2?r z`>Xfn@0IKAmHVpq=kJ&69hC>F2l5B12lEHz_s+^t^}+mua=okaj_RTOA-UdNIb0pi z56ks!m4~WF@<-%)Pvzn2(frYPtd#Wk`unaW@{i!^cK;4sJ$fqU-|64=YRtc@bkDV9 z{xLssJ~niB@tqjp+|;F#cV>LbJ6)bF)fy%5Abt$xa-;Rd<)A!&sp%b@9rBJIdHAuz zM~@sm;!PG87n>`&+__RvEjJqFdd(|0yi28^G_&l@2gO>mOz=&v~<#ioty8 zkk_nx#oDsBSPB|=p+3_rmTTqOyjRT4q8{dKUP3XA`dsr$F(@Ik?-d)3`fRy~@;tvj zyHqXJn#CsTn=4mJ4ewwR4c~uWzp;PlP!5&&rDDY^*HBu?GmpG0<>saOQqv1cjb>1u zWf_N%X|}TDvkm5PrCcqm8ghJHI^ST+mm25++j+>V*8TDvzf01s#if}_xpC=`=a*UZ z%u*9M8@wrFc_@c|JX8<7MyXO^31zff`Wm+Gkn|O`U~Evo9wMpt%B6ahJ;~XgV2I|H zf*PvCps>4j44KrpP?~M>4qHA~uT<(+*tOYu%`daRjbk~P=;BQMm6G&D&26pTL{n80 zI04cKHLLnj<5CfApDF19L%ro%j<-yA(7UCXMiUcX#@H{`1F5gQo5QI8nKAGD*^^Tj zM<&O-@$=rf$+ORopBOvg?H@Uh-}?`F7sscbIeTHsLypOjiK!R8vnRcgi5I=+#wSi3 z^2S~`H#v6xeD3U|H-6^a>G3h#8=n|Gec{CT#3}D-yf<+cU_1`^MWIt?JyxiT8Xr5) z!p@9Mjy{8uN1h%(JwEl~q1?&wsR@+nokXD{-no&>QA89 ziSdb(lc;6v%-F=#Flxm;Z|r&e@XkLoa{4r@%8gt=>nBmqq&Ir@+>4Xrr=FSeo;iE^ z#29WqJ%*NzJbijhRfSHCo*o%LbI3a}a%SWdTQ}*QMJbaxW>c;6ER4rn_MBrDMY_IxQQ&y{C|>YOgUQmVAJ zjMhQmYR!}7N)sL0HUa#J

  • {name}
  • j`l)=j@b=8+Z>=Ez9L-^VBu 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 UBVRN4d$jO1<9$0aWs_|GKjM3FfB*mh literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_routedef.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_routedef.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5d2b7f814816836c11fcbf5f6c22814a89a2e9c GIT binary patch literal 7731 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 M({I$a0nJ+f11Q|QAOHXW literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_runner.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_runner.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9a766a09524189f2af35064a0e2f8bc71e2e9de7 GIT binary patch literal 11715 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 SL9vNPHq06+J{?jsZR;PnW^Nz= literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_urldispatcher.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_urldispatcher.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6519e46ae6e72df38652f398c024d42f702ada3e GIT binary patch literal 41214 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 PaYu1fKCC*lb>#m8jgeZY literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_ws.cpython-36.pyc b/venv-linux/lib/python3.6/site-packages/aiohttp/__pycache__/web_ws.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46d3b4cab7822503ff00ccd4a0369ade1b1f03de GIT binary patch literal 12955 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 literal 0 HcmV?d00001 diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_cparser.pxd b/venv-linux/lib/python3.6/site-packages/aiohttp/_cparser.pxd new file mode 100644 index 0000000..0f9fc00 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_cparser.pxd @@ -0,0 +1,140 @@ +from libc.stdint cimport uint16_t, uint32_t, uint64_t + + +cdef extern from "../vendor/http-parser/http_parser.h": + ctypedef int (*http_data_cb) (http_parser*, + const char *at, + size_t length) except -1 + + ctypedef int (*http_cb) (http_parser*) except -1 + + struct http_parser: + unsigned int type + unsigned int flags + unsigned int state + unsigned int header_state + unsigned int index + + uint32_t nread + uint64_t content_length + + unsigned short http_major + unsigned short http_minor + unsigned int status_code + unsigned int method + unsigned int http_errno + + unsigned int upgrade + + void *data + + struct http_parser_settings: + http_cb on_message_begin + http_data_cb on_url + http_data_cb on_status + http_data_cb on_header_field + http_data_cb on_header_value + http_cb on_headers_complete + http_data_cb on_body + http_cb on_message_complete + http_cb on_chunk_header + http_cb on_chunk_complete + + enum http_parser_type: + HTTP_REQUEST, + HTTP_RESPONSE, + HTTP_BOTH + + enum http_errno: + HPE_OK, + HPE_CB_message_begin, + HPE_CB_url, + HPE_CB_header_field, + HPE_CB_header_value, + HPE_CB_headers_complete, + HPE_CB_body, + HPE_CB_message_complete, + HPE_CB_status, + HPE_CB_chunk_header, + HPE_CB_chunk_complete, + HPE_INVALID_EOF_STATE, + HPE_HEADER_OVERFLOW, + HPE_CLOSED_CONNECTION, + HPE_INVALID_VERSION, + HPE_INVALID_STATUS, + HPE_INVALID_METHOD, + HPE_INVALID_URL, + HPE_INVALID_HOST, + HPE_INVALID_PORT, + HPE_INVALID_PATH, + HPE_INVALID_QUERY_STRING, + HPE_INVALID_FRAGMENT, + HPE_LF_EXPECTED, + HPE_INVALID_HEADER_TOKEN, + HPE_INVALID_CONTENT_LENGTH, + HPE_INVALID_CHUNK_SIZE, + HPE_INVALID_CONSTANT, + HPE_INVALID_INTERNAL_STATE, + HPE_STRICT, + HPE_PAUSED, + HPE_UNKNOWN + + enum flags: + F_CHUNKED, + F_CONNECTION_KEEP_ALIVE, + F_CONNECTION_CLOSE, + F_CONNECTION_UPGRADE, + F_TRAILING, + F_UPGRADE, + F_SKIPBODY, + F_CONTENTLENGTH + + enum http_method: + DELETE, GET, HEAD, POST, PUT, CONNECT, OPTIONS, TRACE, COPY, + LOCK, MKCOL, MOVE, PROPFIND, PROPPATCH, SEARCH, UNLOCK, BIND, + REBIND, UNBIND, ACL, REPORT, MKACTIVITY, CHECKOUT, MERGE, + MSEARCH, NOTIFY, SUBSCRIBE, UNSUBSCRIBE, PATCH, PURGE, MKCALENDAR, + LINK, UNLINK + + void http_parser_init(http_parser *parser, http_parser_type type) + + size_t http_parser_execute(http_parser *parser, + const http_parser_settings *settings, + const char *data, + size_t len) + + int http_should_keep_alive(const http_parser *parser) + + void http_parser_settings_init(http_parser_settings *settings) + + const char *http_errno_name(http_errno err) + const char *http_errno_description(http_errno err) + const char *http_method_str(http_method m) + + # URL Parser + + enum http_parser_url_fields: + UF_SCHEMA = 0, + UF_HOST = 1, + UF_PORT = 2, + UF_PATH = 3, + UF_QUERY = 4, + UF_FRAGMENT = 5, + UF_USERINFO = 6, + UF_MAX = 7 + + struct http_parser_url_field_data: + uint16_t off + uint16_t len + + struct http_parser_url: + uint16_t field_set + uint16_t port + http_parser_url_field_data[UF_MAX] field_data + + void http_parser_url_init(http_parser_url *u) + + int http_parser_parse_url(const char *buf, + size_t buflen, + int is_connect, + http_parser_url *u) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_find_header.c b/venv-linux/lib/python3.6/site-packages/aiohttp/_find_header.c new file mode 100644 index 0000000..fbc6c4f --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_find_header.c @@ -0,0 +1,10000 @@ +/* The file is autogenerated from aiohttp/hdrs.py +Run ./tools/gen.py to update it after the origin changing. */ + +#include "_find_header.h" + +#define NEXT_CHAR() \ +{ \ + count++; \ + if (count == size) { \ + /* end of search */ \ + return -1; \ + } \ + pchar++; \ + ch = *pchar; \ + last = (count == size -1); \ +} while(0); + +int +find_header(const char *str, int size) +{ + char *pchar = str; + int last; + char ch; + int count = -1; + pchar--; + +INITIAL: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto A; + case 'a': + if (last) { + return -1; + } + goto A; + case 'C': + if (last) { + return -1; + } + goto C; + case 'c': + if (last) { + return -1; + } + goto C; + case 'D': + if (last) { + return -1; + } + goto D; + case 'd': + if (last) { + return -1; + } + goto D; + case 'E': + if (last) { + return -1; + } + goto E; + case 'e': + if (last) { + return -1; + } + goto E; + case 'F': + if (last) { + return -1; + } + goto F; + case 'f': + if (last) { + return -1; + } + goto F; + case 'H': + if (last) { + return -1; + } + goto H; + case 'h': + if (last) { + return -1; + } + goto H; + case 'I': + if (last) { + return -1; + } + goto I; + case 'i': + if (last) { + return -1; + } + goto I; + case 'K': + if (last) { + return -1; + } + goto K; + case 'k': + if (last) { + return -1; + } + goto K; + case 'L': + if (last) { + return -1; + } + goto L; + case 'l': + if (last) { + return -1; + } + goto L; + case 'M': + if (last) { + return -1; + } + goto M; + case 'm': + if (last) { + return -1; + } + goto M; + case 'O': + if (last) { + return -1; + } + goto O; + case 'o': + if (last) { + return -1; + } + goto O; + case 'P': + if (last) { + return -1; + } + goto P; + case 'p': + if (last) { + return -1; + } + goto P; + case 'R': + if (last) { + return -1; + } + goto R; + case 'r': + if (last) { + return -1; + } + goto R; + case 'S': + if (last) { + return -1; + } + goto S; + case 's': + if (last) { + return -1; + } + goto S; + case 'T': + if (last) { + return -1; + } + goto T; + case 't': + if (last) { + return -1; + } + goto T; + case 'U': + if (last) { + return -1; + } + goto U; + case 'u': + if (last) { + return -1; + } + goto U; + case 'V': + if (last) { + return -1; + } + goto V; + case 'v': + if (last) { + return -1; + } + goto V; + case 'W': + if (last) { + return -1; + } + goto W; + case 'w': + if (last) { + return -1; + } + goto W; + case 'X': + if (last) { + return -1; + } + goto X; + case 'x': + if (last) { + return -1; + } + goto X; + default: + return -1; + } + +A: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto AC; + case 'c': + if (last) { + return -1; + } + goto AC; + case 'G': + if (last) { + return -1; + } + goto AG; + case 'g': + if (last) { + return -1; + } + goto AG; + case 'L': + if (last) { + return -1; + } + goto AL; + case 'l': + if (last) { + return -1; + } + goto AL; + case 'U': + if (last) { + return -1; + } + goto AU; + case 'u': + if (last) { + return -1; + } + goto AU; + default: + return -1; + } + +AC: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto ACC; + case 'c': + if (last) { + return -1; + } + goto ACC; + default: + return -1; + } + +ACC: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCE; + case 'e': + if (last) { + return -1; + } + goto ACCE; + default: + return -1; + } + +ACCE: + NEXT_CHAR(); + switch (ch) { + case 'P': + if (last) { + return -1; + } + goto ACCEP; + case 'p': + if (last) { + return -1; + } + goto ACCEP; + case 'S': + if (last) { + return -1; + } + goto ACCES; + case 's': + if (last) { + return -1; + } + goto ACCES; + default: + return -1; + } + +ACCEP: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return 0; + } + goto ACCEPT; + case 't': + if (last) { + return 0; + } + goto ACCEPT; + default: + return -1; + } + +ACCEPT: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto ACCEPT_; + default: + return -1; + } + +ACCEPT_: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto ACCEPT_C; + case 'c': + if (last) { + return -1; + } + goto ACCEPT_C; + case 'E': + if (last) { + return -1; + } + goto ACCEPT_E; + case 'e': + if (last) { + return -1; + } + goto ACCEPT_E; + case 'L': + if (last) { + return -1; + } + goto ACCEPT_L; + case 'l': + if (last) { + return -1; + } + goto ACCEPT_L; + case 'R': + if (last) { + return -1; + } + goto ACCEPT_R; + case 'r': + if (last) { + return -1; + } + goto ACCEPT_R; + default: + return -1; + } + +ACCEPT_C: + NEXT_CHAR(); + switch (ch) { + case 'H': + if (last) { + return -1; + } + goto ACCEPT_CH; + case 'h': + if (last) { + return -1; + } + goto ACCEPT_CH; + default: + return -1; + } + +ACCEPT_CH: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto ACCEPT_CHA; + case 'a': + if (last) { + return -1; + } + goto ACCEPT_CHA; + default: + return -1; + } + +ACCEPT_CHA: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto ACCEPT_CHAR; + case 'r': + if (last) { + return -1; + } + goto ACCEPT_CHAR; + default: + return -1; + } + +ACCEPT_CHAR: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto ACCEPT_CHARS; + case 's': + if (last) { + return -1; + } + goto ACCEPT_CHARS; + default: + return -1; + } + +ACCEPT_CHARS: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCEPT_CHARSE; + case 'e': + if (last) { + return -1; + } + goto ACCEPT_CHARSE; + default: + return -1; + } + +ACCEPT_CHARSE: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return 1; + } + goto ACCEPT_CHARSET; + case 't': + if (last) { + return 1; + } + goto ACCEPT_CHARSET; + default: + return -1; + } + +ACCEPT_E: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto ACCEPT_EN; + case 'n': + if (last) { + return -1; + } + goto ACCEPT_EN; + default: + return -1; + } + +ACCEPT_EN: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto ACCEPT_ENC; + case 'c': + if (last) { + return -1; + } + goto ACCEPT_ENC; + default: + return -1; + } + +ACCEPT_ENC: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto ACCEPT_ENCO; + case 'o': + if (last) { + return -1; + } + goto ACCEPT_ENCO; + default: + return -1; + } + +ACCEPT_ENCO: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto ACCEPT_ENCOD; + case 'd': + if (last) { + return -1; + } + goto ACCEPT_ENCOD; + default: + return -1; + } + +ACCEPT_ENCOD: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto ACCEPT_ENCODI; + case 'i': + if (last) { + return -1; + } + goto ACCEPT_ENCODI; + default: + return -1; + } + +ACCEPT_ENCODI: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto ACCEPT_ENCODIN; + case 'n': + if (last) { + return -1; + } + goto ACCEPT_ENCODIN; + default: + return -1; + } + +ACCEPT_ENCODIN: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return 2; + } + goto ACCEPT_ENCODING; + case 'g': + if (last) { + return 2; + } + goto ACCEPT_ENCODING; + default: + return -1; + } + +ACCEPT_L: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto ACCEPT_LA; + case 'a': + if (last) { + return -1; + } + goto ACCEPT_LA; + default: + return -1; + } + +ACCEPT_LA: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto ACCEPT_LAN; + case 'n': + if (last) { + return -1; + } + goto ACCEPT_LAN; + default: + return -1; + } + +ACCEPT_LAN: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto ACCEPT_LANG; + case 'g': + if (last) { + return -1; + } + goto ACCEPT_LANG; + default: + return -1; + } + +ACCEPT_LANG: + NEXT_CHAR(); + switch (ch) { + case 'U': + if (last) { + return -1; + } + goto ACCEPT_LANGU; + case 'u': + if (last) { + return -1; + } + goto ACCEPT_LANGU; + default: + return -1; + } + +ACCEPT_LANGU: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto ACCEPT_LANGUA; + case 'a': + if (last) { + return -1; + } + goto ACCEPT_LANGUA; + default: + return -1; + } + +ACCEPT_LANGUA: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto ACCEPT_LANGUAG; + case 'g': + if (last) { + return -1; + } + goto ACCEPT_LANGUAG; + default: + return -1; + } + +ACCEPT_LANGUAG: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 3; + } + goto ACCEPT_LANGUAGE; + case 'e': + if (last) { + return 3; + } + goto ACCEPT_LANGUAGE; + default: + return -1; + } + +ACCEPT_R: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto ACCEPT_RA; + case 'a': + if (last) { + return -1; + } + goto ACCEPT_RA; + default: + return -1; + } + +ACCEPT_RA: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto ACCEPT_RAN; + case 'n': + if (last) { + return -1; + } + goto ACCEPT_RAN; + default: + return -1; + } + +ACCEPT_RAN: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto ACCEPT_RANG; + case 'g': + if (last) { + return -1; + } + goto ACCEPT_RANG; + default: + return -1; + } + +ACCEPT_RANG: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCEPT_RANGE; + case 'e': + if (last) { + return -1; + } + goto ACCEPT_RANGE; + default: + return -1; + } + +ACCEPT_RANGE: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return 4; + } + goto ACCEPT_RANGES; + case 's': + if (last) { + return 4; + } + goto ACCEPT_RANGES; + default: + return -1; + } + +ACCES: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto ACCESS; + case 's': + if (last) { + return -1; + } + goto ACCESS; + default: + return -1; + } + +ACCESS: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto ACCESS_; + default: + return -1; + } + +ACCESS_: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto ACCESS_C; + case 'c': + if (last) { + return -1; + } + goto ACCESS_C; + default: + return -1; + } + +ACCESS_C: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto ACCESS_CO; + case 'o': + if (last) { + return -1; + } + goto ACCESS_CO; + default: + return -1; + } + +ACCESS_CO: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto ACCESS_CON; + case 'n': + if (last) { + return -1; + } + goto ACCESS_CON; + default: + return -1; + } + +ACCESS_CON: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto ACCESS_CONT; + case 't': + if (last) { + return -1; + } + goto ACCESS_CONT; + default: + return -1; + } + +ACCESS_CONT: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto ACCESS_CONTR; + case 'r': + if (last) { + return -1; + } + goto ACCESS_CONTR; + default: + return -1; + } + +ACCESS_CONTR: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto ACCESS_CONTRO; + case 'o': + if (last) { + return -1; + } + goto ACCESS_CONTRO; + default: + return -1; + } + +ACCESS_CONTRO: + NEXT_CHAR(); + switch (ch) { + case 'L': + if (last) { + return -1; + } + goto ACCESS_CONTROL; + case 'l': + if (last) { + return -1; + } + goto ACCESS_CONTROL; + default: + return -1; + } + +ACCESS_CONTROL: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto ACCESS_CONTROL_; + default: + return -1; + } + +ACCESS_CONTROL_: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto ACCESS_CONTROL_A; + case 'a': + if (last) { + return -1; + } + goto ACCESS_CONTROL_A; + case 'E': + if (last) { + return -1; + } + goto ACCESS_CONTROL_E; + case 'e': + if (last) { + return -1; + } + goto ACCESS_CONTROL_E; + case 'M': + if (last) { + return -1; + } + goto ACCESS_CONTROL_M; + case 'm': + if (last) { + return -1; + } + goto ACCESS_CONTROL_M; + case 'R': + if (last) { + return -1; + } + goto ACCESS_CONTROL_R; + case 'r': + if (last) { + return -1; + } + goto ACCESS_CONTROL_R; + default: + return -1; + } + +ACCESS_CONTROL_A: + NEXT_CHAR(); + switch (ch) { + case 'L': + if (last) { + return -1; + } + goto ACCESS_CONTROL_AL; + case 'l': + if (last) { + return -1; + } + goto ACCESS_CONTROL_AL; + default: + return -1; + } + +ACCESS_CONTROL_AL: + NEXT_CHAR(); + switch (ch) { + case 'L': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALL; + case 'l': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALL; + default: + return -1; + } + +ACCESS_CONTROL_ALL: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLO; + case 'o': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLO; + default: + return -1; + } + +ACCESS_CONTROL_ALLO: + NEXT_CHAR(); + switch (ch) { + case 'W': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW; + case 'w': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_C; + case 'c': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_C; + case 'H': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_H; + case 'h': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_H; + case 'M': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_M; + case 'm': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_M; + case 'O': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_O; + case 'o': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_O; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_C: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CR; + case 'r': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CR; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_CR: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CRE; + case 'e': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CRE; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_CRE: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CRED; + case 'd': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CRED; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_CRED: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CREDE; + case 'e': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CREDE; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_CREDE: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CREDEN; + case 'n': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CREDEN; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_CREDEN: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CREDENT; + case 't': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CREDENT; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_CREDENT: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CREDENTI; + case 'i': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CREDENTI; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_CREDENTI: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CREDENTIA; + case 'a': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CREDENTIA; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_CREDENTIA: + NEXT_CHAR(); + switch (ch) { + case 'L': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CREDENTIAL; + case 'l': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_CREDENTIAL; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_CREDENTIAL: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return 5; + } + goto ACCESS_CONTROL_ALLOW_CREDENTIALS; + case 's': + if (last) { + return 5; + } + goto ACCESS_CONTROL_ALLOW_CREDENTIALS; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_H: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_HE; + case 'e': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_HE; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_HE: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_HEA; + case 'a': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_HEA; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_HEA: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_HEAD; + case 'd': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_HEAD; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_HEAD: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_HEADE; + case 'e': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_HEADE; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_HEADE: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_HEADER; + case 'r': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_HEADER; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_HEADER: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return 6; + } + goto ACCESS_CONTROL_ALLOW_HEADERS; + case 's': + if (last) { + return 6; + } + goto ACCESS_CONTROL_ALLOW_HEADERS; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_M: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_ME; + case 'e': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_ME; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_ME: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_MET; + case 't': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_MET; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_MET: + NEXT_CHAR(); + switch (ch) { + case 'H': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_METH; + case 'h': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_METH; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_METH: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_METHO; + case 'o': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_METHO; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_METHO: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_METHOD; + case 'd': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_METHOD; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_METHOD: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return 7; + } + goto ACCESS_CONTROL_ALLOW_METHODS; + case 's': + if (last) { + return 7; + } + goto ACCESS_CONTROL_ALLOW_METHODS; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_O: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_OR; + case 'r': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_OR; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_OR: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_ORI; + case 'i': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_ORI; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_ORI: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_ORIG; + case 'g': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_ORIG; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_ORIG: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_ORIGI; + case 'i': + if (last) { + return -1; + } + goto ACCESS_CONTROL_ALLOW_ORIGI; + default: + return -1; + } + +ACCESS_CONTROL_ALLOW_ORIGI: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return 8; + } + goto ACCESS_CONTROL_ALLOW_ORIGIN; + case 'n': + if (last) { + return 8; + } + goto ACCESS_CONTROL_ALLOW_ORIGIN; + default: + return -1; + } + +ACCESS_CONTROL_E: + NEXT_CHAR(); + switch (ch) { + case 'X': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EX; + case 'x': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EX; + default: + return -1; + } + +ACCESS_CONTROL_EX: + NEXT_CHAR(); + switch (ch) { + case 'P': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXP; + case 'p': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXP; + default: + return -1; + } + +ACCESS_CONTROL_EXP: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPO; + case 'o': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPO; + default: + return -1; + } + +ACCESS_CONTROL_EXPO: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOS; + case 's': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOS; + default: + return -1; + } + +ACCESS_CONTROL_EXPOS: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE; + case 'e': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE; + default: + return -1; + } + +ACCESS_CONTROL_EXPOSE: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE_; + default: + return -1; + } + +ACCESS_CONTROL_EXPOSE_: + NEXT_CHAR(); + switch (ch) { + case 'H': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE_H; + case 'h': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE_H; + default: + return -1; + } + +ACCESS_CONTROL_EXPOSE_H: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE_HE; + case 'e': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE_HE; + default: + return -1; + } + +ACCESS_CONTROL_EXPOSE_HE: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE_HEA; + case 'a': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE_HEA; + default: + return -1; + } + +ACCESS_CONTROL_EXPOSE_HEA: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE_HEAD; + case 'd': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE_HEAD; + default: + return -1; + } + +ACCESS_CONTROL_EXPOSE_HEAD: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE_HEADE; + case 'e': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE_HEADE; + default: + return -1; + } + +ACCESS_CONTROL_EXPOSE_HEADE: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE_HEADER; + case 'r': + if (last) { + return -1; + } + goto ACCESS_CONTROL_EXPOSE_HEADER; + default: + return -1; + } + +ACCESS_CONTROL_EXPOSE_HEADER: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return 9; + } + goto ACCESS_CONTROL_EXPOSE_HEADERS; + case 's': + if (last) { + return 9; + } + goto ACCESS_CONTROL_EXPOSE_HEADERS; + default: + return -1; + } + +ACCESS_CONTROL_M: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto ACCESS_CONTROL_MA; + case 'a': + if (last) { + return -1; + } + goto ACCESS_CONTROL_MA; + default: + return -1; + } + +ACCESS_CONTROL_MA: + NEXT_CHAR(); + switch (ch) { + case 'X': + if (last) { + return -1; + } + goto ACCESS_CONTROL_MAX; + case 'x': + if (last) { + return -1; + } + goto ACCESS_CONTROL_MAX; + default: + return -1; + } + +ACCESS_CONTROL_MAX: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto ACCESS_CONTROL_MAX_; + default: + return -1; + } + +ACCESS_CONTROL_MAX_: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto ACCESS_CONTROL_MAX_A; + case 'a': + if (last) { + return -1; + } + goto ACCESS_CONTROL_MAX_A; + default: + return -1; + } + +ACCESS_CONTROL_MAX_A: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto ACCESS_CONTROL_MAX_AG; + case 'g': + if (last) { + return -1; + } + goto ACCESS_CONTROL_MAX_AG; + default: + return -1; + } + +ACCESS_CONTROL_MAX_AG: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 10; + } + goto ACCESS_CONTROL_MAX_AGE; + case 'e': + if (last) { + return 10; + } + goto ACCESS_CONTROL_MAX_AGE; + default: + return -1; + } + +ACCESS_CONTROL_R: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCESS_CONTROL_RE; + case 'e': + if (last) { + return -1; + } + goto ACCESS_CONTROL_RE; + default: + return -1; + } + +ACCESS_CONTROL_RE: + NEXT_CHAR(); + switch (ch) { + case 'Q': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQ; + case 'q': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQ; + default: + return -1; + } + +ACCESS_CONTROL_REQ: + NEXT_CHAR(); + switch (ch) { + case 'U': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQU; + case 'u': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQU; + default: + return -1; + } + +ACCESS_CONTROL_REQU: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUE; + case 'e': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUE; + default: + return -1; + } + +ACCESS_CONTROL_REQUE: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUES; + case 's': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUES; + default: + return -1; + } + +ACCESS_CONTROL_REQUES: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST; + case 't': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST; + default: + return -1; + } + +ACCESS_CONTROL_REQUEST: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_; + default: + return -1; + } + +ACCESS_CONTROL_REQUEST_: + NEXT_CHAR(); + switch (ch) { + case 'H': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_H; + case 'h': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_H; + case 'M': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_M; + case 'm': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_M; + default: + return -1; + } + +ACCESS_CONTROL_REQUEST_H: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_HE; + case 'e': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_HE; + default: + return -1; + } + +ACCESS_CONTROL_REQUEST_HE: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_HEA; + case 'a': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_HEA; + default: + return -1; + } + +ACCESS_CONTROL_REQUEST_HEA: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_HEAD; + case 'd': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_HEAD; + default: + return -1; + } + +ACCESS_CONTROL_REQUEST_HEAD: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_HEADE; + case 'e': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_HEADE; + default: + return -1; + } + +ACCESS_CONTROL_REQUEST_HEADE: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_HEADER; + case 'r': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_HEADER; + default: + return -1; + } + +ACCESS_CONTROL_REQUEST_HEADER: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return 11; + } + goto ACCESS_CONTROL_REQUEST_HEADERS; + case 's': + if (last) { + return 11; + } + goto ACCESS_CONTROL_REQUEST_HEADERS; + default: + return -1; + } + +ACCESS_CONTROL_REQUEST_M: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_ME; + case 'e': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_ME; + default: + return -1; + } + +ACCESS_CONTROL_REQUEST_ME: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_MET; + case 't': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_MET; + default: + return -1; + } + +ACCESS_CONTROL_REQUEST_MET: + NEXT_CHAR(); + switch (ch) { + case 'H': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_METH; + case 'h': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_METH; + default: + return -1; + } + +ACCESS_CONTROL_REQUEST_METH: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_METHO; + case 'o': + if (last) { + return -1; + } + goto ACCESS_CONTROL_REQUEST_METHO; + default: + return -1; + } + +ACCESS_CONTROL_REQUEST_METHO: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return 12; + } + goto ACCESS_CONTROL_REQUEST_METHOD; + case 'd': + if (last) { + return 12; + } + goto ACCESS_CONTROL_REQUEST_METHOD; + default: + return -1; + } + +AG: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 13; + } + goto AGE; + case 'e': + if (last) { + return 13; + } + goto AGE; + default: + return -1; + } + +AL: + NEXT_CHAR(); + switch (ch) { + case 'L': + if (last) { + return -1; + } + goto ALL; + case 'l': + if (last) { + return -1; + } + goto ALL; + default: + return -1; + } + +ALL: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto ALLO; + case 'o': + if (last) { + return -1; + } + goto ALLO; + default: + return -1; + } + +ALLO: + NEXT_CHAR(); + switch (ch) { + case 'W': + if (last) { + return 14; + } + goto ALLOW; + case 'w': + if (last) { + return 14; + } + goto ALLOW; + default: + return -1; + } + +AU: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto AUT; + case 't': + if (last) { + return -1; + } + goto AUT; + default: + return -1; + } + +AUT: + NEXT_CHAR(); + switch (ch) { + case 'H': + if (last) { + return -1; + } + goto AUTH; + case 'h': + if (last) { + return -1; + } + goto AUTH; + default: + return -1; + } + +AUTH: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto AUTHO; + case 'o': + if (last) { + return -1; + } + goto AUTHO; + default: + return -1; + } + +AUTHO: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto AUTHOR; + case 'r': + if (last) { + return -1; + } + goto AUTHOR; + default: + return -1; + } + +AUTHOR: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto AUTHORI; + case 'i': + if (last) { + return -1; + } + goto AUTHORI; + default: + return -1; + } + +AUTHORI: + NEXT_CHAR(); + switch (ch) { + case 'Z': + if (last) { + return -1; + } + goto AUTHORIZ; + case 'z': + if (last) { + return -1; + } + goto AUTHORIZ; + default: + return -1; + } + +AUTHORIZ: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto AUTHORIZA; + case 'a': + if (last) { + return -1; + } + goto AUTHORIZA; + default: + return -1; + } + +AUTHORIZA: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto AUTHORIZAT; + case 't': + if (last) { + return -1; + } + goto AUTHORIZAT; + default: + return -1; + } + +AUTHORIZAT: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto AUTHORIZATI; + case 'i': + if (last) { + return -1; + } + goto AUTHORIZATI; + default: + return -1; + } + +AUTHORIZATI: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto AUTHORIZATIO; + case 'o': + if (last) { + return -1; + } + goto AUTHORIZATIO; + default: + return -1; + } + +AUTHORIZATIO: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return 15; + } + goto AUTHORIZATION; + case 'n': + if (last) { + return 15; + } + goto AUTHORIZATION; + default: + return -1; + } + +C: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto CA; + case 'a': + if (last) { + return -1; + } + goto CA; + case 'O': + if (last) { + return -1; + } + goto CO; + case 'o': + if (last) { + return -1; + } + goto CO; + default: + return -1; + } + +CA: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto CAC; + case 'c': + if (last) { + return -1; + } + goto CAC; + default: + return -1; + } + +CAC: + NEXT_CHAR(); + switch (ch) { + case 'H': + if (last) { + return -1; + } + goto CACH; + case 'h': + if (last) { + return -1; + } + goto CACH; + default: + return -1; + } + +CACH: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto CACHE; + case 'e': + if (last) { + return -1; + } + goto CACHE; + default: + return -1; + } + +CACHE: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto CACHE_; + default: + return -1; + } + +CACHE_: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto CACHE_C; + case 'c': + if (last) { + return -1; + } + goto CACHE_C; + default: + return -1; + } + +CACHE_C: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto CACHE_CO; + case 'o': + if (last) { + return -1; + } + goto CACHE_CO; + default: + return -1; + } + +CACHE_CO: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto CACHE_CON; + case 'n': + if (last) { + return -1; + } + goto CACHE_CON; + default: + return -1; + } + +CACHE_CON: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto CACHE_CONT; + case 't': + if (last) { + return -1; + } + goto CACHE_CONT; + default: + return -1; + } + +CACHE_CONT: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto CACHE_CONTR; + case 'r': + if (last) { + return -1; + } + goto CACHE_CONTR; + default: + return -1; + } + +CACHE_CONTR: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto CACHE_CONTRO; + case 'o': + if (last) { + return -1; + } + goto CACHE_CONTRO; + default: + return -1; + } + +CACHE_CONTRO: + NEXT_CHAR(); + switch (ch) { + case 'L': + if (last) { + return 16; + } + goto CACHE_CONTROL; + case 'l': + if (last) { + return 16; + } + goto CACHE_CONTROL; + default: + return -1; + } + +CO: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto CON; + case 'n': + if (last) { + return -1; + } + goto CON; + case 'O': + if (last) { + return -1; + } + goto COO; + case 'o': + if (last) { + return -1; + } + goto COO; + default: + return -1; + } + +CON: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto CONN; + case 'n': + if (last) { + return -1; + } + goto CONN; + case 'T': + if (last) { + return -1; + } + goto CONT; + case 't': + if (last) { + return -1; + } + goto CONT; + default: + return -1; + } + +CONN: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto CONNE; + case 'e': + if (last) { + return -1; + } + goto CONNE; + default: + return -1; + } + +CONNE: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto CONNEC; + case 'c': + if (last) { + return -1; + } + goto CONNEC; + default: + return -1; + } + +CONNEC: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto CONNECT; + case 't': + if (last) { + return -1; + } + goto CONNECT; + default: + return -1; + } + +CONNECT: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto CONNECTI; + case 'i': + if (last) { + return -1; + } + goto CONNECTI; + default: + return -1; + } + +CONNECTI: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto CONNECTIO; + case 'o': + if (last) { + return -1; + } + goto CONNECTIO; + default: + return -1; + } + +CONNECTIO: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return 17; + } + goto CONNECTION; + case 'n': + if (last) { + return 17; + } + goto CONNECTION; + default: + return -1; + } + +CONT: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto CONTE; + case 'e': + if (last) { + return -1; + } + goto CONTE; + default: + return -1; + } + +CONTE: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto CONTEN; + case 'n': + if (last) { + return -1; + } + goto CONTEN; + default: + return -1; + } + +CONTEN: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto CONTENT; + case 't': + if (last) { + return -1; + } + goto CONTENT; + default: + return -1; + } + +CONTENT: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto CONTENT_; + default: + return -1; + } + +CONTENT_: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto CONTENT_D; + case 'd': + if (last) { + return -1; + } + goto CONTENT_D; + case 'E': + if (last) { + return -1; + } + goto CONTENT_E; + case 'e': + if (last) { + return -1; + } + goto CONTENT_E; + case 'L': + if (last) { + return -1; + } + goto CONTENT_L; + case 'l': + if (last) { + return -1; + } + goto CONTENT_L; + case 'M': + if (last) { + return -1; + } + goto CONTENT_M; + case 'm': + if (last) { + return -1; + } + goto CONTENT_M; + case 'R': + if (last) { + return -1; + } + goto CONTENT_R; + case 'r': + if (last) { + return -1; + } + goto CONTENT_R; + case 'T': + if (last) { + return -1; + } + goto CONTENT_T; + case 't': + if (last) { + return -1; + } + goto CONTENT_T; + default: + return -1; + } + +CONTENT_D: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto CONTENT_DI; + case 'i': + if (last) { + return -1; + } + goto CONTENT_DI; + default: + return -1; + } + +CONTENT_DI: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto CONTENT_DIS; + case 's': + if (last) { + return -1; + } + goto CONTENT_DIS; + default: + return -1; + } + +CONTENT_DIS: + NEXT_CHAR(); + switch (ch) { + case 'P': + if (last) { + return -1; + } + goto CONTENT_DISP; + case 'p': + if (last) { + return -1; + } + goto CONTENT_DISP; + default: + return -1; + } + +CONTENT_DISP: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto CONTENT_DISPO; + case 'o': + if (last) { + return -1; + } + goto CONTENT_DISPO; + default: + return -1; + } + +CONTENT_DISPO: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto CONTENT_DISPOS; + case 's': + if (last) { + return -1; + } + goto CONTENT_DISPOS; + default: + return -1; + } + +CONTENT_DISPOS: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto CONTENT_DISPOSI; + case 'i': + if (last) { + return -1; + } + goto CONTENT_DISPOSI; + default: + return -1; + } + +CONTENT_DISPOSI: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto CONTENT_DISPOSIT; + case 't': + if (last) { + return -1; + } + goto CONTENT_DISPOSIT; + default: + return -1; + } + +CONTENT_DISPOSIT: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto CONTENT_DISPOSITI; + case 'i': + if (last) { + return -1; + } + goto CONTENT_DISPOSITI; + default: + return -1; + } + +CONTENT_DISPOSITI: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto CONTENT_DISPOSITIO; + case 'o': + if (last) { + return -1; + } + goto CONTENT_DISPOSITIO; + default: + return -1; + } + +CONTENT_DISPOSITIO: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return 18; + } + goto CONTENT_DISPOSITION; + case 'n': + if (last) { + return 18; + } + goto CONTENT_DISPOSITION; + default: + return -1; + } + +CONTENT_E: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto CONTENT_EN; + case 'n': + if (last) { + return -1; + } + goto CONTENT_EN; + default: + return -1; + } + +CONTENT_EN: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto CONTENT_ENC; + case 'c': + if (last) { + return -1; + } + goto CONTENT_ENC; + default: + return -1; + } + +CONTENT_ENC: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto CONTENT_ENCO; + case 'o': + if (last) { + return -1; + } + goto CONTENT_ENCO; + default: + return -1; + } + +CONTENT_ENCO: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto CONTENT_ENCOD; + case 'd': + if (last) { + return -1; + } + goto CONTENT_ENCOD; + default: + return -1; + } + +CONTENT_ENCOD: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto CONTENT_ENCODI; + case 'i': + if (last) { + return -1; + } + goto CONTENT_ENCODI; + default: + return -1; + } + +CONTENT_ENCODI: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto CONTENT_ENCODIN; + case 'n': + if (last) { + return -1; + } + goto CONTENT_ENCODIN; + default: + return -1; + } + +CONTENT_ENCODIN: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return 19; + } + goto CONTENT_ENCODING; + case 'g': + if (last) { + return 19; + } + goto CONTENT_ENCODING; + default: + return -1; + } + +CONTENT_L: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto CONTENT_LA; + case 'a': + if (last) { + return -1; + } + goto CONTENT_LA; + case 'E': + if (last) { + return -1; + } + goto CONTENT_LE; + case 'e': + if (last) { + return -1; + } + goto CONTENT_LE; + case 'O': + if (last) { + return -1; + } + goto CONTENT_LO; + case 'o': + if (last) { + return -1; + } + goto CONTENT_LO; + default: + return -1; + } + +CONTENT_LA: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto CONTENT_LAN; + case 'n': + if (last) { + return -1; + } + goto CONTENT_LAN; + default: + return -1; + } + +CONTENT_LAN: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto CONTENT_LANG; + case 'g': + if (last) { + return -1; + } + goto CONTENT_LANG; + default: + return -1; + } + +CONTENT_LANG: + NEXT_CHAR(); + switch (ch) { + case 'U': + if (last) { + return -1; + } + goto CONTENT_LANGU; + case 'u': + if (last) { + return -1; + } + goto CONTENT_LANGU; + default: + return -1; + } + +CONTENT_LANGU: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto CONTENT_LANGUA; + case 'a': + if (last) { + return -1; + } + goto CONTENT_LANGUA; + default: + return -1; + } + +CONTENT_LANGUA: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto CONTENT_LANGUAG; + case 'g': + if (last) { + return -1; + } + goto CONTENT_LANGUAG; + default: + return -1; + } + +CONTENT_LANGUAG: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 20; + } + goto CONTENT_LANGUAGE; + case 'e': + if (last) { + return 20; + } + goto CONTENT_LANGUAGE; + default: + return -1; + } + +CONTENT_LE: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto CONTENT_LEN; + case 'n': + if (last) { + return -1; + } + goto CONTENT_LEN; + default: + return -1; + } + +CONTENT_LEN: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto CONTENT_LENG; + case 'g': + if (last) { + return -1; + } + goto CONTENT_LENG; + default: + return -1; + } + +CONTENT_LENG: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto CONTENT_LENGT; + case 't': + if (last) { + return -1; + } + goto CONTENT_LENGT; + default: + return -1; + } + +CONTENT_LENGT: + NEXT_CHAR(); + switch (ch) { + case 'H': + if (last) { + return 21; + } + goto CONTENT_LENGTH; + case 'h': + if (last) { + return 21; + } + goto CONTENT_LENGTH; + default: + return -1; + } + +CONTENT_LO: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto CONTENT_LOC; + case 'c': + if (last) { + return -1; + } + goto CONTENT_LOC; + default: + return -1; + } + +CONTENT_LOC: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto CONTENT_LOCA; + case 'a': + if (last) { + return -1; + } + goto CONTENT_LOCA; + default: + return -1; + } + +CONTENT_LOCA: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto CONTENT_LOCAT; + case 't': + if (last) { + return -1; + } + goto CONTENT_LOCAT; + default: + return -1; + } + +CONTENT_LOCAT: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto CONTENT_LOCATI; + case 'i': + if (last) { + return -1; + } + goto CONTENT_LOCATI; + default: + return -1; + } + +CONTENT_LOCATI: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto CONTENT_LOCATIO; + case 'o': + if (last) { + return -1; + } + goto CONTENT_LOCATIO; + default: + return -1; + } + +CONTENT_LOCATIO: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return 22; + } + goto CONTENT_LOCATION; + case 'n': + if (last) { + return 22; + } + goto CONTENT_LOCATION; + default: + return -1; + } + +CONTENT_M: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto CONTENT_MD; + case 'd': + if (last) { + return -1; + } + goto CONTENT_MD; + default: + return -1; + } + +CONTENT_MD: + NEXT_CHAR(); + switch (ch) { + case '5': + if (last) { + return 23; + } + goto CONTENT_MD5; + default: + return -1; + } + +CONTENT_R: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto CONTENT_RA; + case 'a': + if (last) { + return -1; + } + goto CONTENT_RA; + default: + return -1; + } + +CONTENT_RA: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto CONTENT_RAN; + case 'n': + if (last) { + return -1; + } + goto CONTENT_RAN; + default: + return -1; + } + +CONTENT_RAN: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto CONTENT_RANG; + case 'g': + if (last) { + return -1; + } + goto CONTENT_RANG; + default: + return -1; + } + +CONTENT_RANG: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 24; + } + goto CONTENT_RANGE; + case 'e': + if (last) { + return 24; + } + goto CONTENT_RANGE; + default: + return -1; + } + +CONTENT_T: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto CONTENT_TR; + case 'r': + if (last) { + return -1; + } + goto CONTENT_TR; + case 'Y': + if (last) { + return -1; + } + goto CONTENT_TY; + case 'y': + if (last) { + return -1; + } + goto CONTENT_TY; + default: + return -1; + } + +CONTENT_TR: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto CONTENT_TRA; + case 'a': + if (last) { + return -1; + } + goto CONTENT_TRA; + default: + return -1; + } + +CONTENT_TRA: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto CONTENT_TRAN; + case 'n': + if (last) { + return -1; + } + goto CONTENT_TRAN; + default: + return -1; + } + +CONTENT_TRAN: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto CONTENT_TRANS; + case 's': + if (last) { + return -1; + } + goto CONTENT_TRANS; + default: + return -1; + } + +CONTENT_TRANS: + NEXT_CHAR(); + switch (ch) { + case 'F': + if (last) { + return -1; + } + goto CONTENT_TRANSF; + case 'f': + if (last) { + return -1; + } + goto CONTENT_TRANSF; + default: + return -1; + } + +CONTENT_TRANSF: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto CONTENT_TRANSFE; + case 'e': + if (last) { + return -1; + } + goto CONTENT_TRANSFE; + default: + return -1; + } + +CONTENT_TRANSFE: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto CONTENT_TRANSFER; + case 'r': + if (last) { + return -1; + } + goto CONTENT_TRANSFER; + default: + return -1; + } + +CONTENT_TRANSFER: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_; + default: + return -1; + } + +CONTENT_TRANSFER_: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_E; + case 'e': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_E; + default: + return -1; + } + +CONTENT_TRANSFER_E: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_EN; + case 'n': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_EN; + default: + return -1; + } + +CONTENT_TRANSFER_EN: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_ENC; + case 'c': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_ENC; + default: + return -1; + } + +CONTENT_TRANSFER_ENC: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_ENCO; + case 'o': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_ENCO; + default: + return -1; + } + +CONTENT_TRANSFER_ENCO: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_ENCOD; + case 'd': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_ENCOD; + default: + return -1; + } + +CONTENT_TRANSFER_ENCOD: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_ENCODI; + case 'i': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_ENCODI; + default: + return -1; + } + +CONTENT_TRANSFER_ENCODI: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_ENCODIN; + case 'n': + if (last) { + return -1; + } + goto CONTENT_TRANSFER_ENCODIN; + default: + return -1; + } + +CONTENT_TRANSFER_ENCODIN: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return 25; + } + goto CONTENT_TRANSFER_ENCODING; + case 'g': + if (last) { + return 25; + } + goto CONTENT_TRANSFER_ENCODING; + default: + return -1; + } + +CONTENT_TY: + NEXT_CHAR(); + switch (ch) { + case 'P': + if (last) { + return -1; + } + goto CONTENT_TYP; + case 'p': + if (last) { + return -1; + } + goto CONTENT_TYP; + default: + return -1; + } + +CONTENT_TYP: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 26; + } + goto CONTENT_TYPE; + case 'e': + if (last) { + return 26; + } + goto CONTENT_TYPE; + default: + return -1; + } + +COO: + NEXT_CHAR(); + switch (ch) { + case 'K': + if (last) { + return -1; + } + goto COOK; + case 'k': + if (last) { + return -1; + } + goto COOK; + default: + return -1; + } + +COOK: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto COOKI; + case 'i': + if (last) { + return -1; + } + goto COOKI; + default: + return -1; + } + +COOKI: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 27; + } + goto COOKIE; + case 'e': + if (last) { + return 27; + } + goto COOKIE; + default: + return -1; + } + +D: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto DA; + case 'a': + if (last) { + return -1; + } + goto DA; + case 'E': + if (last) { + return -1; + } + goto DE; + case 'e': + if (last) { + return -1; + } + goto DE; + case 'I': + if (last) { + return -1; + } + goto DI; + case 'i': + if (last) { + return -1; + } + goto DI; + default: + return -1; + } + +DA: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto DAT; + case 't': + if (last) { + return -1; + } + goto DAT; + default: + return -1; + } + +DAT: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 28; + } + goto DATE; + case 'e': + if (last) { + return 28; + } + goto DATE; + default: + return -1; + } + +DE: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto DES; + case 's': + if (last) { + return -1; + } + goto DES; + default: + return -1; + } + +DES: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto DEST; + case 't': + if (last) { + return -1; + } + goto DEST; + default: + return -1; + } + +DEST: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto DESTI; + case 'i': + if (last) { + return -1; + } + goto DESTI; + default: + return -1; + } + +DESTI: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto DESTIN; + case 'n': + if (last) { + return -1; + } + goto DESTIN; + default: + return -1; + } + +DESTIN: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto DESTINA; + case 'a': + if (last) { + return -1; + } + goto DESTINA; + default: + return -1; + } + +DESTINA: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto DESTINAT; + case 't': + if (last) { + return -1; + } + goto DESTINAT; + default: + return -1; + } + +DESTINAT: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto DESTINATI; + case 'i': + if (last) { + return -1; + } + goto DESTINATI; + default: + return -1; + } + +DESTINATI: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto DESTINATIO; + case 'o': + if (last) { + return -1; + } + goto DESTINATIO; + default: + return -1; + } + +DESTINATIO: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return 29; + } + goto DESTINATION; + case 'n': + if (last) { + return 29; + } + goto DESTINATION; + default: + return -1; + } + +DI: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto DIG; + case 'g': + if (last) { + return -1; + } + goto DIG; + default: + return -1; + } + +DIG: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto DIGE; + case 'e': + if (last) { + return -1; + } + goto DIGE; + default: + return -1; + } + +DIGE: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto DIGES; + case 's': + if (last) { + return -1; + } + goto DIGES; + default: + return -1; + } + +DIGES: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return 30; + } + goto DIGEST; + case 't': + if (last) { + return 30; + } + goto DIGEST; + default: + return -1; + } + +E: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto ET; + case 't': + if (last) { + return -1; + } + goto ET; + case 'X': + if (last) { + return -1; + } + goto EX; + case 'x': + if (last) { + return -1; + } + goto EX; + default: + return -1; + } + +ET: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto ETA; + case 'a': + if (last) { + return -1; + } + goto ETA; + default: + return -1; + } + +ETA: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return 31; + } + goto ETAG; + case 'g': + if (last) { + return 31; + } + goto ETAG; + default: + return -1; + } + +EX: + NEXT_CHAR(); + switch (ch) { + case 'P': + if (last) { + return -1; + } + goto EXP; + case 'p': + if (last) { + return -1; + } + goto EXP; + default: + return -1; + } + +EXP: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto EXPE; + case 'e': + if (last) { + return -1; + } + goto EXPE; + case 'I': + if (last) { + return -1; + } + goto EXPI; + case 'i': + if (last) { + return -1; + } + goto EXPI; + default: + return -1; + } + +EXPE: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto EXPEC; + case 'c': + if (last) { + return -1; + } + goto EXPEC; + default: + return -1; + } + +EXPEC: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return 32; + } + goto EXPECT; + case 't': + if (last) { + return 32; + } + goto EXPECT; + default: + return -1; + } + +EXPI: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto EXPIR; + case 'r': + if (last) { + return -1; + } + goto EXPIR; + default: + return -1; + } + +EXPIR: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto EXPIRE; + case 'e': + if (last) { + return -1; + } + goto EXPIRE; + default: + return -1; + } + +EXPIRE: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return 33; + } + goto EXPIRES; + case 's': + if (last) { + return 33; + } + goto EXPIRES; + default: + return -1; + } + +F: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto FO; + case 'o': + if (last) { + return -1; + } + goto FO; + case 'R': + if (last) { + return -1; + } + goto FR; + case 'r': + if (last) { + return -1; + } + goto FR; + default: + return -1; + } + +FO: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto FOR; + case 'r': + if (last) { + return -1; + } + goto FOR; + default: + return -1; + } + +FOR: + NEXT_CHAR(); + switch (ch) { + case 'W': + if (last) { + return -1; + } + goto FORW; + case 'w': + if (last) { + return -1; + } + goto FORW; + default: + return -1; + } + +FORW: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto FORWA; + case 'a': + if (last) { + return -1; + } + goto FORWA; + default: + return -1; + } + +FORWA: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto FORWAR; + case 'r': + if (last) { + return -1; + } + goto FORWAR; + default: + return -1; + } + +FORWAR: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto FORWARD; + case 'd': + if (last) { + return -1; + } + goto FORWARD; + default: + return -1; + } + +FORWARD: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto FORWARDE; + case 'e': + if (last) { + return -1; + } + goto FORWARDE; + default: + return -1; + } + +FORWARDE: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return 34; + } + goto FORWARDED; + case 'd': + if (last) { + return 34; + } + goto FORWARDED; + default: + return -1; + } + +FR: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto FRO; + case 'o': + if (last) { + return -1; + } + goto FRO; + default: + return -1; + } + +FRO: + NEXT_CHAR(); + switch (ch) { + case 'M': + if (last) { + return 35; + } + goto FROM; + case 'm': + if (last) { + return 35; + } + goto FROM; + default: + return -1; + } + +H: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto HO; + case 'o': + if (last) { + return -1; + } + goto HO; + default: + return -1; + } + +HO: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto HOS; + case 's': + if (last) { + return -1; + } + goto HOS; + default: + return -1; + } + +HOS: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return 36; + } + goto HOST; + case 't': + if (last) { + return 36; + } + goto HOST; + default: + return -1; + } + +I: + NEXT_CHAR(); + switch (ch) { + case 'F': + if (last) { + return -1; + } + goto IF; + case 'f': + if (last) { + return -1; + } + goto IF; + default: + return -1; + } + +IF: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto IF_; + default: + return -1; + } + +IF_: + NEXT_CHAR(); + switch (ch) { + case 'M': + if (last) { + return -1; + } + goto IF_M; + case 'm': + if (last) { + return -1; + } + goto IF_M; + case 'N': + if (last) { + return -1; + } + goto IF_N; + case 'n': + if (last) { + return -1; + } + goto IF_N; + case 'R': + if (last) { + return -1; + } + goto IF_R; + case 'r': + if (last) { + return -1; + } + goto IF_R; + case 'U': + if (last) { + return -1; + } + goto IF_U; + case 'u': + if (last) { + return -1; + } + goto IF_U; + default: + return -1; + } + +IF_M: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto IF_MA; + case 'a': + if (last) { + return -1; + } + goto IF_MA; + case 'O': + if (last) { + return -1; + } + goto IF_MO; + case 'o': + if (last) { + return -1; + } + goto IF_MO; + default: + return -1; + } + +IF_MA: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto IF_MAT; + case 't': + if (last) { + return -1; + } + goto IF_MAT; + default: + return -1; + } + +IF_MAT: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto IF_MATC; + case 'c': + if (last) { + return -1; + } + goto IF_MATC; + default: + return -1; + } + +IF_MATC: + NEXT_CHAR(); + switch (ch) { + case 'H': + if (last) { + return 37; + } + goto IF_MATCH; + case 'h': + if (last) { + return 37; + } + goto IF_MATCH; + default: + return -1; + } + +IF_MO: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto IF_MOD; + case 'd': + if (last) { + return -1; + } + goto IF_MOD; + default: + return -1; + } + +IF_MOD: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto IF_MODI; + case 'i': + if (last) { + return -1; + } + goto IF_MODI; + default: + return -1; + } + +IF_MODI: + NEXT_CHAR(); + switch (ch) { + case 'F': + if (last) { + return -1; + } + goto IF_MODIF; + case 'f': + if (last) { + return -1; + } + goto IF_MODIF; + default: + return -1; + } + +IF_MODIF: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto IF_MODIFI; + case 'i': + if (last) { + return -1; + } + goto IF_MODIFI; + default: + return -1; + } + +IF_MODIFI: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto IF_MODIFIE; + case 'e': + if (last) { + return -1; + } + goto IF_MODIFIE; + default: + return -1; + } + +IF_MODIFIE: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto IF_MODIFIED; + case 'd': + if (last) { + return -1; + } + goto IF_MODIFIED; + default: + return -1; + } + +IF_MODIFIED: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto IF_MODIFIED_; + default: + return -1; + } + +IF_MODIFIED_: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto IF_MODIFIED_S; + case 's': + if (last) { + return -1; + } + goto IF_MODIFIED_S; + default: + return -1; + } + +IF_MODIFIED_S: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto IF_MODIFIED_SI; + case 'i': + if (last) { + return -1; + } + goto IF_MODIFIED_SI; + default: + return -1; + } + +IF_MODIFIED_SI: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto IF_MODIFIED_SIN; + case 'n': + if (last) { + return -1; + } + goto IF_MODIFIED_SIN; + default: + return -1; + } + +IF_MODIFIED_SIN: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto IF_MODIFIED_SINC; + case 'c': + if (last) { + return -1; + } + goto IF_MODIFIED_SINC; + default: + return -1; + } + +IF_MODIFIED_SINC: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 38; + } + goto IF_MODIFIED_SINCE; + case 'e': + if (last) { + return 38; + } + goto IF_MODIFIED_SINCE; + default: + return -1; + } + +IF_N: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto IF_NO; + case 'o': + if (last) { + return -1; + } + goto IF_NO; + default: + return -1; + } + +IF_NO: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto IF_NON; + case 'n': + if (last) { + return -1; + } + goto IF_NON; + default: + return -1; + } + +IF_NON: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto IF_NONE; + case 'e': + if (last) { + return -1; + } + goto IF_NONE; + default: + return -1; + } + +IF_NONE: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto IF_NONE_; + default: + return -1; + } + +IF_NONE_: + NEXT_CHAR(); + switch (ch) { + case 'M': + if (last) { + return -1; + } + goto IF_NONE_M; + case 'm': + if (last) { + return -1; + } + goto IF_NONE_M; + default: + return -1; + } + +IF_NONE_M: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto IF_NONE_MA; + case 'a': + if (last) { + return -1; + } + goto IF_NONE_MA; + default: + return -1; + } + +IF_NONE_MA: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto IF_NONE_MAT; + case 't': + if (last) { + return -1; + } + goto IF_NONE_MAT; + default: + return -1; + } + +IF_NONE_MAT: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto IF_NONE_MATC; + case 'c': + if (last) { + return -1; + } + goto IF_NONE_MATC; + default: + return -1; + } + +IF_NONE_MATC: + NEXT_CHAR(); + switch (ch) { + case 'H': + if (last) { + return 39; + } + goto IF_NONE_MATCH; + case 'h': + if (last) { + return 39; + } + goto IF_NONE_MATCH; + default: + return -1; + } + +IF_R: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto IF_RA; + case 'a': + if (last) { + return -1; + } + goto IF_RA; + default: + return -1; + } + +IF_RA: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto IF_RAN; + case 'n': + if (last) { + return -1; + } + goto IF_RAN; + default: + return -1; + } + +IF_RAN: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto IF_RANG; + case 'g': + if (last) { + return -1; + } + goto IF_RANG; + default: + return -1; + } + +IF_RANG: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 40; + } + goto IF_RANGE; + case 'e': + if (last) { + return 40; + } + goto IF_RANGE; + default: + return -1; + } + +IF_U: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto IF_UN; + case 'n': + if (last) { + return -1; + } + goto IF_UN; + default: + return -1; + } + +IF_UN: + NEXT_CHAR(); + switch (ch) { + case 'M': + if (last) { + return -1; + } + goto IF_UNM; + case 'm': + if (last) { + return -1; + } + goto IF_UNM; + default: + return -1; + } + +IF_UNM: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto IF_UNMO; + case 'o': + if (last) { + return -1; + } + goto IF_UNMO; + default: + return -1; + } + +IF_UNMO: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto IF_UNMOD; + case 'd': + if (last) { + return -1; + } + goto IF_UNMOD; + default: + return -1; + } + +IF_UNMOD: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto IF_UNMODI; + case 'i': + if (last) { + return -1; + } + goto IF_UNMODI; + default: + return -1; + } + +IF_UNMODI: + NEXT_CHAR(); + switch (ch) { + case 'F': + if (last) { + return -1; + } + goto IF_UNMODIF; + case 'f': + if (last) { + return -1; + } + goto IF_UNMODIF; + default: + return -1; + } + +IF_UNMODIF: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto IF_UNMODIFI; + case 'i': + if (last) { + return -1; + } + goto IF_UNMODIFI; + default: + return -1; + } + +IF_UNMODIFI: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto IF_UNMODIFIE; + case 'e': + if (last) { + return -1; + } + goto IF_UNMODIFIE; + default: + return -1; + } + +IF_UNMODIFIE: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto IF_UNMODIFIED; + case 'd': + if (last) { + return -1; + } + goto IF_UNMODIFIED; + default: + return -1; + } + +IF_UNMODIFIED: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto IF_UNMODIFIED_; + default: + return -1; + } + +IF_UNMODIFIED_: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto IF_UNMODIFIED_S; + case 's': + if (last) { + return -1; + } + goto IF_UNMODIFIED_S; + default: + return -1; + } + +IF_UNMODIFIED_S: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto IF_UNMODIFIED_SI; + case 'i': + if (last) { + return -1; + } + goto IF_UNMODIFIED_SI; + default: + return -1; + } + +IF_UNMODIFIED_SI: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto IF_UNMODIFIED_SIN; + case 'n': + if (last) { + return -1; + } + goto IF_UNMODIFIED_SIN; + default: + return -1; + } + +IF_UNMODIFIED_SIN: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto IF_UNMODIFIED_SINC; + case 'c': + if (last) { + return -1; + } + goto IF_UNMODIFIED_SINC; + default: + return -1; + } + +IF_UNMODIFIED_SINC: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 41; + } + goto IF_UNMODIFIED_SINCE; + case 'e': + if (last) { + return 41; + } + goto IF_UNMODIFIED_SINCE; + default: + return -1; + } + +K: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto KE; + case 'e': + if (last) { + return -1; + } + goto KE; + default: + return -1; + } + +KE: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto KEE; + case 'e': + if (last) { + return -1; + } + goto KEE; + default: + return -1; + } + +KEE: + NEXT_CHAR(); + switch (ch) { + case 'P': + if (last) { + return -1; + } + goto KEEP; + case 'p': + if (last) { + return -1; + } + goto KEEP; + default: + return -1; + } + +KEEP: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto KEEP_; + default: + return -1; + } + +KEEP_: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto KEEP_A; + case 'a': + if (last) { + return -1; + } + goto KEEP_A; + default: + return -1; + } + +KEEP_A: + NEXT_CHAR(); + switch (ch) { + case 'L': + if (last) { + return -1; + } + goto KEEP_AL; + case 'l': + if (last) { + return -1; + } + goto KEEP_AL; + default: + return -1; + } + +KEEP_AL: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto KEEP_ALI; + case 'i': + if (last) { + return -1; + } + goto KEEP_ALI; + default: + return -1; + } + +KEEP_ALI: + NEXT_CHAR(); + switch (ch) { + case 'V': + if (last) { + return -1; + } + goto KEEP_ALIV; + case 'v': + if (last) { + return -1; + } + goto KEEP_ALIV; + default: + return -1; + } + +KEEP_ALIV: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 42; + } + goto KEEP_ALIVE; + case 'e': + if (last) { + return 42; + } + goto KEEP_ALIVE; + default: + return -1; + } + +L: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto LA; + case 'a': + if (last) { + return -1; + } + goto LA; + case 'I': + if (last) { + return -1; + } + goto LI; + case 'i': + if (last) { + return -1; + } + goto LI; + case 'O': + if (last) { + return -1; + } + goto LO; + case 'o': + if (last) { + return -1; + } + goto LO; + default: + return -1; + } + +LA: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto LAS; + case 's': + if (last) { + return -1; + } + goto LAS; + default: + return -1; + } + +LAS: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto LAST; + case 't': + if (last) { + return -1; + } + goto LAST; + default: + return -1; + } + +LAST: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto LAST_; + default: + return -1; + } + +LAST_: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto LAST_E; + case 'e': + if (last) { + return -1; + } + goto LAST_E; + case 'M': + if (last) { + return -1; + } + goto LAST_M; + case 'm': + if (last) { + return -1; + } + goto LAST_M; + default: + return -1; + } + +LAST_E: + NEXT_CHAR(); + switch (ch) { + case 'V': + if (last) { + return -1; + } + goto LAST_EV; + case 'v': + if (last) { + return -1; + } + goto LAST_EV; + default: + return -1; + } + +LAST_EV: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto LAST_EVE; + case 'e': + if (last) { + return -1; + } + goto LAST_EVE; + default: + return -1; + } + +LAST_EVE: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto LAST_EVEN; + case 'n': + if (last) { + return -1; + } + goto LAST_EVEN; + default: + return -1; + } + +LAST_EVEN: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto LAST_EVENT; + case 't': + if (last) { + return -1; + } + goto LAST_EVENT; + default: + return -1; + } + +LAST_EVENT: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto LAST_EVENT_; + default: + return -1; + } + +LAST_EVENT_: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto LAST_EVENT_I; + case 'i': + if (last) { + return -1; + } + goto LAST_EVENT_I; + default: + return -1; + } + +LAST_EVENT_I: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return 43; + } + goto LAST_EVENT_ID; + case 'd': + if (last) { + return 43; + } + goto LAST_EVENT_ID; + default: + return -1; + } + +LAST_M: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto LAST_MO; + case 'o': + if (last) { + return -1; + } + goto LAST_MO; + default: + return -1; + } + +LAST_MO: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto LAST_MOD; + case 'd': + if (last) { + return -1; + } + goto LAST_MOD; + default: + return -1; + } + +LAST_MOD: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto LAST_MODI; + case 'i': + if (last) { + return -1; + } + goto LAST_MODI; + default: + return -1; + } + +LAST_MODI: + NEXT_CHAR(); + switch (ch) { + case 'F': + if (last) { + return -1; + } + goto LAST_MODIF; + case 'f': + if (last) { + return -1; + } + goto LAST_MODIF; + default: + return -1; + } + +LAST_MODIF: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto LAST_MODIFI; + case 'i': + if (last) { + return -1; + } + goto LAST_MODIFI; + default: + return -1; + } + +LAST_MODIFI: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto LAST_MODIFIE; + case 'e': + if (last) { + return -1; + } + goto LAST_MODIFIE; + default: + return -1; + } + +LAST_MODIFIE: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return 44; + } + goto LAST_MODIFIED; + case 'd': + if (last) { + return 44; + } + goto LAST_MODIFIED; + default: + return -1; + } + +LI: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto LIN; + case 'n': + if (last) { + return -1; + } + goto LIN; + default: + return -1; + } + +LIN: + NEXT_CHAR(); + switch (ch) { + case 'K': + if (last) { + return 45; + } + goto LINK; + case 'k': + if (last) { + return 45; + } + goto LINK; + default: + return -1; + } + +LO: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto LOC; + case 'c': + if (last) { + return -1; + } + goto LOC; + default: + return -1; + } + +LOC: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto LOCA; + case 'a': + if (last) { + return -1; + } + goto LOCA; + default: + return -1; + } + +LOCA: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto LOCAT; + case 't': + if (last) { + return -1; + } + goto LOCAT; + default: + return -1; + } + +LOCAT: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto LOCATI; + case 'i': + if (last) { + return -1; + } + goto LOCATI; + default: + return -1; + } + +LOCATI: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto LOCATIO; + case 'o': + if (last) { + return -1; + } + goto LOCATIO; + default: + return -1; + } + +LOCATIO: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return 46; + } + goto LOCATION; + case 'n': + if (last) { + return 46; + } + goto LOCATION; + default: + return -1; + } + +M: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto MA; + case 'a': + if (last) { + return -1; + } + goto MA; + default: + return -1; + } + +MA: + NEXT_CHAR(); + switch (ch) { + case 'X': + if (last) { + return -1; + } + goto MAX; + case 'x': + if (last) { + return -1; + } + goto MAX; + default: + return -1; + } + +MAX: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto MAX_; + default: + return -1; + } + +MAX_: + NEXT_CHAR(); + switch (ch) { + case 'F': + if (last) { + return -1; + } + goto MAX_F; + case 'f': + if (last) { + return -1; + } + goto MAX_F; + default: + return -1; + } + +MAX_F: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto MAX_FO; + case 'o': + if (last) { + return -1; + } + goto MAX_FO; + default: + return -1; + } + +MAX_FO: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto MAX_FOR; + case 'r': + if (last) { + return -1; + } + goto MAX_FOR; + default: + return -1; + } + +MAX_FOR: + NEXT_CHAR(); + switch (ch) { + case 'W': + if (last) { + return -1; + } + goto MAX_FORW; + case 'w': + if (last) { + return -1; + } + goto MAX_FORW; + default: + return -1; + } + +MAX_FORW: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto MAX_FORWA; + case 'a': + if (last) { + return -1; + } + goto MAX_FORWA; + default: + return -1; + } + +MAX_FORWA: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto MAX_FORWAR; + case 'r': + if (last) { + return -1; + } + goto MAX_FORWAR; + default: + return -1; + } + +MAX_FORWAR: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto MAX_FORWARD; + case 'd': + if (last) { + return -1; + } + goto MAX_FORWARD; + default: + return -1; + } + +MAX_FORWARD: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return 47; + } + goto MAX_FORWARDS; + case 's': + if (last) { + return 47; + } + goto MAX_FORWARDS; + default: + return -1; + } + +O: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto OR; + case 'r': + if (last) { + return -1; + } + goto OR; + default: + return -1; + } + +OR: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto ORI; + case 'i': + if (last) { + return -1; + } + goto ORI; + default: + return -1; + } + +ORI: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto ORIG; + case 'g': + if (last) { + return -1; + } + goto ORIG; + default: + return -1; + } + +ORIG: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto ORIGI; + case 'i': + if (last) { + return -1; + } + goto ORIGI; + default: + return -1; + } + +ORIGI: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return 48; + } + goto ORIGIN; + case 'n': + if (last) { + return 48; + } + goto ORIGIN; + default: + return -1; + } + +P: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto PR; + case 'r': + if (last) { + return -1; + } + goto PR; + default: + return -1; + } + +PR: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto PRA; + case 'a': + if (last) { + return -1; + } + goto PRA; + case 'O': + if (last) { + return -1; + } + goto PRO; + case 'o': + if (last) { + return -1; + } + goto PRO; + default: + return -1; + } + +PRA: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto PRAG; + case 'g': + if (last) { + return -1; + } + goto PRAG; + default: + return -1; + } + +PRAG: + NEXT_CHAR(); + switch (ch) { + case 'M': + if (last) { + return -1; + } + goto PRAGM; + case 'm': + if (last) { + return -1; + } + goto PRAGM; + default: + return -1; + } + +PRAGM: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return 49; + } + goto PRAGMA; + case 'a': + if (last) { + return 49; + } + goto PRAGMA; + default: + return -1; + } + +PRO: + NEXT_CHAR(); + switch (ch) { + case 'X': + if (last) { + return -1; + } + goto PROX; + case 'x': + if (last) { + return -1; + } + goto PROX; + default: + return -1; + } + +PROX: + NEXT_CHAR(); + switch (ch) { + case 'Y': + if (last) { + return -1; + } + goto PROXY; + case 'y': + if (last) { + return -1; + } + goto PROXY; + default: + return -1; + } + +PROXY: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto PROXY_; + default: + return -1; + } + +PROXY_: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto PROXY_A; + case 'a': + if (last) { + return -1; + } + goto PROXY_A; + default: + return -1; + } + +PROXY_A: + NEXT_CHAR(); + switch (ch) { + case 'U': + if (last) { + return -1; + } + goto PROXY_AU; + case 'u': + if (last) { + return -1; + } + goto PROXY_AU; + default: + return -1; + } + +PROXY_AU: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto PROXY_AUT; + case 't': + if (last) { + return -1; + } + goto PROXY_AUT; + default: + return -1; + } + +PROXY_AUT: + NEXT_CHAR(); + switch (ch) { + case 'H': + if (last) { + return -1; + } + goto PROXY_AUTH; + case 'h': + if (last) { + return -1; + } + goto PROXY_AUTH; + default: + return -1; + } + +PROXY_AUTH: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto PROXY_AUTHE; + case 'e': + if (last) { + return -1; + } + goto PROXY_AUTHE; + case 'O': + if (last) { + return -1; + } + goto PROXY_AUTHO; + case 'o': + if (last) { + return -1; + } + goto PROXY_AUTHO; + default: + return -1; + } + +PROXY_AUTHE: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto PROXY_AUTHEN; + case 'n': + if (last) { + return -1; + } + goto PROXY_AUTHEN; + default: + return -1; + } + +PROXY_AUTHEN: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto PROXY_AUTHENT; + case 't': + if (last) { + return -1; + } + goto PROXY_AUTHENT; + default: + return -1; + } + +PROXY_AUTHENT: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto PROXY_AUTHENTI; + case 'i': + if (last) { + return -1; + } + goto PROXY_AUTHENTI; + default: + return -1; + } + +PROXY_AUTHENTI: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto PROXY_AUTHENTIC; + case 'c': + if (last) { + return -1; + } + goto PROXY_AUTHENTIC; + default: + return -1; + } + +PROXY_AUTHENTIC: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto PROXY_AUTHENTICA; + case 'a': + if (last) { + return -1; + } + goto PROXY_AUTHENTICA; + default: + return -1; + } + +PROXY_AUTHENTICA: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto PROXY_AUTHENTICAT; + case 't': + if (last) { + return -1; + } + goto PROXY_AUTHENTICAT; + default: + return -1; + } + +PROXY_AUTHENTICAT: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 50; + } + goto PROXY_AUTHENTICATE; + case 'e': + if (last) { + return 50; + } + goto PROXY_AUTHENTICATE; + default: + return -1; + } + +PROXY_AUTHO: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto PROXY_AUTHOR; + case 'r': + if (last) { + return -1; + } + goto PROXY_AUTHOR; + default: + return -1; + } + +PROXY_AUTHOR: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto PROXY_AUTHORI; + case 'i': + if (last) { + return -1; + } + goto PROXY_AUTHORI; + default: + return -1; + } + +PROXY_AUTHORI: + NEXT_CHAR(); + switch (ch) { + case 'Z': + if (last) { + return -1; + } + goto PROXY_AUTHORIZ; + case 'z': + if (last) { + return -1; + } + goto PROXY_AUTHORIZ; + default: + return -1; + } + +PROXY_AUTHORIZ: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto PROXY_AUTHORIZA; + case 'a': + if (last) { + return -1; + } + goto PROXY_AUTHORIZA; + default: + return -1; + } + +PROXY_AUTHORIZA: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto PROXY_AUTHORIZAT; + case 't': + if (last) { + return -1; + } + goto PROXY_AUTHORIZAT; + default: + return -1; + } + +PROXY_AUTHORIZAT: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto PROXY_AUTHORIZATI; + case 'i': + if (last) { + return -1; + } + goto PROXY_AUTHORIZATI; + default: + return -1; + } + +PROXY_AUTHORIZATI: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto PROXY_AUTHORIZATIO; + case 'o': + if (last) { + return -1; + } + goto PROXY_AUTHORIZATIO; + default: + return -1; + } + +PROXY_AUTHORIZATIO: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return 51; + } + goto PROXY_AUTHORIZATION; + case 'n': + if (last) { + return 51; + } + goto PROXY_AUTHORIZATION; + default: + return -1; + } + +R: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto RA; + case 'a': + if (last) { + return -1; + } + goto RA; + case 'E': + if (last) { + return -1; + } + goto RE; + case 'e': + if (last) { + return -1; + } + goto RE; + default: + return -1; + } + +RA: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto RAN; + case 'n': + if (last) { + return -1; + } + goto RAN; + default: + return -1; + } + +RAN: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto RANG; + case 'g': + if (last) { + return -1; + } + goto RANG; + default: + return -1; + } + +RANG: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 52; + } + goto RANGE; + case 'e': + if (last) { + return 52; + } + goto RANGE; + default: + return -1; + } + +RE: + NEXT_CHAR(); + switch (ch) { + case 'F': + if (last) { + return -1; + } + goto REF; + case 'f': + if (last) { + return -1; + } + goto REF; + case 'T': + if (last) { + return -1; + } + goto RET; + case 't': + if (last) { + return -1; + } + goto RET; + default: + return -1; + } + +REF: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto REFE; + case 'e': + if (last) { + return -1; + } + goto REFE; + default: + return -1; + } + +REFE: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto REFER; + case 'r': + if (last) { + return -1; + } + goto REFER; + default: + return -1; + } + +REFER: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto REFERE; + case 'e': + if (last) { + return -1; + } + goto REFERE; + default: + return -1; + } + +REFERE: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return 53; + } + goto REFERER; + case 'r': + if (last) { + return 53; + } + goto REFERER; + default: + return -1; + } + +RET: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto RETR; + case 'r': + if (last) { + return -1; + } + goto RETR; + default: + return -1; + } + +RETR: + NEXT_CHAR(); + switch (ch) { + case 'Y': + if (last) { + return -1; + } + goto RETRY; + case 'y': + if (last) { + return -1; + } + goto RETRY; + default: + return -1; + } + +RETRY: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto RETRY_; + default: + return -1; + } + +RETRY_: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto RETRY_A; + case 'a': + if (last) { + return -1; + } + goto RETRY_A; + default: + return -1; + } + +RETRY_A: + NEXT_CHAR(); + switch (ch) { + case 'F': + if (last) { + return -1; + } + goto RETRY_AF; + case 'f': + if (last) { + return -1; + } + goto RETRY_AF; + default: + return -1; + } + +RETRY_AF: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto RETRY_AFT; + case 't': + if (last) { + return -1; + } + goto RETRY_AFT; + default: + return -1; + } + +RETRY_AFT: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto RETRY_AFTE; + case 'e': + if (last) { + return -1; + } + goto RETRY_AFTE; + default: + return -1; + } + +RETRY_AFTE: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return 54; + } + goto RETRY_AFTER; + case 'r': + if (last) { + return 54; + } + goto RETRY_AFTER; + default: + return -1; + } + +S: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto SE; + case 'e': + if (last) { + return -1; + } + goto SE; + default: + return -1; + } + +SE: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto SEC; + case 'c': + if (last) { + return -1; + } + goto SEC; + case 'R': + if (last) { + return -1; + } + goto SER; + case 'r': + if (last) { + return -1; + } + goto SER; + case 'T': + if (last) { + return -1; + } + goto SET; + case 't': + if (last) { + return -1; + } + goto SET; + default: + return -1; + } + +SEC: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto SEC_; + default: + return -1; + } + +SEC_: + NEXT_CHAR(); + switch (ch) { + case 'W': + if (last) { + return -1; + } + goto SEC_W; + case 'w': + if (last) { + return -1; + } + goto SEC_W; + default: + return -1; + } + +SEC_W: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto SEC_WE; + case 'e': + if (last) { + return -1; + } + goto SEC_WE; + default: + return -1; + } + +SEC_WE: + NEXT_CHAR(); + switch (ch) { + case 'B': + if (last) { + return -1; + } + goto SEC_WEB; + case 'b': + if (last) { + return -1; + } + goto SEC_WEB; + default: + return -1; + } + +SEC_WEB: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto SEC_WEBS; + case 's': + if (last) { + return -1; + } + goto SEC_WEBS; + default: + return -1; + } + +SEC_WEBS: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto SEC_WEBSO; + case 'o': + if (last) { + return -1; + } + goto SEC_WEBSO; + default: + return -1; + } + +SEC_WEBSO: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto SEC_WEBSOC; + case 'c': + if (last) { + return -1; + } + goto SEC_WEBSOC; + default: + return -1; + } + +SEC_WEBSOC: + NEXT_CHAR(); + switch (ch) { + case 'K': + if (last) { + return -1; + } + goto SEC_WEBSOCK; + case 'k': + if (last) { + return -1; + } + goto SEC_WEBSOCK; + default: + return -1; + } + +SEC_WEBSOCK: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto SEC_WEBSOCKE; + case 'e': + if (last) { + return -1; + } + goto SEC_WEBSOCKE; + default: + return -1; + } + +SEC_WEBSOCKE: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto SEC_WEBSOCKET; + case 't': + if (last) { + return -1; + } + goto SEC_WEBSOCKET; + default: + return -1; + } + +SEC_WEBSOCKET: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_; + default: + return -1; + } + +SEC_WEBSOCKET_: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_A; + case 'a': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_A; + case 'E': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_E; + case 'e': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_E; + case 'K': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_K; + case 'k': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_K; + case 'P': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_P; + case 'p': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_P; + case 'V': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_V; + case 'v': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_V; + default: + return -1; + } + +SEC_WEBSOCKET_A: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_AC; + case 'c': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_AC; + default: + return -1; + } + +SEC_WEBSOCKET_AC: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_ACC; + case 'c': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_ACC; + default: + return -1; + } + +SEC_WEBSOCKET_ACC: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_ACCE; + case 'e': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_ACCE; + default: + return -1; + } + +SEC_WEBSOCKET_ACCE: + NEXT_CHAR(); + switch (ch) { + case 'P': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_ACCEP; + case 'p': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_ACCEP; + default: + return -1; + } + +SEC_WEBSOCKET_ACCEP: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return 55; + } + goto SEC_WEBSOCKET_ACCEPT; + case 't': + if (last) { + return 55; + } + goto SEC_WEBSOCKET_ACCEPT; + default: + return -1; + } + +SEC_WEBSOCKET_E: + NEXT_CHAR(); + switch (ch) { + case 'X': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EX; + case 'x': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EX; + default: + return -1; + } + +SEC_WEBSOCKET_EX: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EXT; + case 't': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EXT; + default: + return -1; + } + +SEC_WEBSOCKET_EXT: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EXTE; + case 'e': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EXTE; + default: + return -1; + } + +SEC_WEBSOCKET_EXTE: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EXTEN; + case 'n': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EXTEN; + default: + return -1; + } + +SEC_WEBSOCKET_EXTEN: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EXTENS; + case 's': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EXTENS; + default: + return -1; + } + +SEC_WEBSOCKET_EXTENS: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EXTENSI; + case 'i': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EXTENSI; + default: + return -1; + } + +SEC_WEBSOCKET_EXTENSI: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EXTENSIO; + case 'o': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EXTENSIO; + default: + return -1; + } + +SEC_WEBSOCKET_EXTENSIO: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EXTENSION; + case 'n': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_EXTENSION; + default: + return -1; + } + +SEC_WEBSOCKET_EXTENSION: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return 56; + } + goto SEC_WEBSOCKET_EXTENSIONS; + case 's': + if (last) { + return 56; + } + goto SEC_WEBSOCKET_EXTENSIONS; + default: + return -1; + } + +SEC_WEBSOCKET_K: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_KE; + case 'e': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_KE; + default: + return -1; + } + +SEC_WEBSOCKET_KE: + NEXT_CHAR(); + switch (ch) { + case 'Y': + if (last) { + return 57; + } + goto SEC_WEBSOCKET_KEY; + case 'y': + if (last) { + return 57; + } + goto SEC_WEBSOCKET_KEY; + default: + return -1; + } + +SEC_WEBSOCKET_KEY: + NEXT_CHAR(); + switch (ch) { + case '1': + if (last) { + return 58; + } + goto SEC_WEBSOCKET_KEY1; + default: + return -1; + } + +SEC_WEBSOCKET_P: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_PR; + case 'r': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_PR; + default: + return -1; + } + +SEC_WEBSOCKET_PR: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_PRO; + case 'o': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_PRO; + default: + return -1; + } + +SEC_WEBSOCKET_PRO: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_PROT; + case 't': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_PROT; + default: + return -1; + } + +SEC_WEBSOCKET_PROT: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_PROTO; + case 'o': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_PROTO; + default: + return -1; + } + +SEC_WEBSOCKET_PROTO: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_PROTOC; + case 'c': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_PROTOC; + default: + return -1; + } + +SEC_WEBSOCKET_PROTOC: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_PROTOCO; + case 'o': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_PROTOCO; + default: + return -1; + } + +SEC_WEBSOCKET_PROTOCO: + NEXT_CHAR(); + switch (ch) { + case 'L': + if (last) { + return 59; + } + goto SEC_WEBSOCKET_PROTOCOL; + case 'l': + if (last) { + return 59; + } + goto SEC_WEBSOCKET_PROTOCOL; + default: + return -1; + } + +SEC_WEBSOCKET_V: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_VE; + case 'e': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_VE; + default: + return -1; + } + +SEC_WEBSOCKET_VE: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_VER; + case 'r': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_VER; + default: + return -1; + } + +SEC_WEBSOCKET_VER: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_VERS; + case 's': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_VERS; + default: + return -1; + } + +SEC_WEBSOCKET_VERS: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_VERSI; + case 'i': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_VERSI; + default: + return -1; + } + +SEC_WEBSOCKET_VERSI: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_VERSIO; + case 'o': + if (last) { + return -1; + } + goto SEC_WEBSOCKET_VERSIO; + default: + return -1; + } + +SEC_WEBSOCKET_VERSIO: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return 60; + } + goto SEC_WEBSOCKET_VERSION; + case 'n': + if (last) { + return 60; + } + goto SEC_WEBSOCKET_VERSION; + default: + return -1; + } + +SER: + NEXT_CHAR(); + switch (ch) { + case 'V': + if (last) { + return -1; + } + goto SERV; + case 'v': + if (last) { + return -1; + } + goto SERV; + default: + return -1; + } + +SERV: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto SERVE; + case 'e': + if (last) { + return -1; + } + goto SERVE; + default: + return -1; + } + +SERVE: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return 61; + } + goto SERVER; + case 'r': + if (last) { + return 61; + } + goto SERVER; + default: + return -1; + } + +SET: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto SET_; + default: + return -1; + } + +SET_: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto SET_C; + case 'c': + if (last) { + return -1; + } + goto SET_C; + default: + return -1; + } + +SET_C: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto SET_CO; + case 'o': + if (last) { + return -1; + } + goto SET_CO; + default: + return -1; + } + +SET_CO: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto SET_COO; + case 'o': + if (last) { + return -1; + } + goto SET_COO; + default: + return -1; + } + +SET_COO: + NEXT_CHAR(); + switch (ch) { + case 'K': + if (last) { + return -1; + } + goto SET_COOK; + case 'k': + if (last) { + return -1; + } + goto SET_COOK; + default: + return -1; + } + +SET_COOK: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto SET_COOKI; + case 'i': + if (last) { + return -1; + } + goto SET_COOKI; + default: + return -1; + } + +SET_COOKI: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 62; + } + goto SET_COOKIE; + case 'e': + if (last) { + return 62; + } + goto SET_COOKIE; + default: + return -1; + } + +T: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 63; + } + goto TE; + case 'e': + if (last) { + return 63; + } + goto TE; + case 'R': + if (last) { + return -1; + } + goto TR; + case 'r': + if (last) { + return -1; + } + goto TR; + default: + return -1; + } + +TR: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto TRA; + case 'a': + if (last) { + return -1; + } + goto TRA; + default: + return -1; + } + +TRA: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto TRAI; + case 'i': + if (last) { + return -1; + } + goto TRAI; + case 'N': + if (last) { + return -1; + } + goto TRAN; + case 'n': + if (last) { + return -1; + } + goto TRAN; + default: + return -1; + } + +TRAI: + NEXT_CHAR(); + switch (ch) { + case 'L': + if (last) { + return -1; + } + goto TRAIL; + case 'l': + if (last) { + return -1; + } + goto TRAIL; + default: + return -1; + } + +TRAIL: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto TRAILE; + case 'e': + if (last) { + return -1; + } + goto TRAILE; + default: + return -1; + } + +TRAILE: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return 64; + } + goto TRAILER; + case 'r': + if (last) { + return 64; + } + goto TRAILER; + default: + return -1; + } + +TRAN: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto TRANS; + case 's': + if (last) { + return -1; + } + goto TRANS; + default: + return -1; + } + +TRANS: + NEXT_CHAR(); + switch (ch) { + case 'F': + if (last) { + return -1; + } + goto TRANSF; + case 'f': + if (last) { + return -1; + } + goto TRANSF; + default: + return -1; + } + +TRANSF: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto TRANSFE; + case 'e': + if (last) { + return -1; + } + goto TRANSFE; + default: + return -1; + } + +TRANSFE: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto TRANSFER; + case 'r': + if (last) { + return -1; + } + goto TRANSFER; + default: + return -1; + } + +TRANSFER: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto TRANSFER_; + default: + return -1; + } + +TRANSFER_: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto TRANSFER_E; + case 'e': + if (last) { + return -1; + } + goto TRANSFER_E; + default: + return -1; + } + +TRANSFER_E: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto TRANSFER_EN; + case 'n': + if (last) { + return -1; + } + goto TRANSFER_EN; + default: + return -1; + } + +TRANSFER_EN: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto TRANSFER_ENC; + case 'c': + if (last) { + return -1; + } + goto TRANSFER_ENC; + default: + return -1; + } + +TRANSFER_ENC: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto TRANSFER_ENCO; + case 'o': + if (last) { + return -1; + } + goto TRANSFER_ENCO; + default: + return -1; + } + +TRANSFER_ENCO: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto TRANSFER_ENCOD; + case 'd': + if (last) { + return -1; + } + goto TRANSFER_ENCOD; + default: + return -1; + } + +TRANSFER_ENCOD: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto TRANSFER_ENCODI; + case 'i': + if (last) { + return -1; + } + goto TRANSFER_ENCODI; + default: + return -1; + } + +TRANSFER_ENCODI: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto TRANSFER_ENCODIN; + case 'n': + if (last) { + return -1; + } + goto TRANSFER_ENCODIN; + default: + return -1; + } + +TRANSFER_ENCODIN: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return 65; + } + goto TRANSFER_ENCODING; + case 'g': + if (last) { + return 65; + } + goto TRANSFER_ENCODING; + default: + return -1; + } + +U: + NEXT_CHAR(); + switch (ch) { + case 'P': + if (last) { + return -1; + } + goto UP; + case 'p': + if (last) { + return -1; + } + goto UP; + case 'R': + if (last) { + return -1; + } + goto UR; + case 'r': + if (last) { + return -1; + } + goto UR; + case 'S': + if (last) { + return -1; + } + goto US; + case 's': + if (last) { + return -1; + } + goto US; + default: + return -1; + } + +UP: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto UPG; + case 'g': + if (last) { + return -1; + } + goto UPG; + default: + return -1; + } + +UPG: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto UPGR; + case 'r': + if (last) { + return -1; + } + goto UPGR; + default: + return -1; + } + +UPGR: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto UPGRA; + case 'a': + if (last) { + return -1; + } + goto UPGRA; + default: + return -1; + } + +UPGRA: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto UPGRAD; + case 'd': + if (last) { + return -1; + } + goto UPGRAD; + default: + return -1; + } + +UPGRAD: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 66; + } + goto UPGRADE; + case 'e': + if (last) { + return 66; + } + goto UPGRADE; + default: + return -1; + } + +UR: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return 67; + } + goto URI; + case 'i': + if (last) { + return 67; + } + goto URI; + default: + return -1; + } + +US: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto USE; + case 'e': + if (last) { + return -1; + } + goto USE; + default: + return -1; + } + +USE: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto USER; + case 'r': + if (last) { + return -1; + } + goto USER; + default: + return -1; + } + +USER: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto USER_; + default: + return -1; + } + +USER_: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto USER_A; + case 'a': + if (last) { + return -1; + } + goto USER_A; + default: + return -1; + } + +USER_A: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto USER_AG; + case 'g': + if (last) { + return -1; + } + goto USER_AG; + default: + return -1; + } + +USER_AG: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto USER_AGE; + case 'e': + if (last) { + return -1; + } + goto USER_AGE; + default: + return -1; + } + +USER_AGE: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto USER_AGEN; + case 'n': + if (last) { + return -1; + } + goto USER_AGEN; + default: + return -1; + } + +USER_AGEN: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return 68; + } + goto USER_AGENT; + case 't': + if (last) { + return 68; + } + goto USER_AGENT; + default: + return -1; + } + +V: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto VA; + case 'a': + if (last) { + return -1; + } + goto VA; + case 'I': + if (last) { + return -1; + } + goto VI; + case 'i': + if (last) { + return -1; + } + goto VI; + default: + return -1; + } + +VA: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto VAR; + case 'r': + if (last) { + return -1; + } + goto VAR; + default: + return -1; + } + +VAR: + NEXT_CHAR(); + switch (ch) { + case 'Y': + if (last) { + return 69; + } + goto VARY; + case 'y': + if (last) { + return 69; + } + goto VARY; + default: + return -1; + } + +VI: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return 70; + } + goto VIA; + case 'a': + if (last) { + return 70; + } + goto VIA; + default: + return -1; + } + +W: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto WA; + case 'a': + if (last) { + return -1; + } + goto WA; + case 'E': + if (last) { + return -1; + } + goto WE; + case 'e': + if (last) { + return -1; + } + goto WE; + case 'W': + if (last) { + return -1; + } + goto WW; + case 'w': + if (last) { + return -1; + } + goto WW; + default: + return -1; + } + +WA: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto WAN; + case 'n': + if (last) { + return -1; + } + goto WAN; + case 'R': + if (last) { + return -1; + } + goto WAR; + case 'r': + if (last) { + return -1; + } + goto WAR; + default: + return -1; + } + +WAN: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto WANT; + case 't': + if (last) { + return -1; + } + goto WANT; + default: + return -1; + } + +WANT: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto WANT_; + default: + return -1; + } + +WANT_: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto WANT_D; + case 'd': + if (last) { + return -1; + } + goto WANT_D; + default: + return -1; + } + +WANT_D: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto WANT_DI; + case 'i': + if (last) { + return -1; + } + goto WANT_DI; + default: + return -1; + } + +WANT_DI: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return -1; + } + goto WANT_DIG; + case 'g': + if (last) { + return -1; + } + goto WANT_DIG; + default: + return -1; + } + +WANT_DIG: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto WANT_DIGE; + case 'e': + if (last) { + return -1; + } + goto WANT_DIGE; + default: + return -1; + } + +WANT_DIGE: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto WANT_DIGES; + case 's': + if (last) { + return -1; + } + goto WANT_DIGES; + default: + return -1; + } + +WANT_DIGES: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return 71; + } + goto WANT_DIGEST; + case 't': + if (last) { + return 71; + } + goto WANT_DIGEST; + default: + return -1; + } + +WAR: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto WARN; + case 'n': + if (last) { + return -1; + } + goto WARN; + default: + return -1; + } + +WARN: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto WARNI; + case 'i': + if (last) { + return -1; + } + goto WARNI; + default: + return -1; + } + +WARNI: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto WARNIN; + case 'n': + if (last) { + return -1; + } + goto WARNIN; + default: + return -1; + } + +WARNIN: + NEXT_CHAR(); + switch (ch) { + case 'G': + if (last) { + return 72; + } + goto WARNING; + case 'g': + if (last) { + return 72; + } + goto WARNING; + default: + return -1; + } + +WE: + NEXT_CHAR(); + switch (ch) { + case 'B': + if (last) { + return -1; + } + goto WEB; + case 'b': + if (last) { + return -1; + } + goto WEB; + default: + return -1; + } + +WEB: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto WEBS; + case 's': + if (last) { + return -1; + } + goto WEBS; + default: + return -1; + } + +WEBS: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto WEBSO; + case 'o': + if (last) { + return -1; + } + goto WEBSO; + default: + return -1; + } + +WEBSO: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto WEBSOC; + case 'c': + if (last) { + return -1; + } + goto WEBSOC; + default: + return -1; + } + +WEBSOC: + NEXT_CHAR(); + switch (ch) { + case 'K': + if (last) { + return -1; + } + goto WEBSOCK; + case 'k': + if (last) { + return -1; + } + goto WEBSOCK; + default: + return -1; + } + +WEBSOCK: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto WEBSOCKE; + case 'e': + if (last) { + return -1; + } + goto WEBSOCKE; + default: + return -1; + } + +WEBSOCKE: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return 73; + } + goto WEBSOCKET; + case 't': + if (last) { + return 73; + } + goto WEBSOCKET; + default: + return -1; + } + +WW: + NEXT_CHAR(); + switch (ch) { + case 'W': + if (last) { + return -1; + } + goto WWW; + case 'w': + if (last) { + return -1; + } + goto WWW; + default: + return -1; + } + +WWW: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto WWW_; + default: + return -1; + } + +WWW_: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto WWW_A; + case 'a': + if (last) { + return -1; + } + goto WWW_A; + default: + return -1; + } + +WWW_A: + NEXT_CHAR(); + switch (ch) { + case 'U': + if (last) { + return -1; + } + goto WWW_AU; + case 'u': + if (last) { + return -1; + } + goto WWW_AU; + default: + return -1; + } + +WWW_AU: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto WWW_AUT; + case 't': + if (last) { + return -1; + } + goto WWW_AUT; + default: + return -1; + } + +WWW_AUT: + NEXT_CHAR(); + switch (ch) { + case 'H': + if (last) { + return -1; + } + goto WWW_AUTH; + case 'h': + if (last) { + return -1; + } + goto WWW_AUTH; + default: + return -1; + } + +WWW_AUTH: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto WWW_AUTHE; + case 'e': + if (last) { + return -1; + } + goto WWW_AUTHE; + default: + return -1; + } + +WWW_AUTHE: + NEXT_CHAR(); + switch (ch) { + case 'N': + if (last) { + return -1; + } + goto WWW_AUTHEN; + case 'n': + if (last) { + return -1; + } + goto WWW_AUTHEN; + default: + return -1; + } + +WWW_AUTHEN: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto WWW_AUTHENT; + case 't': + if (last) { + return -1; + } + goto WWW_AUTHENT; + default: + return -1; + } + +WWW_AUTHENT: + NEXT_CHAR(); + switch (ch) { + case 'I': + if (last) { + return -1; + } + goto WWW_AUTHENTI; + case 'i': + if (last) { + return -1; + } + goto WWW_AUTHENTI; + default: + return -1; + } + +WWW_AUTHENTI: + NEXT_CHAR(); + switch (ch) { + case 'C': + if (last) { + return -1; + } + goto WWW_AUTHENTIC; + case 'c': + if (last) { + return -1; + } + goto WWW_AUTHENTIC; + default: + return -1; + } + +WWW_AUTHENTIC: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto WWW_AUTHENTICA; + case 'a': + if (last) { + return -1; + } + goto WWW_AUTHENTICA; + default: + return -1; + } + +WWW_AUTHENTICA: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto WWW_AUTHENTICAT; + case 't': + if (last) { + return -1; + } + goto WWW_AUTHENTICAT; + default: + return -1; + } + +WWW_AUTHENTICAT: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return 74; + } + goto WWW_AUTHENTICATE; + case 'e': + if (last) { + return 74; + } + goto WWW_AUTHENTICATE; + default: + return -1; + } + +X: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto X_; + default: + return -1; + } + +X_: + NEXT_CHAR(); + switch (ch) { + case 'F': + if (last) { + return -1; + } + goto X_F; + case 'f': + if (last) { + return -1; + } + goto X_F; + default: + return -1; + } + +X_F: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto X_FO; + case 'o': + if (last) { + return -1; + } + goto X_FO; + default: + return -1; + } + +X_FO: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto X_FOR; + case 'r': + if (last) { + return -1; + } + goto X_FOR; + default: + return -1; + } + +X_FOR: + NEXT_CHAR(); + switch (ch) { + case 'W': + if (last) { + return -1; + } + goto X_FORW; + case 'w': + if (last) { + return -1; + } + goto X_FORW; + default: + return -1; + } + +X_FORW: + NEXT_CHAR(); + switch (ch) { + case 'A': + if (last) { + return -1; + } + goto X_FORWA; + case 'a': + if (last) { + return -1; + } + goto X_FORWA; + default: + return -1; + } + +X_FORWA: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto X_FORWAR; + case 'r': + if (last) { + return -1; + } + goto X_FORWAR; + default: + return -1; + } + +X_FORWAR: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto X_FORWARD; + case 'd': + if (last) { + return -1; + } + goto X_FORWARD; + default: + return -1; + } + +X_FORWARD: + NEXT_CHAR(); + switch (ch) { + case 'E': + if (last) { + return -1; + } + goto X_FORWARDE; + case 'e': + if (last) { + return -1; + } + goto X_FORWARDE; + default: + return -1; + } + +X_FORWARDE: + NEXT_CHAR(); + switch (ch) { + case 'D': + if (last) { + return -1; + } + goto X_FORWARDED; + case 'd': + if (last) { + return -1; + } + goto X_FORWARDED; + default: + return -1; + } + +X_FORWARDED: + NEXT_CHAR(); + switch (ch) { + case '-': + if (last) { + return -1; + } + goto X_FORWARDED_; + default: + return -1; + } + +X_FORWARDED_: + NEXT_CHAR(); + switch (ch) { + case 'F': + if (last) { + return -1; + } + goto X_FORWARDED_F; + case 'f': + if (last) { + return -1; + } + goto X_FORWARDED_F; + case 'H': + if (last) { + return -1; + } + goto X_FORWARDED_H; + case 'h': + if (last) { + return -1; + } + goto X_FORWARDED_H; + case 'P': + if (last) { + return -1; + } + goto X_FORWARDED_P; + case 'p': + if (last) { + return -1; + } + goto X_FORWARDED_P; + default: + return -1; + } + +X_FORWARDED_F: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto X_FORWARDED_FO; + case 'o': + if (last) { + return -1; + } + goto X_FORWARDED_FO; + default: + return -1; + } + +X_FORWARDED_FO: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return 75; + } + goto X_FORWARDED_FOR; + case 'r': + if (last) { + return 75; + } + goto X_FORWARDED_FOR; + default: + return -1; + } + +X_FORWARDED_H: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto X_FORWARDED_HO; + case 'o': + if (last) { + return -1; + } + goto X_FORWARDED_HO; + default: + return -1; + } + +X_FORWARDED_HO: + NEXT_CHAR(); + switch (ch) { + case 'S': + if (last) { + return -1; + } + goto X_FORWARDED_HOS; + case 's': + if (last) { + return -1; + } + goto X_FORWARDED_HOS; + default: + return -1; + } + +X_FORWARDED_HOS: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return 76; + } + goto X_FORWARDED_HOST; + case 't': + if (last) { + return 76; + } + goto X_FORWARDED_HOST; + default: + return -1; + } + +X_FORWARDED_P: + NEXT_CHAR(); + switch (ch) { + case 'R': + if (last) { + return -1; + } + goto X_FORWARDED_PR; + case 'r': + if (last) { + return -1; + } + goto X_FORWARDED_PR; + default: + return -1; + } + +X_FORWARDED_PR: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return -1; + } + goto X_FORWARDED_PRO; + case 'o': + if (last) { + return -1; + } + goto X_FORWARDED_PRO; + default: + return -1; + } + +X_FORWARDED_PRO: + NEXT_CHAR(); + switch (ch) { + case 'T': + if (last) { + return -1; + } + goto X_FORWARDED_PROT; + case 't': + if (last) { + return -1; + } + goto X_FORWARDED_PROT; + default: + return -1; + } + +X_FORWARDED_PROT: + NEXT_CHAR(); + switch (ch) { + case 'O': + if (last) { + return 77; + } + goto X_FORWARDED_PROTO; + case 'o': + if (last) { + return 77; + } + goto X_FORWARDED_PROTO; + default: + return -1; + } + +ACCEPT_CHARSET: +ACCEPT_ENCODING: +ACCEPT_LANGUAGE: +ACCEPT_RANGES: +ACCESS_CONTROL_ALLOW_CREDENTIALS: +ACCESS_CONTROL_ALLOW_HEADERS: +ACCESS_CONTROL_ALLOW_METHODS: +ACCESS_CONTROL_ALLOW_ORIGIN: +ACCESS_CONTROL_EXPOSE_HEADERS: +ACCESS_CONTROL_MAX_AGE: +ACCESS_CONTROL_REQUEST_HEADERS: +ACCESS_CONTROL_REQUEST_METHOD: +AGE: +ALLOW: +AUTHORIZATION: +CACHE_CONTROL: +CONNECTION: +CONTENT_DISPOSITION: +CONTENT_ENCODING: +CONTENT_LANGUAGE: +CONTENT_LENGTH: +CONTENT_LOCATION: +CONTENT_MD5: +CONTENT_RANGE: +CONTENT_TRANSFER_ENCODING: +CONTENT_TYPE: +COOKIE: +DATE: +DESTINATION: +DIGEST: +ETAG: +EXPECT: +EXPIRES: +FORWARDED: +FROM: +HOST: +IF_MATCH: +IF_MODIFIED_SINCE: +IF_NONE_MATCH: +IF_RANGE: +IF_UNMODIFIED_SINCE: +KEEP_ALIVE: +LAST_EVENT_ID: +LAST_MODIFIED: +LINK: +LOCATION: +MAX_FORWARDS: +ORIGIN: +PRAGMA: +PROXY_AUTHENTICATE: +PROXY_AUTHORIZATION: +RANGE: +REFERER: +RETRY_AFTER: +SEC_WEBSOCKET_ACCEPT: +SEC_WEBSOCKET_EXTENSIONS: +SEC_WEBSOCKET_KEY1: +SEC_WEBSOCKET_PROTOCOL: +SEC_WEBSOCKET_VERSION: +SERVER: +SET_COOKIE: +TE: +TRAILER: +TRANSFER_ENCODING: +UPGRADE: +URI: +USER_AGENT: +VARY: +VIA: +WANT_DIGEST: +WARNING: +WEBSOCKET: +WWW_AUTHENTICATE: +X_FORWARDED_FOR: +X_FORWARDED_HOST: +X_FORWARDED_PROTO: +missing: + /* nothing found */ + return -1; +} diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_find_header.h b/venv-linux/lib/python3.6/site-packages/aiohttp/_find_header.h new file mode 100644 index 0000000..99b7b4f --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_find_header.h @@ -0,0 +1,14 @@ +#ifndef _FIND_HEADERS_H +#define _FIND_HEADERS_H + +#ifdef __cplusplus +extern "C" { +#endif + +int find_header(const char *str, int size); + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_find_header.pxd b/venv-linux/lib/python3.6/site-packages/aiohttp/_find_header.pxd new file mode 100644 index 0000000..37a6c37 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_find_header.pxd @@ -0,0 +1,2 @@ +cdef extern from "_find_header.h": + int find_header(char *, int) diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_frozenlist.c b/venv-linux/lib/python3.6/site-packages/aiohttp/_frozenlist.c new file mode 100644 index 0000000..d81f939 --- /dev/null +++ b/venv-linux/lib/python3.6/site-packages/aiohttp/_frozenlist.c @@ -0,0 +1,7355 @@ +/* Generated by Cython 0.29.13 */ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.6+ or Python 3.3+. +#else +#define CYTHON_ABI "0_29_13" +#define CYTHON_HEX_VERSION 0x001D0DF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact + #define PyObject_Unicode PyObject_Str +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : (Py_INCREF(func), func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + + +#define __PYX_ERR(f_index, lineno, Ln_error) \ +{ \ + __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \ +} + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__aiohttp___frozenlist +#define __PYX_HAVE_API__aiohttp___frozenlist +/* Early includes */ +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +static PyObject *__pyx_m = NULL; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_cython_runtime = NULL; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static PyObject *__pyx_empty_unicode; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + + +static const char *__pyx_f[] = { + "aiohttp/_frozenlist.pyx", + "stringsource", +}; + +/*--- Type declarations ---*/ +struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList; + +/* "aiohttp/_frozenlist.pyx":4 + * + * + * cdef class FrozenList: # <<<<<<<<<<<<<< + * + * cdef readonly bint frozen + */ +struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList { + PyObject_HEAD + struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *__pyx_vtab; + int frozen; + PyObject *_items; +}; + + + +struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList { + PyObject *(*_check_frozen)(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *); + PyObject *(*_fast_len)(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *); +}; +static struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *__pyx_vtabptr_7aiohttp_11_frozenlist_FrozenList; +static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_11_frozenlist_10FrozenList__fast_len(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *); + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#else +#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectCallNoArg.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); +#else +#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL) +#endif + +/* PyCFunctionFastCall.proto */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +#else +#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* PyIntCompare.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, long inplace); + +/* PySequenceContains.proto */ +static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) { + int result = PySequence_Contains(seq, item); + return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); +} + +/* PyObjectCall2Args.proto */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod1.proto */ +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); + +/* pop_index.proto */ +static PyObject* __Pyx__PyObject_PopNewIndex(PyObject* L, PyObject* py_ix); +static PyObject* __Pyx__PyObject_PopIndex(PyObject* L, PyObject* py_ix); +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static PyObject* __Pyx__PyList_PopIndex(PyObject* L, PyObject* py_ix, Py_ssize_t ix); +#define __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\ + (likely(PyList_CheckExact(L) && __Pyx_fits_Py_ssize_t(ix, type, is_signed))) ?\ + __Pyx__PyList_PopIndex(L, py_ix, ix) : (\ + (unlikely((py_ix) == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\ + __Pyx__PyObject_PopIndex(L, py_ix))) +#define __Pyx_PyList_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\ + __Pyx_fits_Py_ssize_t(ix, type, is_signed) ?\ + __Pyx__PyList_PopIndex(L, py_ix, ix) : (\ + (unlikely((py_ix) == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\ + __Pyx__PyObject_PopIndex(L, py_ix))) +#else +#define __Pyx_PyList_PopIndex(L, py_ix, ix, is_signed, type, to_py_func)\ + __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) +#define __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\ + (unlikely((py_ix) == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\ + __Pyx__PyObject_PopIndex(L, py_ix)) +#endif + +/* ListAppend.proto */ +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + Py_SIZE(list) = len+1; + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) +#endif + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* GetAttr3.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PyObject_GenericGetAttr.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr +#endif + +/* SetVTable.proto */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable); + +/* SetupReduce.proto */ +static int __Pyx_setup_reduce(PyObject* type_obj); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +static PyObject *__pyx_f_7aiohttp_11_frozenlist_10FrozenList__check_frozen(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_11_frozenlist_10FrozenList__fast_len(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto*/ + +/* Module declarations from 'aiohttp._frozenlist' */ +static PyTypeObject *__pyx_ptype_7aiohttp_11_frozenlist_FrozenList = 0; +static PyObject *__pyx_f_7aiohttp_11_frozenlist___pyx_unpickle_FrozenList__set_state(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *, PyObject *); /*proto*/ +#define __Pyx_MODULE_NAME "aiohttp._frozenlist" +extern int __pyx_module_is_main_aiohttp___frozenlist; +int __pyx_module_is_main_aiohttp___frozenlist = 0; + +/* Implementation of 'aiohttp._frozenlist' */ +static PyObject *__pyx_builtin_RuntimeError; +static const char __pyx_k_new[] = "__new__"; +static const char __pyx_k_pop[] = "pop"; +static const char __pyx_k_pos[] = "pos"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_item[] = "item"; +static const char __pyx_k_iter[] = "__iter__"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_clear[] = "clear"; +static const char __pyx_k_count[] = "count"; +static const char __pyx_k_index[] = "index"; +static const char __pyx_k_items[] = "items"; +static const char __pyx_k_format[] = "format"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_pickle[] = "pickle"; +static const char __pyx_k_reduce[] = "__reduce__"; +static const char __pyx_k_remove[] = "remove"; +static const char __pyx_k_update[] = "update"; +static const char __pyx_k_getstate[] = "__getstate__"; +static const char __pyx_k_pyx_type[] = "__pyx_type"; +static const char __pyx_k_register[] = "register"; +static const char __pyx_k_reversed[] = "__reversed__"; +static const char __pyx_k_setstate[] = "__setstate__"; +static const char __pyx_k_pyx_state[] = "__pyx_state"; +static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; +static const char __pyx_k_FrozenList[] = "FrozenList"; +static const char __pyx_k_pyx_result[] = "__pyx_result"; +static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; +static const char __pyx_k_PickleError[] = "PickleError"; +static const char __pyx_k_RuntimeError[] = "RuntimeError"; +static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; +static const char __pyx_k_stringsource[] = "stringsource"; +static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; +static const char __pyx_k_MutableSequence[] = "MutableSequence"; +static const char __pyx_k_collections_abc[] = "collections.abc"; +static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; +static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_FrozenList_frozen_r[] = ""; +static const char __pyx_k_aiohttp__frozenlist[] = "aiohttp._frozenlist"; +static const char __pyx_k_pyx_unpickle_FrozenList[] = "__pyx_unpickle_FrozenList"; +static const char __pyx_k_Cannot_modify_frozen_list[] = "Cannot modify frozen list."; +static const char __pyx_k_Incompatible_checksums_s_vs_0x94[] = "Incompatible checksums (%s vs 0x949a143 = (_items, frozen))"; +static PyObject *__pyx_kp_u_Cannot_modify_frozen_list; +static PyObject *__pyx_n_s_FrozenList; +static PyObject *__pyx_kp_u_FrozenList_frozen_r; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x94; +static PyObject *__pyx_n_s_MutableSequence; +static PyObject *__pyx_n_s_PickleError; +static PyObject *__pyx_n_s_RuntimeError; +static PyObject *__pyx_n_s_aiohttp__frozenlist; +static PyObject *__pyx_n_s_clear; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_n_s_collections_abc; +static PyObject *__pyx_n_s_count; +static PyObject *__pyx_n_s_dict; +static PyObject *__pyx_n_s_format; +static PyObject *__pyx_n_s_getstate; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_index; +static PyObject *__pyx_n_s_item; +static PyObject *__pyx_n_s_items; +static PyObject *__pyx_n_s_iter; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_n_s_new; +static PyObject *__pyx_n_s_pickle; +static PyObject *__pyx_n_s_pop; +static PyObject *__pyx_n_s_pos; +static PyObject *__pyx_n_s_pyx_PickleError; +static PyObject *__pyx_n_s_pyx_checksum; +static PyObject *__pyx_n_s_pyx_result; +static PyObject *__pyx_n_s_pyx_state; +static PyObject *__pyx_n_s_pyx_type; +static PyObject *__pyx_n_s_pyx_unpickle_FrozenList; +static PyObject *__pyx_n_s_pyx_vtable; +static PyObject *__pyx_n_s_reduce; +static PyObject *__pyx_n_s_reduce_cython; +static PyObject *__pyx_n_s_reduce_ex; +static PyObject *__pyx_n_s_register; +static PyObject *__pyx_n_s_remove; +static PyObject *__pyx_n_s_reversed; +static PyObject *__pyx_n_s_setstate; +static PyObject *__pyx_n_s_setstate_cython; +static PyObject *__pyx_kp_s_stringsource; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_n_s_update; +static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList___init__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_items); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_2freeze(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_4__getitem__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index); /* proto */ +static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_6__setitem__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */ +static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_8__delitem__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index); /* proto */ +static Py_ssize_t __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_10__len__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_12__iter__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_14__reversed__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_16__richcmp__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_op); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_18insert(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_pos, PyObject *__pyx_v_item); /* proto */ +static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_20__contains__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_22__iadd__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_items); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_24index(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_26remove(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_28clear(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_30extend(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_items); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_32reverse(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_34pop(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_36append(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_38count(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_40__repr__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_6frozen___get__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_42__reduce_cython__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_44__setstate_cython__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_7aiohttp_11_frozenlist___pyx_unpickle_FrozenList(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_tp_new_7aiohttp_11_frozenlist_FrozenList(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_int_0; +static PyObject *__pyx_int_1; +static PyObject *__pyx_int_2; +static PyObject *__pyx_int_3; +static PyObject *__pyx_int_4; +static PyObject *__pyx_int_5; +static PyObject *__pyx_int_155820355; +static PyObject *__pyx_int_neg_1; +static PyObject *__pyx_tuple_; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_codeobj__3; +/* Late includes */ + +/* "aiohttp/_frozenlist.pyx":9 + * cdef list _items + * + * def __init__(self, items=None): # <<<<<<<<<<<<<< + * self.frozen = False + * if items is not None: + */ + +/* Python wrapper */ +static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_items = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_items,0}; + PyObject* values[1] = {0}; + values[0] = ((PyObject *)Py_None); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_items); + if (value) { values[0] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 9, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_items = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 9, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList___init__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), __pyx_v_items); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList___init__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_items) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + __Pyx_RefNannySetupContext("__init__", 0); + __Pyx_INCREF(__pyx_v_items); + + /* "aiohttp/_frozenlist.pyx":10 + * + * def __init__(self, items=None): + * self.frozen = False # <<<<<<<<<<<<<< + * if items is not None: + * items = list(items) + */ + __pyx_v_self->frozen = 0; + + /* "aiohttp/_frozenlist.pyx":11 + * def __init__(self, items=None): + * self.frozen = False + * if items is not None: # <<<<<<<<<<<<<< + * items = list(items) + * else: + */ + __pyx_t_1 = (__pyx_v_items != Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "aiohttp/_frozenlist.pyx":12 + * self.frozen = False + * if items is not None: + * items = list(items) # <<<<<<<<<<<<<< + * else: + * items = [] + */ + __pyx_t_3 = PySequence_List(__pyx_v_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_items, __pyx_t_3); + __pyx_t_3 = 0; + + /* "aiohttp/_frozenlist.pyx":11 + * def __init__(self, items=None): + * self.frozen = False + * if items is not None: # <<<<<<<<<<<<<< + * items = list(items) + * else: + */ + goto __pyx_L3; + } + + /* "aiohttp/_frozenlist.pyx":14 + * items = list(items) + * else: + * items = [] # <<<<<<<<<<<<<< + * self._items = items + * + */ + /*else*/ { + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_items, __pyx_t_3); + __pyx_t_3 = 0; + } + __pyx_L3:; + + /* "aiohttp/_frozenlist.pyx":15 + * else: + * items = [] + * self._items = items # <<<<<<<<<<<<<< + * + * cdef object _check_frozen(self): + */ + if (!(likely(PyList_CheckExact(__pyx_v_items))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_items)->tp_name), 0))) __PYX_ERR(0, 15, __pyx_L1_error) + __pyx_t_3 = __pyx_v_items; + __Pyx_INCREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_v_self->_items); + __Pyx_DECREF(__pyx_v_self->_items); + __pyx_v_self->_items = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "aiohttp/_frozenlist.pyx":9 + * cdef list _items + * + * def __init__(self, items=None): # <<<<<<<<<<<<<< + * self.frozen = False + * if items is not None: + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_items); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":17 + * self._items = items + * + * cdef object _check_frozen(self): # <<<<<<<<<<<<<< + * if self.frozen: + * raise RuntimeError("Cannot modify frozen list.") + */ + +static PyObject *__pyx_f_7aiohttp_11_frozenlist_10FrozenList__check_frozen(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + __Pyx_RefNannySetupContext("_check_frozen", 0); + + /* "aiohttp/_frozenlist.pyx":18 + * + * cdef object _check_frozen(self): + * if self.frozen: # <<<<<<<<<<<<<< + * raise RuntimeError("Cannot modify frozen list.") + * + */ + __pyx_t_1 = (__pyx_v_self->frozen != 0); + if (unlikely(__pyx_t_1)) { + + /* "aiohttp/_frozenlist.pyx":19 + * cdef object _check_frozen(self): + * if self.frozen: + * raise RuntimeError("Cannot modify frozen list.") # <<<<<<<<<<<<<< + * + * cdef inline object _fast_len(self): + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(0, 19, __pyx_L1_error) + + /* "aiohttp/_frozenlist.pyx":18 + * + * cdef object _check_frozen(self): + * if self.frozen: # <<<<<<<<<<<<<< + * raise RuntimeError("Cannot modify frozen list.") + * + */ + } + + /* "aiohttp/_frozenlist.pyx":17 + * self._items = items + * + * cdef object _check_frozen(self): # <<<<<<<<<<<<<< + * if self.frozen: + * raise RuntimeError("Cannot modify frozen list.") + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList._check_frozen", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":21 + * raise RuntimeError("Cannot modify frozen list.") + * + * cdef inline object _fast_len(self): # <<<<<<<<<<<<<< + * return len(self._items) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_11_frozenlist_10FrozenList__fast_len(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + __Pyx_RefNannySetupContext("_fast_len", 0); + + /* "aiohttp/_frozenlist.pyx":22 + * + * cdef inline object _fast_len(self): + * return len(self._items) # <<<<<<<<<<<<<< + * + * def freeze(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_v_self->_items; + __Pyx_INCREF(__pyx_t_1); + if (unlikely(__pyx_t_1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 22, __pyx_L1_error) + } + __pyx_t_2 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":21 + * raise RuntimeError("Cannot modify frozen list.") + * + * cdef inline object _fast_len(self): # <<<<<<<<<<<<<< + * return len(self._items) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList._fast_len", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":24 + * return len(self._items) + * + * def freeze(self): # <<<<<<<<<<<<<< + * self.frozen = True + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_3freeze(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_3freeze(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("freeze (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_2freeze(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_2freeze(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("freeze", 0); + + /* "aiohttp/_frozenlist.pyx":25 + * + * def freeze(self): + * self.frozen = True # <<<<<<<<<<<<<< + * + * def __getitem__(self, index): + */ + __pyx_v_self->frozen = 1; + + /* "aiohttp/_frozenlist.pyx":24 + * return len(self._items) + * + * def freeze(self): # <<<<<<<<<<<<<< + * self.frozen = True + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":27 + * self.frozen = True + * + * def __getitem__(self, index): # <<<<<<<<<<<<<< + * return self._items[index] + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_5__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_5__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_4__getitem__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_index)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_4__getitem__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "aiohttp/_frozenlist.pyx":28 + * + * def __getitem__(self, index): + * return self._items[index] # <<<<<<<<<<<<<< + * + * def __setitem__(self, index, value): + */ + __Pyx_XDECREF(__pyx_r); + if (unlikely(__pyx_v_self->_items == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 28, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_self->_items, __pyx_v_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":27 + * self.frozen = True + * + * def __getitem__(self, index): # <<<<<<<<<<<<<< + * return self._items[index] + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":30 + * return self._items[index] + * + * def __setitem__(self, index, value): # <<<<<<<<<<<<<< + * self._check_frozen() + * self._items[index] = value + */ + +/* Python wrapper */ +static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_7__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_7__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_6__setitem__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_6__setitem__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__setitem__", 0); + + /* "aiohttp/_frozenlist.pyx":31 + * + * def __setitem__(self, index, value): + * self._check_frozen() # <<<<<<<<<<<<<< + * self._items[index] = value + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_frozenlist.pyx":32 + * def __setitem__(self, index, value): + * self._check_frozen() + * self._items[index] = value # <<<<<<<<<<<<<< + * + * def __delitem__(self, index): + */ + if (unlikely(__pyx_v_self->_items == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 32, __pyx_L1_error) + } + if (unlikely(PyObject_SetItem(__pyx_v_self->_items, __pyx_v_index, __pyx_v_value) < 0)) __PYX_ERR(0, 32, __pyx_L1_error) + + /* "aiohttp/_frozenlist.pyx":30 + * return self._items[index] + * + * def __setitem__(self, index, value): # <<<<<<<<<<<<<< + * self._check_frozen() + * self._items[index] = value + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":34 + * self._items[index] = value + * + * def __delitem__(self, index): # <<<<<<<<<<<<<< + * self._check_frozen() + * del self._items[index] + */ + +/* Python wrapper */ +static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_9__delitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ +static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_9__delitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__delitem__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_8__delitem__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_index)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_8__delitem__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__delitem__", 0); + + /* "aiohttp/_frozenlist.pyx":35 + * + * def __delitem__(self, index): + * self._check_frozen() # <<<<<<<<<<<<<< + * del self._items[index] + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_frozenlist.pyx":36 + * def __delitem__(self, index): + * self._check_frozen() + * del self._items[index] # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + if (unlikely(__pyx_v_self->_items == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 36, __pyx_L1_error) + } + if (unlikely(PyObject_DelItem(__pyx_v_self->_items, __pyx_v_index) < 0)) __PYX_ERR(0, 36, __pyx_L1_error) + + /* "aiohttp/_frozenlist.pyx":34 + * self._items[index] = value + * + * def __delitem__(self, index): # <<<<<<<<<<<<<< + * self._check_frozen() + * del self._items[index] + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__delitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":38 + * del self._items[index] + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._fast_len() + * + */ + +/* Python wrapper */ +static Py_ssize_t __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_11__len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_11__len__(PyObject *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_10__len__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_10__len__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + __Pyx_RefNannySetupContext("__len__", 0); + + /* "aiohttp/_frozenlist.pyx":39 + * + * def __len__(self): + * return self._fast_len() # <<<<<<<<<<<<<< + * + * def __iter__(self): + */ + __pyx_t_1 = __pyx_f_7aiohttp_11_frozenlist_10FrozenList__fast_len(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":38 + * del self._items[index] + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._fast_len() + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":41 + * return self._fast_len() + * + * def __iter__(self): # <<<<<<<<<<<<<< + * return self._items.__iter__() + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_13__iter__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_13__iter__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_12__iter__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_12__iter__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_RefNannySetupContext("__iter__", 0); + + /* "aiohttp/_frozenlist.pyx":42 + * + * def __iter__(self): + * return self._items.__iter__() # <<<<<<<<<<<<<< + * + * def __reversed__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_items, __pyx_n_s_iter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":41 + * return self._fast_len() + * + * def __iter__(self): # <<<<<<<<<<<<<< + * return self._items.__iter__() + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":44 + * return self._items.__iter__() + * + * def __reversed__(self): # <<<<<<<<<<<<<< + * return self._items.__reversed__() + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_15__reversed__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_15__reversed__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reversed__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_14__reversed__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_14__reversed__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_RefNannySetupContext("__reversed__", 0); + + /* "aiohttp/_frozenlist.pyx":45 + * + * def __reversed__(self): + * return self._items.__reversed__() # <<<<<<<<<<<<<< + * + * def __richcmp__(self, other, op): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_items, __pyx_n_s_reversed); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 45, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":44 + * return self._items.__iter__() + * + * def __reversed__(self): # <<<<<<<<<<<<<< + * return self._items.__reversed__() + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__reversed__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":47 + * return self._items.__reversed__() + * + * def __richcmp__(self, other, op): # <<<<<<<<<<<<<< + * if op == 0: # < + * return list(self) < other + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_17__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_arg_op); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_17__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_arg_op) { + PyObject *__pyx_v_op = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0); + __pyx_v_op = __Pyx_PyInt_From_int(__pyx_arg_op); if (unlikely(!__pyx_v_op)) __PYX_ERR(0, 47, __pyx_L3_error) + __Pyx_GOTREF(__pyx_v_op); + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_16__richcmp__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((PyObject *)__pyx_v_op)); + + /* function exit code */ + __Pyx_XDECREF(__pyx_v_op); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_16__richcmp__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_op) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + __Pyx_RefNannySetupContext("__richcmp__", 0); + + /* "aiohttp/_frozenlist.pyx":48 + * + * def __richcmp__(self, other, op): + * if op == 0: # < # <<<<<<<<<<<<<< + * return list(self) < other + * if op == 1: # <= + */ + __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "aiohttp/_frozenlist.pyx":49 + * def __richcmp__(self, other, op): + * if op == 0: # < + * return list(self) < other # <<<<<<<<<<<<<< + * if op == 1: # <= + * return list(self) <= other + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PySequence_List(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_v_other, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 49, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":48 + * + * def __richcmp__(self, other, op): + * if op == 0: # < # <<<<<<<<<<<<<< + * return list(self) < other + * if op == 1: # <= + */ + } + + /* "aiohttp/_frozenlist.pyx":50 + * if op == 0: # < + * return list(self) < other + * if op == 1: # <= # <<<<<<<<<<<<<< + * return list(self) <= other + * if op == 2: # == + */ + __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_2) { + + /* "aiohttp/_frozenlist.pyx":51 + * return list(self) < other + * if op == 1: # <= + * return list(self) <= other # <<<<<<<<<<<<<< + * if op == 2: # == + * return list(self) == other + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PySequence_List(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_v_other, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":50 + * if op == 0: # < + * return list(self) < other + * if op == 1: # <= # <<<<<<<<<<<<<< + * return list(self) <= other + * if op == 2: # == + */ + } + + /* "aiohttp/_frozenlist.pyx":52 + * if op == 1: # <= + * return list(self) <= other + * if op == 2: # == # <<<<<<<<<<<<<< + * return list(self) == other + * if op == 3: # != + */ + __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_2, 2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 52, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "aiohttp/_frozenlist.pyx":53 + * return list(self) <= other + * if op == 2: # == + * return list(self) == other # <<<<<<<<<<<<<< + * if op == 3: # != + * return list(self) != other + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PySequence_List(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_v_other, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":52 + * if op == 1: # <= + * return list(self) <= other + * if op == 2: # == # <<<<<<<<<<<<<< + * return list(self) == other + * if op == 3: # != + */ + } + + /* "aiohttp/_frozenlist.pyx":54 + * if op == 2: # == + * return list(self) == other + * if op == 3: # != # <<<<<<<<<<<<<< + * return list(self) != other + * if op == 4: # > + */ + __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_3, 3, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_2) { + + /* "aiohttp/_frozenlist.pyx":55 + * return list(self) == other + * if op == 3: # != + * return list(self) != other # <<<<<<<<<<<<<< + * if op == 4: # > + * return list(self) > other + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PySequence_List(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_v_other, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":54 + * if op == 2: # == + * return list(self) == other + * if op == 3: # != # <<<<<<<<<<<<<< + * return list(self) != other + * if op == 4: # > + */ + } + + /* "aiohttp/_frozenlist.pyx":56 + * if op == 3: # != + * return list(self) != other + * if op == 4: # > # <<<<<<<<<<<<<< + * return list(self) > other + * if op == 5: # => + */ + __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_4, 4, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "aiohttp/_frozenlist.pyx":57 + * return list(self) != other + * if op == 4: # > + * return list(self) > other # <<<<<<<<<<<<<< + * if op == 5: # => + * return list(self) >= other + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PySequence_List(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_v_other, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":56 + * if op == 3: # != + * return list(self) != other + * if op == 4: # > # <<<<<<<<<<<<<< + * return list(self) > other + * if op == 5: # => + */ + } + + /* "aiohttp/_frozenlist.pyx":58 + * if op == 4: # > + * return list(self) > other + * if op == 5: # => # <<<<<<<<<<<<<< + * return list(self) >= other + * + */ + __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_5, 5, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_2) { + + /* "aiohttp/_frozenlist.pyx":59 + * return list(self) > other + * if op == 5: # => + * return list(self) >= other # <<<<<<<<<<<<<< + * + * def insert(self, pos, item): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PySequence_List(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_v_other, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":58 + * if op == 4: # > + * return list(self) > other + * if op == 5: # => # <<<<<<<<<<<<<< + * return list(self) >= other + * + */ + } + + /* "aiohttp/_frozenlist.pyx":47 + * return self._items.__reversed__() + * + * def __richcmp__(self, other, op): # <<<<<<<<<<<<<< + * if op == 0: # < + * return list(self) < other + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":61 + * return list(self) >= other + * + * def insert(self, pos, item): # <<<<<<<<<<<<<< + * self._check_frozen() + * self._items.insert(pos, item) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_19insert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_19insert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_pos = 0; + PyObject *__pyx_v_item = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("insert (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pos,&__pyx_n_s_item,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pos)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, 1); __PYX_ERR(0, 61, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insert") < 0)) __PYX_ERR(0, 61, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_pos = values[0]; + __pyx_v_item = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 61, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.insert", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_18insert(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), __pyx_v_pos, __pyx_v_item); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_18insert(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_pos, PyObject *__pyx_v_item) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + int __pyx_t_3; + __Pyx_RefNannySetupContext("insert", 0); + + /* "aiohttp/_frozenlist.pyx":62 + * + * def insert(self, pos, item): + * self._check_frozen() # <<<<<<<<<<<<<< + * self._items.insert(pos, item) + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_frozenlist.pyx":63 + * def insert(self, pos, item): + * self._check_frozen() + * self._items.insert(pos, item) # <<<<<<<<<<<<<< + * + * def __contains__(self, item): + */ + if (unlikely(__pyx_v_self->_items == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "insert"); + __PYX_ERR(0, 63, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_pos); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 63, __pyx_L1_error) + __pyx_t_3 = PyList_Insert(__pyx_v_self->_items, __pyx_t_2, __pyx_v_item); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 63, __pyx_L1_error) + + /* "aiohttp/_frozenlist.pyx":61 + * return list(self) >= other + * + * def insert(self, pos, item): # <<<<<<<<<<<<<< + * self._check_frozen() + * self._items.insert(pos, item) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.insert", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":65 + * self._items.insert(pos, item) + * + * def __contains__(self, item): # <<<<<<<<<<<<<< + * return item in self._items + * + */ + +/* Python wrapper */ +static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_21__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ +static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_21__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__contains__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_20__contains__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_item)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_20__contains__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__contains__", 0); + + /* "aiohttp/_frozenlist.pyx":66 + * + * def __contains__(self, item): + * return item in self._items # <<<<<<<<<<<<<< + * + * def __iadd__(self, items): + */ + __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_item, __pyx_v_self->_items, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 66, __pyx_L1_error) + __pyx_r = __pyx_t_1; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":65 + * self._items.insert(pos, item) + * + * def __contains__(self, item): # <<<<<<<<<<<<<< + * return item in self._items + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__contains__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":68 + * return item in self._items + * + * def __iadd__(self, items): # <<<<<<<<<<<<<< + * self._check_frozen() + * self._items += list(items) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_23__iadd__(PyObject *__pyx_v_self, PyObject *__pyx_v_items); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_23__iadd__(PyObject *__pyx_v_self, PyObject *__pyx_v_items) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__iadd__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_22__iadd__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_items)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_22__iadd__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_items) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + __Pyx_RefNannySetupContext("__iadd__", 0); + + /* "aiohttp/_frozenlist.pyx":69 + * + * def __iadd__(self, items): + * self._check_frozen() # <<<<<<<<<<<<<< + * self._items += list(items) + * return self + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_frozenlist.pyx":70 + * def __iadd__(self, items): + * self._check_frozen() + * self._items += list(items) # <<<<<<<<<<<<<< + * return self + * + */ + __pyx_t_1 = PySequence_List(__pyx_v_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_self->_items, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_self->_items); + __Pyx_DECREF(__pyx_v_self->_items); + __pyx_v_self->_items = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "aiohttp/_frozenlist.pyx":71 + * self._check_frozen() + * self._items += list(items) + * return self # <<<<<<<<<<<<<< + * + * def index(self, item): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __pyx_r = ((PyObject *)__pyx_v_self); + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":68 + * return item in self._items + * + * def __iadd__(self, items): # <<<<<<<<<<<<<< + * self._check_frozen() + * self._items += list(items) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":73 + * return self + * + * def index(self, item): # <<<<<<<<<<<<<< + * return self._items.index(item) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_25index(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_25index(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("index (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_24index(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_item)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_24index(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_RefNannySetupContext("index", 0); + + /* "aiohttp/_frozenlist.pyx":74 + * + * def index(self, item): + * return self._items.index(item) # <<<<<<<<<<<<<< + * + * def remove(self, item): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_items, __pyx_n_s_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_item) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_item); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":73 + * return self + * + * def index(self, item): # <<<<<<<<<<<<<< + * return self._items.index(item) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.index", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":76 + * return self._items.index(item) + * + * def remove(self, item): # <<<<<<<<<<<<<< + * self._check_frozen() + * self._items.remove(item) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_27remove(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_27remove(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("remove (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_26remove(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_item)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_26remove(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_RefNannySetupContext("remove", 0); + + /* "aiohttp/_frozenlist.pyx":77 + * + * def remove(self, item): + * self._check_frozen() # <<<<<<<<<<<<<< + * self._items.remove(item) + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_frozenlist.pyx":78 + * def remove(self, item): + * self._check_frozen() + * self._items.remove(item) # <<<<<<<<<<<<<< + * + * def clear(self): + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_items, __pyx_n_s_remove); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_item) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_item); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_frozenlist.pyx":76 + * return self._items.index(item) + * + * def remove(self, item): # <<<<<<<<<<<<<< + * self._check_frozen() + * self._items.remove(item) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.remove", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":80 + * self._items.remove(item) + * + * def clear(self): # <<<<<<<<<<<<<< + * self._check_frozen() + * self._items.clear() + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_29clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_29clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("clear (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_28clear(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_28clear(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_RefNannySetupContext("clear", 0); + + /* "aiohttp/_frozenlist.pyx":81 + * + * def clear(self): + * self._check_frozen() # <<<<<<<<<<<<<< + * self._items.clear() + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 81, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_frozenlist.pyx":82 + * def clear(self): + * self._check_frozen() + * self._items.clear() # <<<<<<<<<<<<<< + * + * def extend(self, items): + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_items, __pyx_n_s_clear); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_frozenlist.pyx":80 + * self._items.remove(item) + * + * def clear(self): # <<<<<<<<<<<<<< + * self._check_frozen() + * self._items.clear() + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.clear", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":84 + * self._items.clear() + * + * def extend(self, items): # <<<<<<<<<<<<<< + * self._check_frozen() + * self._items += list(items) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_31extend(PyObject *__pyx_v_self, PyObject *__pyx_v_items); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_31extend(PyObject *__pyx_v_self, PyObject *__pyx_v_items) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("extend (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_30extend(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_items)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_30extend(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_items) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + __Pyx_RefNannySetupContext("extend", 0); + + /* "aiohttp/_frozenlist.pyx":85 + * + * def extend(self, items): + * self._check_frozen() # <<<<<<<<<<<<<< + * self._items += list(items) + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_frozenlist.pyx":86 + * def extend(self, items): + * self._check_frozen() + * self._items += list(items) # <<<<<<<<<<<<<< + * + * def reverse(self): + */ + __pyx_t_1 = PySequence_List(__pyx_v_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 86, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_self->_items, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 86, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_self->_items); + __Pyx_DECREF(__pyx_v_self->_items); + __pyx_v_self->_items = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "aiohttp/_frozenlist.pyx":84 + * self._items.clear() + * + * def extend(self, items): # <<<<<<<<<<<<<< + * self._check_frozen() + * self._items += list(items) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.extend", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":88 + * self._items += list(items) + * + * def reverse(self): # <<<<<<<<<<<<<< + * self._check_frozen() + * self._items.reverse() + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_33reverse(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_33reverse(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("reverse (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_32reverse(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_32reverse(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + __Pyx_RefNannySetupContext("reverse", 0); + + /* "aiohttp/_frozenlist.pyx":89 + * + * def reverse(self): + * self._check_frozen() # <<<<<<<<<<<<<< + * self._items.reverse() + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_frozenlist.pyx":90 + * def reverse(self): + * self._check_frozen() + * self._items.reverse() # <<<<<<<<<<<<<< + * + * def pop(self, index=-1): + */ + if (unlikely(__pyx_v_self->_items == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "reverse"); + __PYX_ERR(0, 90, __pyx_L1_error) + } + __pyx_t_2 = PyList_Reverse(__pyx_v_self->_items); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 90, __pyx_L1_error) + + /* "aiohttp/_frozenlist.pyx":88 + * self._items += list(items) + * + * def reverse(self): # <<<<<<<<<<<<<< + * self._check_frozen() + * self._items.reverse() + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.reverse", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":92 + * self._items.reverse() + * + * def pop(self, index=-1): # <<<<<<<<<<<<<< + * self._check_frozen() + * return self._items.pop(index) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_35pop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_35pop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_index = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("pop (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_index,0}; + PyObject* values[1] = {0}; + values[0] = ((PyObject *)__pyx_int_neg_1); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_index); + if (value) { values[0] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pop") < 0)) __PYX_ERR(0, 92, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_index = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("pop", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 92, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.pop", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_34pop(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), __pyx_v_index); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_34pop(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + __Pyx_RefNannySetupContext("pop", 0); + + /* "aiohttp/_frozenlist.pyx":93 + * + * def pop(self, index=-1): + * self._check_frozen() # <<<<<<<<<<<<<< + * return self._items.pop(index) + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_frozenlist.pyx":94 + * def pop(self, index=-1): + * self._check_frozen() + * return self._items.pop(index) # <<<<<<<<<<<<<< + * + * def append(self, item): + */ + __Pyx_XDECREF(__pyx_r); + if (unlikely(__pyx_v_self->_items == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "pop"); + __PYX_ERR(0, 94, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 94, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyList_PopIndex(__pyx_v_self->_items, __pyx_v_index, __pyx_t_2, 1, Py_ssize_t, PyInt_FromSsize_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":92 + * self._items.reverse() + * + * def pop(self, index=-1): # <<<<<<<<<<<<<< + * self._check_frozen() + * return self._items.pop(index) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.pop", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":96 + * return self._items.pop(index) + * + * def append(self, item): # <<<<<<<<<<<<<< + * self._check_frozen() + * return self._items.append(item) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_37append(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_37append(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("append (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_36append(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_item)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_36append(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + __Pyx_RefNannySetupContext("append", 0); + + /* "aiohttp/_frozenlist.pyx":97 + * + * def append(self, item): + * self._check_frozen() # <<<<<<<<<<<<<< + * return self._items.append(item) + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "aiohttp/_frozenlist.pyx":98 + * def append(self, item): + * self._check_frozen() + * return self._items.append(item) # <<<<<<<<<<<<<< + * + * def count(self, item): + */ + __Pyx_XDECREF(__pyx_r); + if (unlikely(__pyx_v_self->_items == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); + __PYX_ERR(0, 98, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyList_Append(__pyx_v_self->_items, __pyx_v_item); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 98, __pyx_L1_error) + __pyx_t_1 = __Pyx_Owned_Py_None(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":96 + * return self._items.pop(index) + * + * def append(self, item): # <<<<<<<<<<<<<< + * self._check_frozen() + * return self._items.append(item) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.append", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":100 + * return self._items.append(item) + * + * def count(self, item): # <<<<<<<<<<<<<< + * return self._items.count(item) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_39count(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_39count(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("count (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_38count(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_item)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_38count(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_RefNannySetupContext("count", 0); + + /* "aiohttp/_frozenlist.pyx":101 + * + * def count(self, item): + * return self._items.count(item) # <<<<<<<<<<<<<< + * + * def __repr__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_items, __pyx_n_s_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_item) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_item); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":100 + * return self._items.append(item) + * + * def count(self, item): # <<<<<<<<<<<<<< + * return self._items.count(item) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.count", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":103 + * return self._items.count(item) + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return ''.format(self.frozen, + * self._items) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_41__repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_41__repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_40__repr__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_40__repr__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "aiohttp/_frozenlist.pyx":104 + * + * def __repr__(self): + * return ''.format(self.frozen, # <<<<<<<<<<<<<< + * self._items) + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_FrozenList_frozen_r, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_self->frozen); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 104, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "aiohttp/_frozenlist.pyx":105 + * def __repr__(self): + * return ''.format(self.frozen, + * self._items) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_self->_items}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_self->_items}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + { + __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 104, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (__pyx_t_4) { + __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL; + } + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_t_3); + __Pyx_INCREF(__pyx_v_self->_items); + __Pyx_GIVEREF(__pyx_v_self->_items); + PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_self->_items); + __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "aiohttp/_frozenlist.pyx":103 + * return self._items.count(item) + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return ''.format(self.frozen, + * self._items) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "aiohttp/_frozenlist.pyx":6 + * cdef class FrozenList: + * + * cdef readonly bint frozen # <<<<<<<<<<<<<< + * cdef list _items + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_6frozen_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_6frozen_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_6frozen___get__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_6frozen___get__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->frozen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.frozen.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_43__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_43__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_42__reduce_cython__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_42__reduce_cython__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v__dict = 0; + int __pyx_v_use_setstate; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self._items, self.frozen) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->frozen); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_self->_items); + __Pyx_GIVEREF(__pyx_v_self->_items); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->_items); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_v_state = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self._items, self.frozen) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_2 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v__dict = __pyx_t_2; + __pyx_t_2 = 0; + + /* "(tree fragment)":7 + * state = (self._items, self.frozen) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_3 = (__pyx_v__dict != Py_None); + __pyx_t_4 = (__pyx_t_3 != 0); + if (__pyx_t_4) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v__dict); + __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self._items is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self._items, self.frozen) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + goto __pyx_L3; + } + + /* "(tree fragment)":11 + * use_setstate = True + * else: + * use_setstate = self._items is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, None), state + */ + /*else*/ { + __pyx_t_4 = (__pyx_v_self->_items != ((PyObject*)Py_None)); + __pyx_v_use_setstate = __pyx_t_4; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self._items is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, None), state + * else: + */ + __pyx_t_4 = (__pyx_v_use_setstate != 0); + if (__pyx_t_4) { + + /* "(tree fragment)":13 + * use_setstate = self._items is not None + * if use_setstate: + * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyx_unpickle_FrozenList); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_155820355); + __Pyx_GIVEREF(__pyx_int_155820355); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_155820355); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self._items is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, None), state + * else: + * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_FrozenList__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_FrozenList); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_155820355); + __Pyx_GIVEREF(__pyx_int_155820355); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_155820355); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); + __pyx_t_5 = 0; + __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + } + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_state); + __Pyx_XDECREF(__pyx_v__dict); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":16 + * else: + * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_FrozenList__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_45__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_45__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_44__setstate_cython__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_44__setstate_cython__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_FrozenList__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_7aiohttp_11_frozenlist___pyx_unpickle_FrozenList__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_FrozenList__set_state(self, __pyx_state) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_FrozenList(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_1__pyx_unpickle_FrozenList(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_7aiohttp_11_frozenlist_1__pyx_unpickle_FrozenList = {"__pyx_unpickle_FrozenList", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_11_frozenlist_1__pyx_unpickle_FrozenList, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_7aiohttp_11_frozenlist_1__pyx_unpickle_FrozenList(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_FrozenList (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_FrozenList", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_FrozenList", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_FrozenList") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + } + __pyx_v___pyx_type = values[0]; + __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_v___pyx_state = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_FrozenList", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("aiohttp._frozenlist.__pyx_unpickle_FrozenList", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_7aiohttp_11_frozenlist___pyx_unpickle_FrozenList(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7aiohttp_11_frozenlist___pyx_unpickle_FrozenList(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + __Pyx_RefNannySetupContext("__pyx_unpickle_FrozenList", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0x949a143: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x949a143 = (_items, frozen))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x949a143) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0x949a143: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x949a143 = (_items, frozen))" % __pyx_checksum) + * __pyx_result = FrozenList.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0x949a143: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x949a143 = (_items, frozen))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = FrozenList.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x94, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0x949a143: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x949a143 = (_items, frozen))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x949a143 = (_items, frozen))" % __pyx_checksum) + * __pyx_result = FrozenList.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_FrozenList__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_7aiohttp_11_frozenlist_FrozenList), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x949a143 = (_items, frozen))" % __pyx_checksum) + * __pyx_result = FrozenList.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_FrozenList__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = FrozenList.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_FrozenList__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_FrozenList__set_state(FrozenList __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_f_7aiohttp_11_frozenlist___pyx_unpickle_FrozenList__set_state(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x949a143 = (_items, frozen))" % __pyx_checksum) + * __pyx_result = FrozenList.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_FrozenList__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_FrozenList__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_FrozenList__set_state(FrozenList __pyx_result, tuple __pyx_state): + * __pyx_result._items = __pyx_state[0]; __pyx_result.frozen = __pyx_state[1] + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v___pyx_result); + __pyx_r = __pyx_v___pyx_result; + goto __pyx_L0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_FrozenList(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("aiohttp._frozenlist.__pyx_unpickle_FrozenList", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v___pyx_PickleError); + __Pyx_XDECREF(__pyx_v___pyx_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":11 + * __pyx_unpickle_FrozenList__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_FrozenList__set_state(FrozenList __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result._items = __pyx_state[0]; __pyx_result.frozen = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_f_7aiohttp_11_frozenlist___pyx_unpickle_FrozenList__set_state(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + __Pyx_RefNannySetupContext("__pyx_unpickle_FrozenList__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_FrozenList__set_state(FrozenList __pyx_result, tuple __pyx_state): + * __pyx_result._items = __pyx_state[0]; __pyx_result.frozen = __pyx_state[1] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[2]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->_items); + __Pyx_DECREF(__pyx_v___pyx_result->_items); + __pyx_v___pyx_result->_items = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->frozen = __pyx_t_2; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_FrozenList__set_state(FrozenList __pyx_result, tuple __pyx_state): + * __pyx_result._items = __pyx_state[0]; __pyx_result.frozen = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[2]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 13, __pyx_L1_error) + } + __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = ((__pyx_t_3 > 2) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 != 0); + __pyx_t_2 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "(tree fragment)":14 + * __pyx_result._items = __pyx_state[0]; __pyx_result.frozen = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[2]) # <<<<<<<<<<<<<< + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 14, __pyx_L1_error) + } + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + } + } + __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_FrozenList__set_state(FrozenList __pyx_result, tuple __pyx_state): + * __pyx_result._items = __pyx_state[0]; __pyx_result.frozen = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[2]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_FrozenList__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_FrozenList__set_state(FrozenList __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result._items = __pyx_state[0]; __pyx_result.frozen = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("aiohttp._frozenlist.__pyx_unpickle_FrozenList__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList __pyx_vtable_7aiohttp_11_frozenlist_FrozenList; + +static PyObject *__pyx_tp_new_7aiohttp_11_frozenlist_FrozenList(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)o); + p->__pyx_vtab = __pyx_vtabptr_7aiohttp_11_frozenlist_FrozenList; + p->_items = ((PyObject*)Py_None); Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_7aiohttp_11_frozenlist_FrozenList(PyObject *o) { + struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *p = (struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->_items); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_7aiohttp_11_frozenlist_FrozenList(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *p = (struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)o; + if (p->_items) { + e = (*v)(p->_items, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_7aiohttp_11_frozenlist_FrozenList(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *p = (struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)o; + tmp = ((PyObject*)p->_items); + p->_items = ((PyObject*)Py_None); Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} +static PyObject *__pyx_sq_item_7aiohttp_11_frozenlist_FrozenList(PyObject *o, Py_ssize_t i) { + PyObject *r; + PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; + r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); + Py_DECREF(x); + return r; +} + +static int __pyx_mp_ass_subscript_7aiohttp_11_frozenlist_FrozenList(PyObject *o, PyObject *i, PyObject *v) { + if (v) { + return __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_7__setitem__(o, i, v); + } + else { + return __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_9__delitem__(o, i); + } +} + +static PyObject *__pyx_getprop_7aiohttp_11_frozenlist_10FrozenList_frozen(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_6frozen_1__get__(o); +} + +static PyMethodDef __pyx_methods_7aiohttp_11_frozenlist_FrozenList[] = { + {"freeze", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_3freeze, METH_NOARGS, 0}, + {"__reversed__", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_15__reversed__, METH_NOARGS, 0}, + {"insert", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_19insert, METH_VARARGS|METH_KEYWORDS, 0}, + {"index", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_25index, METH_O, 0}, + {"remove", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_27remove, METH_O, 0}, + {"clear", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_29clear, METH_NOARGS, 0}, + {"extend", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_31extend, METH_O, 0}, + {"reverse", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_33reverse, METH_NOARGS, 0}, + {"pop", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_35pop, METH_VARARGS|METH_KEYWORDS, 0}, + {"append", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_37append, METH_O, 0}, + {"count", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_39count, METH_O, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_43__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_45__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_7aiohttp_11_frozenlist_FrozenList[] = { + {(char *)"frozen", __pyx_getprop_7aiohttp_11_frozenlist_10FrozenList_frozen, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PyNumberMethods __pyx_tp_as_number_FrozenList = { + 0, /*nb_add*/ + 0, /*nb_subtract*/ + 0, /*nb_multiply*/ + #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) + 0, /*nb_divide*/ + #endif + 0, /*nb_remainder*/ + 0, /*nb_divmod*/ + 0, /*nb_power*/ + 0, /*nb_negative*/ + 0, /*nb_positive*/ + 0, /*nb_absolute*/ + 0, /*nb_nonzero*/ + 0, /*nb_invert*/ + 0, /*nb_lshift*/ + 0, /*nb_rshift*/ + 0, /*nb_and*/ + 0, /*nb_xor*/ + 0, /*nb_or*/ + #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) + 0, /*nb_coerce*/ + #endif + 0, /*nb_int*/ + #if PY_MAJOR_VERSION < 3 + 0, /*nb_long*/ + #else + 0, /*reserved*/ + #endif + 0, /*nb_float*/ + #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) + 0, /*nb_oct*/ + #endif + #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) + 0, /*nb_hex*/ + #endif + __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_23__iadd__, /*nb_inplace_add*/ + 0, /*nb_inplace_subtract*/ + 0, /*nb_inplace_multiply*/ + #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) + 0, /*nb_inplace_divide*/ + #endif + 0, /*nb_inplace_remainder*/ + 0, /*nb_inplace_power*/ + 0, /*nb_inplace_lshift*/ + 0, /*nb_inplace_rshift*/ + 0, /*nb_inplace_and*/ + 0, /*nb_inplace_xor*/ + 0, /*nb_inplace_or*/ + 0, /*nb_floor_divide*/ + 0, /*nb_true_divide*/ + 0, /*nb_inplace_floor_divide*/ + 0, /*nb_inplace_true_divide*/ + 0, /*nb_index*/ + #if PY_VERSION_HEX >= 0x03050000 + 0, /*nb_matrix_multiply*/ + #endif + #if PY_VERSION_HEX >= 0x03050000 + 0, /*nb_inplace_matrix_multiply*/ + #endif +}; + +static PySequenceMethods __pyx_tp_as_sequence_FrozenList = { + __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_11__len__, /*sq_length*/ + 0, /*sq_concat*/ + 0, /*sq_repeat*/ + __pyx_sq_item_7aiohttp_11_frozenlist_FrozenList, /*sq_item*/ + 0, /*sq_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ + __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_21__contains__, /*sq_contains*/ + 0, /*sq_inplace_concat*/ + 0, /*sq_inplace_repeat*/ +}; + +static PyMappingMethods __pyx_tp_as_mapping_FrozenList = { + __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_11__len__, /*mp_length*/ + __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_5__getitem__, /*mp_subscript*/ + __pyx_mp_ass_subscript_7aiohttp_11_frozenlist_FrozenList, /*mp_ass_subscript*/ +}; + +static PyTypeObject __pyx_type_7aiohttp_11_frozenlist_FrozenList = { + PyVarObject_HEAD_INIT(0, 0) + "aiohttp._frozenlist.FrozenList", /*tp_name*/ + sizeof(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_7aiohttp_11_frozenlist_FrozenList, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_41__repr__, /*tp_repr*/ + &__pyx_tp_as_number_FrozenList, /*tp_as_number*/ + &__pyx_tp_as_sequence_FrozenList, /*tp_as_sequence*/ + &__pyx_tp_as_mapping_FrozenList, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_7aiohttp_11_frozenlist_FrozenList, /*tp_traverse*/ + __pyx_tp_clear_7aiohttp_11_frozenlist_FrozenList, /*tp_clear*/ + __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_17__richcmp__, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_13__iter__, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_7aiohttp_11_frozenlist_FrozenList, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_7aiohttp_11_frozenlist_FrozenList, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_7aiohttp_11_frozenlist_FrozenList, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif +}; + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec__frozenlist(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec__frozenlist}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "_frozenlist", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_Cannot_modify_frozen_list, __pyx_k_Cannot_modify_frozen_list, sizeof(__pyx_k_Cannot_modify_frozen_list), 0, 1, 0, 0}, + {&__pyx_n_s_FrozenList, __pyx_k_FrozenList, sizeof(__pyx_k_FrozenList), 0, 0, 1, 1}, + {&__pyx_kp_u_FrozenList_frozen_r, __pyx_k_FrozenList_frozen_r, sizeof(__pyx_k_FrozenList_frozen_r), 0, 1, 0, 0}, + {&__pyx_kp_s_Incompatible_checksums_s_vs_0x94, __pyx_k_Incompatible_checksums_s_vs_0x94, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x94), 0, 0, 1, 0}, + {&__pyx_n_s_MutableSequence, __pyx_k_MutableSequence, sizeof(__pyx_k_MutableSequence), 0, 0, 1, 1}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1}, + {&__pyx_n_s_aiohttp__frozenlist, __pyx_k_aiohttp__frozenlist, sizeof(__pyx_k_aiohttp__frozenlist), 0, 0, 1, 1}, + {&__pyx_n_s_clear, __pyx_k_clear, sizeof(__pyx_k_clear), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_collections_abc, __pyx_k_collections_abc, sizeof(__pyx_k_collections_abc), 0, 0, 1, 1}, + {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, + {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_index, __pyx_k_index, sizeof(__pyx_k_index), 0, 0, 1, 1}, + {&__pyx_n_s_item, __pyx_k_item, sizeof(__pyx_k_item), 0, 0, 1, 1}, + {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1}, + {&__pyx_n_s_iter, __pyx_k_iter, sizeof(__pyx_k_iter), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, + {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, + {&__pyx_n_s_pop, __pyx_k_pop, sizeof(__pyx_k_pop), 0, 0, 1, 1}, + {&__pyx_n_s_pos, __pyx_k_pos, sizeof(__pyx_k_pos), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_FrozenList, __pyx_k_pyx_unpickle_FrozenList, sizeof(__pyx_k_pyx_unpickle_FrozenList), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, + {&__pyx_n_s_register, __pyx_k_register, sizeof(__pyx_k_register), 0, 0, 1, 1}, + {&__pyx_n_s_remove, __pyx_k_remove, sizeof(__pyx_k_remove), 0, 0, 1, 1}, + {&__pyx_n_s_reversed, __pyx_k_reversed, sizeof(__pyx_k_reversed), 0, 0, 1, 1}, + {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, + {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(0, 19, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "aiohttp/_frozenlist.pyx":19 + * cdef object _check_frozen(self): + * if self.frozen: + * raise RuntimeError("Cannot modify frozen list.") # <<<<<<<<<<<<<< + * + * cdef inline object _fast_len(self): + */ + __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_Cannot_modify_frozen_list); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + + /* "(tree fragment)":1 + * def __pyx_unpickle_FrozenList(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_tuple__2 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + __pyx_codeobj__3 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__2, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_FrozenList, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_155820355 = PyInt_FromLong(155820355L); if (unlikely(!__pyx_int_155820355)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + __pyx_vtabptr_7aiohttp_11_frozenlist_FrozenList = &__pyx_vtable_7aiohttp_11_frozenlist_FrozenList; + __pyx_vtable_7aiohttp_11_frozenlist_FrozenList._check_frozen = (PyObject *(*)(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *))__pyx_f_7aiohttp_11_frozenlist_10FrozenList__check_frozen; + __pyx_vtable_7aiohttp_11_frozenlist_FrozenList._fast_len = (PyObject *(*)(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *))__pyx_f_7aiohttp_11_frozenlist_10FrozenList__fast_len; + if (PyType_Ready(&__pyx_type_7aiohttp_11_frozenlist_FrozenList) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_7aiohttp_11_frozenlist_FrozenList.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_11_frozenlist_FrozenList.tp_dictoffset && __pyx_type_7aiohttp_11_frozenlist_FrozenList.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_7aiohttp_11_frozenlist_FrozenList.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type_7aiohttp_11_frozenlist_FrozenList.tp_dict, __pyx_vtabptr_7aiohttp_11_frozenlist_FrozenList) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FrozenList, (PyObject *)&__pyx_type_7aiohttp_11_frozenlist_FrozenList) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7aiohttp_11_frozenlist_FrozenList) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __pyx_ptype_7aiohttp_11_frozenlist_FrozenList = &__pyx_type_7aiohttp_11_frozenlist_FrozenList; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION < 3 +#ifdef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC void +#else +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#endif +#else +#ifdef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC init_frozenlist(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC init_frozenlist(void) +#else +__Pyx_PyMODINIT_FUNC PyInit__frozenlist(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit__frozenlist(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { + result = PyDict_SetItemString(moddict, to_name, value); + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec__frozenlist(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module '_frozenlist' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit__frozenlist(void)", 0); + if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("_frozenlist", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_b); + __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_cython_runtime); + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_aiohttp___frozenlist) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "aiohttp._frozenlist")) { + if (unlikely(PyDict_SetItemString(modules, "aiohttp._frozenlist", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) goto __pyx_L1_error; + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) goto __pyx_L1_error; + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely(__Pyx_modinit_type_init_code() != 0)) goto __pyx_L1_error; + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "aiohttp/_frozenlist.pyx":1 + * from collections.abc import MutableSequence # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_MutableSequence); + __Pyx_GIVEREF(__pyx_n_s_MutableSequence); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_MutableSequence); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_collections_abc, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_MutableSequence); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_MutableSequence, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_frozenlist.pyx":108 + * + * + * MutableSequence.register(FrozenList) # <<<<<<<<<<<<<< + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_MutableSequence); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_register); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, ((PyObject *)__pyx_ptype_7aiohttp_11_frozenlist_FrozenList)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_FrozenList(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7aiohttp_11_frozenlist_1__pyx_unpickle_FrozenList, NULL, __pyx_n_s_aiohttp__frozenlist); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_FrozenList, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "aiohttp/_frozenlist.pyx":1 + * from collections.abc import MutableSequence # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init aiohttp._frozenlist", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init aiohttp._frozenlist"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + __Pyx_PyThreadState_declare + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { +#if CYTHON_COMPILING_IN_PYPY + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#else + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (!j) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; + if (likely(m && m->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { + Py_ssize_t l = m->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return m->sq_item(o, i); + } + } +#else + if (is_list || PySequence_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* ObjectGetItem */ +#if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) { + PyObject *runerr; + Py_ssize_t key_value; + PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence; + if (unlikely(!(m && m->sq_item))) { + PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name); + return NULL; + } + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) { + PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping; + if (likely(m && m->mp_subscript)) { + return m->mp_subscript(obj, key); + } + return __Pyx_PyObject_GetIndex(obj, key); +} +#endif + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif +#endif + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallNoArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, NULL, 0); + } +#endif +#ifdef __Pyx_CyFunction_USED + if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func))) +#else + if (likely(PyCFunction_Check(func))) +#endif + { + if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { + return __Pyx_PyObject_CallMethO(func, NULL); + } + } + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL); +} +#endif + +/* PyCFunctionFastCall */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { + PyCFunctionObject *func = (PyCFunctionObject*)func_obj; + PyCFunction meth = PyCFunction_GET_FUNCTION(func); + PyObject *self = PyCFunction_GET_SELF(func); + int flags = PyCFunction_GET_FLAGS(func); + assert(PyCFunction_Check(func)); + assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + /* _PyCFunction_FastCallDict() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller loses its exception */ + assert(!PyErr_Occurred()); + if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { + return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + } else { + return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + } +} +#endif + +/* PyObjectCallOneArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, &arg, 1); + } +#endif + if (likely(PyCFunction_Check(func))) { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); +#if CYTHON_FAST_PYCCALL + } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { + return __Pyx_PyCFunction_FastCall(func, &arg, 1); +#endif + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +/* PyIntCompare */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED long inplace) { + if (op1 == op2) { + Py_RETURN_TRUE; + } + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long a = PyInt_AS_LONG(op1); + if (a == b) Py_RETURN_TRUE; else Py_RETURN_FALSE; + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + int unequal; + unsigned long uintval; + Py_ssize_t size = Py_SIZE(op1); + const digit* digits = ((PyLongObject*)op1)->ob_digit; + if (intval == 0) { + if (size == 0) Py_RETURN_TRUE; else Py_RETURN_FALSE; + } else if (intval < 0) { + if (size >= 0) + Py_RETURN_FALSE; + intval = -intval; + size = -size; + } else { + if (size <= 0) + Py_RETURN_FALSE; + } + uintval = (unsigned long) intval; +#if PyLong_SHIFT * 4 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 4)) { + unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 3 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 3)) { + unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 2 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 2)) { + unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 1 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 1)) { + unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif + unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK)); + if (unequal == 0) Py_RETURN_TRUE; else Py_RETURN_FALSE; + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; + double a = PyFloat_AS_DOUBLE(op1); + if ((double)a == (double)b) Py_RETURN_TRUE; else Py_RETURN_FALSE; + } + return ( + PyObject_RichCompare(op1, op2, Py_EQ)); +} + +/* PyObjectCall2Args */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args, *result = NULL; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyFunction_FastCall(function, args, 2); + } + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyCFunction_FastCall(function, args, 2); + } + #endif + args = PyTuple_New(2); + if (unlikely(!args)) goto done; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + Py_INCREF(function); + result = __Pyx_PyObject_Call(function, args, NULL); + Py_DECREF(args); + Py_DECREF(function); +done: + return result; +} + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (descr != NULL) { + *method = descr; + return 0; + } + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(name)); +#endif + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod1 */ +static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { + PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); + Py_DECREF(method); + return result; +} +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { + PyObject *method = NULL, *result; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_Call2Args(method, obj, arg); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) return NULL; + return __Pyx__PyObject_CallMethod1(method, arg); +} + +/* pop_index */ +static PyObject* __Pyx__PyObject_PopNewIndex(PyObject* L, PyObject* py_ix) { + PyObject *r; + if (unlikely(!py_ix)) return NULL; + r = __Pyx__PyObject_PopIndex(L, py_ix); + Py_DECREF(py_ix); + return r; +} +static PyObject* __Pyx__PyObject_PopIndex(PyObject* L, PyObject* py_ix) { + return __Pyx_PyObject_CallMethod1(L, __pyx_n_s_pop, py_ix); +} +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static PyObject* __Pyx__PyList_PopIndex(PyObject* L, PyObject* py_ix, Py_ssize_t ix) { + Py_ssize_t size = PyList_GET_SIZE(L); + if (likely(size > (((PyListObject*)L)->allocated >> 1))) { + Py_ssize_t cix = ix; + if (cix < 0) { + cix += size; + } + if (likely(__Pyx_is_valid_index(cix, size))) { + PyObject* v = PyList_GET_ITEM(L, cix); + Py_SIZE(L) -= 1; + size -= 1; + memmove(&PyList_GET_ITEM(L, cix), &PyList_GET_ITEM(L, cix+1), (size_t)(size-cix)*sizeof(PyObject*)); + return v; + } + } + if (py_ix == Py_None) { + return __Pyx__PyObject_PopNewIndex(L, PyInt_FromSsize_t(ix)); + } else { + return __Pyx__PyObject_PopIndex(L, py_ix); + } +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; icurexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; + if (unlikely(PyTuple_Check(err))) + return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); +} +#endif + +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); +} + +/* GetAttr3 */ +static PyObject *__Pyx_GetAttr3Default(PyObject *d) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + __Pyx_PyErr_Clear(); + Py_INCREF(d); + return d; +} +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { + PyObject *r = __Pyx_GetAttr(o, n); + return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (!py_import) + goto bad; + #endif + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.')) { + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, 1); + if (!module) { + if (!PyErr_ExceptionMatches(PyExc_ImportError)) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, level); + #endif + } + } +bad: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* HasAttr */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { + PyObject *r; + if (unlikely(!__Pyx_PyBaseString_Check(n))) { + PyErr_SetString(PyExc_TypeError, + "hasattr(): attribute name must be string"); + return -1; + } + r = __Pyx_GetAttr(o, n); + if (unlikely(!r)) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, attr_name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(attr_name)); +#endif + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PyObject_GenericGetAttr */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { + if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { + return PyObject_GenericGetAttr(obj, attr_name); + } + return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); +} +#endif + +/* SetVTable */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable) { +#if PY_VERSION_HEX >= 0x02070000 + PyObject *ob = PyCapsule_New(vtable, 0, 0); +#else + PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); +#endif + if (!ob) + goto bad; + if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) + goto bad; + Py_DECREF(ob); + return 0; +bad: + Py_XDECREF(ob); + return -1; +} + +/* SetupReduce */ +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name); + if (likely(name_attr)) { + ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); + } else { + ret = -1; + } + if (unlikely(ret < 0)) { + PyErr_Clear(); + ret = 0; + } + Py_XDECREF(name_attr); + return ret; +} +static int __Pyx_setup_reduce(PyObject* type_obj) { + int ret = 0; + PyObject *object_reduce = NULL; + PyObject *object_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto GOOD; +#else + if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto GOOD; +#endif +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD; +#else + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD; +#endif + reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto BAD; + if (reduce_ex == object_reduce_ex) { +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD; +#endif + reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto BAD; + if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { + reduce_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_cython); if (unlikely(!reduce_cython)) goto BAD; + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto BAD; + setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate); + if (!setstate) PyErr_Clear(); + if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { + setstate_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate_cython); if (unlikely(!setstate_cython)) goto BAD; + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto BAD; + } + PyType_Modified((PyTypeObject*)type_obj); + } + } + goto GOOD; +BAD: + if (!PyErr_Occurred()) + PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); + ret = -1; +GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); +#endif + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} + +/* CLineInTraceback */ +#ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} + +/* AddTraceback */ +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); + } +} + +/* CIntFromPyVerify */ +#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +/* CIntFromPy */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntFromPy */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + case -2: + if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; ip) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type %.200s). " + "The ability to return an instance of a strict subclass of int " + "is deprecated, and may be removed in a future version of Python.", + Py_TYPE(result)->tp_name)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/venv-linux/lib/python3.6/site-packages/aiohttp/_frozenlist.cpython-36m-x86_64-linux-gnu.so b/venv-linux/lib/python3.6/site-packages/aiohttp/_frozenlist.cpython-36m-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..9305961ec498e02108bc76ac26fbdf419d155580 GIT binary patch literal 313395 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%0AB29+I(9A%jQbc%C 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