diff --git a/.efrocachemap b/.efrocachemap index 78116cb7..82a8a610 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -942,8 +942,8 @@ "assets/build/ba_data/models/zoeUpperArm.bob": "https://files.ballistica.net/cache/ba1/99/38/b7694cae0804260eeb337aa1676a", "assets/build/ba_data/models/zoeUpperLeg.bob": "https://files.ballistica.net/cache/ba1/83/4f/28b2202d0109fa93272c0b09fa2d", "assets/build/ba_data/python-site-packages/_yaml/__init__.py": "https://files.ballistica.net/cache/ba1/0d/45/65ba92f51d411dcffac8835b6130", - "assets/build/ba_data/python-site-packages/typing_extensions.py": "https://files.ballistica.net/cache/ba1/27/4d/9039ffb4ca5b8110c8f60ad9f1be", - "assets/build/ba_data/python-site-packages/yaml/__init__.py": "https://files.ballistica.net/cache/ba1/1f/8b/c96eb78c4b648a6c64c7f41c4fe7", + "assets/build/ba_data/python-site-packages/typing_extensions.py": "https://files.ballistica.net/cache/ba1/26/a1/b771d51fc1cc475cf1f44f9d43d2", + "assets/build/ba_data/python-site-packages/yaml/__init__.py": "https://files.ballistica.net/cache/ba1/e5/47/17715ca7620f3b9749558b9dcb2d", "assets/build/ba_data/python-site-packages/yaml/composer.py": "https://files.ballistica.net/cache/ba1/3e/aa/d7fcfc4707ad19a6964d72654b82", "assets/build/ba_data/python-site-packages/yaml/constructor.py": "https://files.ballistica.net/cache/ba1/f4/29/cd8c7f5a2296d8f1715ad49b5797", "assets/build/ba_data/python-site-packages/yaml/cyaml.py": "https://files.ballistica.net/cache/ba1/b4/98/dcdd4c31e2ff2c7a938170694020", @@ -955,9 +955,9 @@ "assets/build/ba_data/python-site-packages/yaml/nodes.py": "https://files.ballistica.net/cache/ba1/e5/f1/1d2e0edb5460dff0ebb10a92fe24", "assets/build/ba_data/python-site-packages/yaml/parser.py": "https://files.ballistica.net/cache/ba1/c0/a6/e94c7a3f8f4f08803f68f9387731", "assets/build/ba_data/python-site-packages/yaml/reader.py": "https://files.ballistica.net/cache/ba1/0d/58/9196a3104da22ed15afe27f67387", - "assets/build/ba_data/python-site-packages/yaml/representer.py": "https://files.ballistica.net/cache/ba1/95/90/c33c15a683b8d5de614d15031818", - "assets/build/ba_data/python-site-packages/yaml/resolver.py": "https://files.ballistica.net/cache/ba1/8c/fc/fe9be1f19e7b648822029c0dc946", - "assets/build/ba_data/python-site-packages/yaml/scanner.py": "https://files.ballistica.net/cache/ba1/58/be/e6e039c64bf30d0f13aa4d02e2cb", + "assets/build/ba_data/python-site-packages/yaml/representer.py": "https://files.ballistica.net/cache/ba1/81/c0/f24b6b2f2c777f9467bd24aa2789", + "assets/build/ba_data/python-site-packages/yaml/resolver.py": "https://files.ballistica.net/cache/ba1/e6/98/e6145dd5cfebbc456fb3881ce523", + "assets/build/ba_data/python-site-packages/yaml/scanner.py": "https://files.ballistica.net/cache/ba1/de/13/75284ee45274f24637d9c79bd0cb", "assets/build/ba_data/python-site-packages/yaml/serializer.py": "https://files.ballistica.net/cache/ba1/19/a9/f996e312d2ca2d4cb974bcc4f5bc", "assets/build/ba_data/python-site-packages/yaml/tokens.py": "https://files.ballistica.net/cache/ba1/93/58/d4c7731a1b991391782441f2ba8e", "assets/build/ba_data/textures/achievementBoxer.dds": "https://files.ballistica.net/cache/ba1/26/16/f3926c9f3aeb22efa0d452daa6c0", @@ -2566,123 +2566,124 @@ "assets/build/ba_data/textures/zoeIcon_preview.png": "https://files.ballistica.net/cache/ba1/e2/af/ab381c9d7242aedf8535fc90252f", "assets/build/pylib-android/__future__.py": "https://files.ballistica.net/cache/ba1/80/bf/b80a51b6855fbbc2f19773334c68", "assets/build/pylib-android/__phello__.foo.py": "https://files.ballistica.net/cache/ba1/18/38/a9706423d7445928a1c07345b100", + "assets/build/pylib-android/_aix_support.py": "https://files.ballistica.net/cache/ba1/39/0c/1c9160bcc27e235d50cc1148efee", "assets/build/pylib-android/_bootlocale.py": "https://files.ballistica.net/cache/ba1/42/c3/38a2d6f5e2467c1cab04a024c2ca", - "assets/build/pylib-android/_collections_abc.py": "https://files.ballistica.net/cache/ba1/5d/e8/8af7f48ff8e0cf88e87339221869", + "assets/build/pylib-android/_bootsubprocess.py": "https://files.ballistica.net/cache/ba1/bc/ce/d576eeb751cae56049dc067454fa", + "assets/build/pylib-android/_collections_abc.py": "https://files.ballistica.net/cache/ba1/8c/9f/9e922a064c6191378bdee54f34b3", "assets/build/pylib-android/_compat_pickle.py": "https://files.ballistica.net/cache/ba1/03/70/f2d2ed965337f8ed80f6fffb37e1", "assets/build/pylib-android/_compression.py": "https://files.ballistica.net/cache/ba1/93/7f/56c3fd789058399b898c5c527b92", - "assets/build/pylib-android/_dummy_thread.py": "https://files.ballistica.net/cache/ba1/5b/a5/82c6ed2ef16974f8cfd5ee2e11f6", "assets/build/pylib-android/_markupbase.py": "https://files.ballistica.net/cache/ba1/a5/5e/6ad43bfbcd054529b852fa9d9919", - "assets/build/pylib-android/_osx_support.py": "https://files.ballistica.net/cache/ba1/1a/dd/18c02bae9dd4e2b651071dd0e606", + "assets/build/pylib-android/_osx_support.py": "https://files.ballistica.net/cache/ba1/19/10/b2eeaf44e153de1cedba97bd5051", "assets/build/pylib-android/_py_abc.py": "https://files.ballistica.net/cache/ba1/5d/06/d6095f475b0d26f707d3d7484080", "assets/build/pylib-android/_pydecimal.py": "https://files.ballistica.net/cache/ba1/a5/4c/6fb8db34dfeb6c44bf18d555970d", - "assets/build/pylib-android/_pyio.py": "https://files.ballistica.net/cache/ba1/30/f3/9c14ceae8041894ae6914467ba66", + "assets/build/pylib-android/_pyio.py": "https://files.ballistica.net/cache/ba1/47/02/ffbf1575c6b449408f8f42d31333", "assets/build/pylib-android/_sitebuiltins.py": "https://files.ballistica.net/cache/ba1/6d/7a/d76775d8f9d27c45135ca654dfd0", - "assets/build/pylib-android/_strptime.py": "https://files.ballistica.net/cache/ba1/2d/6d/ec0a63b650f5c5fdaf7a1b65ae8f", + "assets/build/pylib-android/_strptime.py": "https://files.ballistica.net/cache/ba1/03/b9/20bbd93982e9d620d42cacd1f4a2", "assets/build/pylib-android/_threading_local.py": "https://files.ballistica.net/cache/ba1/da/4d/144f886b39ebc097fdcea22eecc8", - "assets/build/pylib-android/_weakrefset.py": "https://files.ballistica.net/cache/ba1/5a/9d/765a6159b6db54bbffc249e35833", - "assets/build/pylib-android/abc.py": "https://files.ballistica.net/cache/ba1/46/99/e17cba0561b17a01327a35cd1aa6", - "assets/build/pylib-android/aifc.py": "https://files.ballistica.net/cache/ba1/8a/d6/25bd39b0581236a85b096ba3fe9d", - "assets/build/pylib-android/antigravity.py": "https://files.ballistica.net/cache/ba1/83/cf/9d1698d68e0e260e6bbefec5a516", - "assets/build/pylib-android/argparse.py": "https://files.ballistica.net/cache/ba1/cd/3b/9fdf463eacafdba271d8fe1d9b2d", - "assets/build/pylib-android/ast.py": "https://files.ballistica.net/cache/ba1/c7/5b/fa7fdcd6fe651e33b42e57ef827d", - "assets/build/pylib-android/asynchat.py": "https://files.ballistica.net/cache/ba1/5e/b1/f69db224de08b5e119f5c0f425a8", - "assets/build/pylib-android/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/37/de/1740d5e10a554f64af0a2ddc4659", + "assets/build/pylib-android/_weakrefset.py": "https://files.ballistica.net/cache/ba1/51/e9/e3d953fd714d8b74c65b708529d7", + "assets/build/pylib-android/abc.py": "https://files.ballistica.net/cache/ba1/76/7f/fd3c1563b90c10a38a3b928a4561", + "assets/build/pylib-android/aifc.py": "https://files.ballistica.net/cache/ba1/e4/58/a75af0c597af1ed6a69b0d0408f3", + "assets/build/pylib-android/antigravity.py": "https://files.ballistica.net/cache/ba1/bc/5c/f8951b7abdac55a1a32d74b2fe50", + "assets/build/pylib-android/argparse.py": "https://files.ballistica.net/cache/ba1/3f/f5/1c9d4af0fc412ddf1bda25f71a83", + "assets/build/pylib-android/ast.py": "https://files.ballistica.net/cache/ba1/11/a5/3bb16498856560ba19c04de3f8b7", + "assets/build/pylib-android/asynchat.py": "https://files.ballistica.net/cache/ba1/d6/a8/6fc59418c10885c853214296ed0f", + "assets/build/pylib-android/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/67/2e/d4b9d05e7bcc794891d36d72f374", "assets/build/pylib-android/asyncio/__main__.py": "https://files.ballistica.net/cache/ba1/00/05/038811ebbd5ac847aaf99cd8f2f9", - "assets/build/pylib-android/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/80/d1/0975e5cb364d63f1f85136bc4d80", + "assets/build/pylib-android/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/06/81/3de85c867aeb41289899dae318ba", "assets/build/pylib-android/asyncio/base_futures.py": "https://files.ballistica.net/cache/ba1/89/ee/3f980b3d7b480c7fe3d34ff876f5", "assets/build/pylib-android/asyncio/base_subprocess.py": "https://files.ballistica.net/cache/ba1/72/c7/ccf47dbfa076fdf5dd38474a18dc", "assets/build/pylib-android/asyncio/base_tasks.py": "https://files.ballistica.net/cache/ba1/f0/b8/3f75f12f1851216b9a16772dfa63", "assets/build/pylib-android/asyncio/constants.py": "https://files.ballistica.net/cache/ba1/b6/63/66f781190cbd10a134616e67b516", "assets/build/pylib-android/asyncio/coroutines.py": "https://files.ballistica.net/cache/ba1/72/cd/f838323eebe2eeb8f5ea19e5cebe", - "assets/build/pylib-android/asyncio/events.py": "https://files.ballistica.net/cache/ba1/a7/1e/c69f462b1a03515672da486b7a6a", + "assets/build/pylib-android/asyncio/events.py": "https://files.ballistica.net/cache/ba1/7e/f3/ceda680f5774ed662e390ae921b6", "assets/build/pylib-android/asyncio/exceptions.py": "https://files.ballistica.net/cache/ba1/aa/89/66db5cb3f71048a541224585f7fa", "assets/build/pylib-android/asyncio/format_helpers.py": "https://files.ballistica.net/cache/ba1/ff/c2/2be0f7aa8dc71aa3a7cee83ed5c7", - "assets/build/pylib-android/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/f1/da/2eff642e6a966b374b29361dfbb2", - "assets/build/pylib-android/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/07/0b/a37203e779cbd3b3fdf825a36849", + "assets/build/pylib-android/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/12/40/3addb145116d4e92d000f98194c9", + "assets/build/pylib-android/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/6e/c9/538a1d250e50f50e55ac69c52e35", "assets/build/pylib-android/asyncio/log.py": "https://files.ballistica.net/cache/ba1/da/7f/235e1251f8838a239dd3ec9e78c3", - "assets/build/pylib-android/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/ae/7f/8b19b4c9d52569b3bdd311e8c799", + "assets/build/pylib-android/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/2f/97/dae8fa67cd41720ced451008903d", "assets/build/pylib-android/asyncio/protocols.py": "https://files.ballistica.net/cache/ba1/0d/2f/e3e6c48d73836172a211a6c39e68", - "assets/build/pylib-android/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/1c/69/6d73ee2286d3dbce70990a8ff174", - "assets/build/pylib-android/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/1b/f3/d9efb6ae310d983d86bb5de9d054", - "assets/build/pylib-android/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/d8/21/a266891b38ae68414a3c1b6b3c77", - "assets/build/pylib-android/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/ce/51/b4dc2c5750d26233aabbbfec3946", + "assets/build/pylib-android/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/87/f8/59d89a44c83648f33bea5bd227de", + "assets/build/pylib-android/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/f1/d0/413dbcfc7ab91c3ae994a9293393", + "assets/build/pylib-android/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/c0/0f/e91ef4410b579485267434c76135", + "assets/build/pylib-android/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/ca/7c/7f8716eab3ad1ba5fea281191348", "assets/build/pylib-android/asyncio/staggered.py": "https://files.ballistica.net/cache/ba1/f5/44/45851798434a9265934b4bb83368", "assets/build/pylib-android/asyncio/streams.py": "https://files.ballistica.net/cache/ba1/92/0c/884950c0c3a32bc5d2b763ca0044", "assets/build/pylib-android/asyncio/subprocess.py": "https://files.ballistica.net/cache/ba1/5f/44/b98545e4c3c4c178f8e6d1615413", - "assets/build/pylib-android/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/bf/1a/caa31af401c2cc53c5f01b750c80", + "assets/build/pylib-android/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/5d/80/66b7034f9d2251cdb392c2d441f7", + "assets/build/pylib-android/asyncio/threads.py": "https://files.ballistica.net/cache/ba1/86/be/92839ce16818b1b99703722fbfb7", "assets/build/pylib-android/asyncio/transports.py": "https://files.ballistica.net/cache/ba1/58/72/582cdbbc0857f836dc8c4edbf036", "assets/build/pylib-android/asyncio/trsock.py": "https://files.ballistica.net/cache/ba1/52/c8/e4d2abe8aaccd35c8f79d5b77431", - "assets/build/pylib-android/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/84/8b/185c2457814e6ca8e8688bca9c32", - "assets/build/pylib-android/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/4b/1a/1b264ab96fcca89e3eb8fe2614de", + "assets/build/pylib-android/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/7c/3a/6b387c2ccf1cdee0f2e9f70cba5c", + "assets/build/pylib-android/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/7e/62/f3ff97fc2327e3721319f9fed5dc", "assets/build/pylib-android/asyncio/windows_utils.py": "https://files.ballistica.net/cache/ba1/2d/e4/dbd2379dd123a69aae5aa15ae6c2", - "assets/build/pylib-android/asyncore.py": "https://files.ballistica.net/cache/ba1/a7/5c/f528090ab4472aff3c8798cf42c9", - "assets/build/pylib-android/base64.py": "https://files.ballistica.net/cache/ba1/4f/23/c5419203b2ccd1ae27fd49d2cc56", - "assets/build/pylib-android/bdb.py": "https://files.ballistica.net/cache/ba1/ae/3f/acdf9e655546d96a28c484506fe9", - "assets/build/pylib-android/binhex.py": "https://files.ballistica.net/cache/ba1/f1/dd/52f057bf1cd0eb01f4f7ae65bab7", - "assets/build/pylib-android/bisect.py": "https://files.ballistica.net/cache/ba1/e3/4e/c40a30927372b6b745aec7954d0d", - "assets/build/pylib-android/bz2.py": "https://files.ballistica.net/cache/ba1/8d/d6/d0ff69f6690ab56e45f7277abec0", - "assets/build/pylib-android/cProfile.py": "https://files.ballistica.net/cache/ba1/88/c3/5db4369b421e58fd76e20d9d6006", + "assets/build/pylib-android/asyncore.py": "https://files.ballistica.net/cache/ba1/3a/30/852801d56e50eb8542399bb88ddb", + "assets/build/pylib-android/base64.py": "https://files.ballistica.net/cache/ba1/00/7f/66fcd92eefbc601aac11a99958a6", + "assets/build/pylib-android/bdb.py": "https://files.ballistica.net/cache/ba1/a0/58/9e40fcb457a4088bbaa52f1d11f5", + "assets/build/pylib-android/binhex.py": "https://files.ballistica.net/cache/ba1/4b/e7/63c6bfa21977b4167847714df8f2", + "assets/build/pylib-android/bisect.py": "https://files.ballistica.net/cache/ba1/5f/7d/0658f581d095e98da05a4e69526d", + "assets/build/pylib-android/bz2.py": "https://files.ballistica.net/cache/ba1/27/9f/581d95a46fee8d4391e22906e7c4", + "assets/build/pylib-android/cProfile.py": "https://files.ballistica.net/cache/ba1/c2/f9/c4bdc9b8caf07e4f005b01c42187", "assets/build/pylib-android/calendar.py": "https://files.ballistica.net/cache/ba1/52/59/c3f74ff2b6e664611af5f319f125", - "assets/build/pylib-android/cgi.py": "https://files.ballistica.net/cache/ba1/61/ce/9797194be01655e63ab2bf04db74", + "assets/build/pylib-android/cgi.py": "https://files.ballistica.net/cache/ba1/37/ed/4b4511a9ba0149265b8e54a8c0c2", "assets/build/pylib-android/cgitb.py": "https://files.ballistica.net/cache/ba1/44/fd/df9a22db6689da108e526e794e62", "assets/build/pylib-android/chunk.py": "https://files.ballistica.net/cache/ba1/f6/fe/3c43d1dc84ee74b8a170c61271a3", "assets/build/pylib-android/cmd.py": "https://files.ballistica.net/cache/ba1/f0/d9/8cec4bcbbfd195d46c3ad637df71", "assets/build/pylib-android/code.py": "https://files.ballistica.net/cache/ba1/7a/a4/ee660f11ad995354a3b21efbfb1c", - "assets/build/pylib-android/codecs.py": "https://files.ballistica.net/cache/ba1/46/7d/c9abbb72640e0270d05373ca097d", - "assets/build/pylib-android/codeop.py": "https://files.ballistica.net/cache/ba1/4a/36/f4618c8f8239611208f9fa60d677", - "assets/build/pylib-android/collections/__init__.py": "https://files.ballistica.net/cache/ba1/20/79/d937c7f2b0121cda43113792991b", - "assets/build/pylib-android/collections/abc.py": "https://files.ballistica.net/cache/ba1/29/45/a03469c0f5eb61d823b277d547ce", + "assets/build/pylib-android/codecs.py": "https://files.ballistica.net/cache/ba1/e0/79/8b6dc0aaec7e5cf8a6a1e4240589", + "assets/build/pylib-android/codeop.py": "https://files.ballistica.net/cache/ba1/77/32/e76951f85328659e11f528f5c9b1", + "assets/build/pylib-android/collections/__init__.py": "https://files.ballistica.net/cache/ba1/53/9b/0aea4ac41c020b051cb22e770125", + "assets/build/pylib-android/collections/abc.py": "https://files.ballistica.net/cache/ba1/f3/59/731e8f57c99391bcb31da8916e19", "assets/build/pylib-android/colorsys.py": "https://files.ballistica.net/cache/ba1/d6/3b/b932055a535b017694e91296168c", - "assets/build/pylib-android/compileall.py": "https://files.ballistica.net/cache/ba1/e5/57/2b92b857953e59824989ede82453", + "assets/build/pylib-android/compileall.py": "https://files.ballistica.net/cache/ba1/0b/80/a5a17eb2090a3cf316bca074ac2d", "assets/build/pylib-android/concurrent/__init__.py": "https://files.ballistica.net/cache/ba1/37/3e/87f9ab4111608e0442bc82ff572f", "assets/build/pylib-android/concurrent/futures/__init__.py": "https://files.ballistica.net/cache/ba1/0a/eb/2954f0e71c4a1e71db5c13548aec", - "assets/build/pylib-android/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/fc/07/2434cb1efcfdb8e396d2673d87e3", - "assets/build/pylib-android/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/a7/6e/a824dd0ccc5c3358e146fa4a143e", - "assets/build/pylib-android/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/46/b3/8ff0e8ddfd8ef4c2b65789015c0d", - "assets/build/pylib-android/configparser.py": "https://files.ballistica.net/cache/ba1/a2/cb/c077f4497d47011a41fb761da7e6", - "assets/build/pylib-android/contextlib.py": "https://files.ballistica.net/cache/ba1/9b/d5/72f4ba522348c8680098a35fed99", + "assets/build/pylib-android/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/b1/82/05c05bd5c9380f474f0cf71226e9", + "assets/build/pylib-android/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/ab/d3/505d91ad1cc1b32e993db80b056a", + "assets/build/pylib-android/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/41/a0/be5b131d8b9637e24c53b3d4d941", + "assets/build/pylib-android/configparser.py": "https://files.ballistica.net/cache/ba1/9c/f1/4f2aa888868fbedfbb0b1ea69697", + "assets/build/pylib-android/contextlib.py": "https://files.ballistica.net/cache/ba1/46/42/98646a3bef36f2d81c3d19751cf5", "assets/build/pylib-android/contextvars.py": "https://files.ballistica.net/cache/ba1/ed/ff/2f1089520caf4910564799a71d33", "assets/build/pylib-android/copy.py": "https://files.ballistica.net/cache/ba1/2a/08/2626c3ca9b69eeea292688b30d87", - "assets/build/pylib-android/copyreg.py": "https://files.ballistica.net/cache/ba1/51/04/65c5689a2508a440fac7c453d907", - "assets/build/pylib-android/crypt.py": "https://files.ballistica.net/cache/ba1/a0/da/1dbb9eefae96fdac2bf0f2aed3a9", + "assets/build/pylib-android/copyreg.py": "https://files.ballistica.net/cache/ba1/3b/a6/aace95b2ea3f1a717217f013147a", + "assets/build/pylib-android/crypt.py": "https://files.ballistica.net/cache/ba1/bf/26/6a8ef29965b7a22c9a5ad042b8b0", "assets/build/pylib-android/csv.py": "https://files.ballistica.net/cache/ba1/4e/8b/5ec41815afbc80e90562abf06b28", - "assets/build/pylib-android/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/e3/e2/3ef58f0ffbf1e44f2290e7afb507", + "assets/build/pylib-android/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/71/ad/62f870b48def255b2904695874b9", "assets/build/pylib-android/ctypes/_aix.py": "https://files.ballistica.net/cache/ba1/7b/ab/15a8d673206dbd15b7803f83ff58", "assets/build/pylib-android/ctypes/_endian.py": "https://files.ballistica.net/cache/ba1/4c/82/46e7f99faf6d1fac55192c5d06e1", "assets/build/pylib-android/ctypes/macholib/__init__.py": "https://files.ballistica.net/cache/ba1/44/d7/a915d5da7e8ef1030b43bb9b51ab", - "assets/build/pylib-android/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/ac/b9/6cd503c12b34f6e72d90ca811910", + "assets/build/pylib-android/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/f9/66/e601b611dac985d7a89b84e739ba", "assets/build/pylib-android/ctypes/macholib/dylib.py": "https://files.ballistica.net/cache/ba1/70/15/1df06874f788afb7b6742a5812a7", "assets/build/pylib-android/ctypes/macholib/framework.py": "https://files.ballistica.net/cache/ba1/86/80/861e32730cec812366d7d06f6185", "assets/build/pylib-android/ctypes/util.py": "https://files.ballistica.net/cache/ba1/c5/37/5bc64177f2b03f1b240712b330d5", "assets/build/pylib-android/ctypes/wintypes.py": "https://files.ballistica.net/cache/ba1/48/c4/069f51da9b065dad73b199acb71b", - "assets/build/pylib-android/curses/__init__.py": "https://files.ballistica.net/cache/ba1/8a/96/a0fc5582125f7ebd8f3df4c15ebb", + "assets/build/pylib-android/curses/__init__.py": "https://files.ballistica.net/cache/ba1/0e/8e/5e9ad5cbe8d8e09a61e5c186ccfb", "assets/build/pylib-android/curses/ascii.py": "https://files.ballistica.net/cache/ba1/d9/f8/0a6587dae44d1694145b0dc96bc1", "assets/build/pylib-android/curses/has_key.py": "https://files.ballistica.net/cache/ba1/a0/10/afbfbd5688090da7ea41e933174b", "assets/build/pylib-android/curses/panel.py": "https://files.ballistica.net/cache/ba1/42/0f/580d5d6de90a64ade37f0a8e4696", "assets/build/pylib-android/curses/textpad.py": "https://files.ballistica.net/cache/ba1/a9/3f/ac729e39c1c9fcecd8e3525c7079", - "assets/build/pylib-android/dataclasses.py": "https://files.ballistica.net/cache/ba1/97/c8/24628bf4207b0ee2e29c1cd63fcf", - "assets/build/pylib-android/datetime.py": "https://files.ballistica.net/cache/ba1/4b/89/2740b22a3597dab5c0330ac7c873", + "assets/build/pylib-android/dataclasses.py": "https://files.ballistica.net/cache/ba1/83/99/bcc67a14754749cc642d39501b17", + "assets/build/pylib-android/datetime.py": "https://files.ballistica.net/cache/ba1/e3/8a/1b743748792565d1f06cc091bdf3", "assets/build/pylib-android/decimal.py": "https://files.ballistica.net/cache/ba1/92/94/b8be378718b3ede8f05f07aa257b", - "assets/build/pylib-android/difflib.py": "https://files.ballistica.net/cache/ba1/bb/cf/6db21f4ed1982a8ee1337e12a8c1", + "assets/build/pylib-android/difflib.py": "https://files.ballistica.net/cache/ba1/f9/a1/b70c1219881180dc79b788e0f944", "assets/build/pylib-android/dis.py": "https://files.ballistica.net/cache/ba1/7a/6d/8e0820eb6e975bc167a722d30b42", - "assets/build/pylib-android/doctest.py": "https://files.ballistica.net/cache/ba1/f7/33/cce48fd34ce6f6054e40c338c3ca", - "assets/build/pylib-android/dummy_threading.py": "https://files.ballistica.net/cache/ba1/20/2f/ec8e68634908312148b53a5dfd4c", + "assets/build/pylib-android/doctest.py": "https://files.ballistica.net/cache/ba1/15/e2/3f23edc4eb1292aae2efae3dd23b", "assets/build/pylib-android/email/__init__.py": "https://files.ballistica.net/cache/ba1/2b/f0/8c85ab15e7cdbdaa0e1705223012", "assets/build/pylib-android/email/_encoded_words.py": "https://files.ballistica.net/cache/ba1/08/fa/de22bc96e1e332bbe1cf76162a1c", "assets/build/pylib-android/email/_header_value_parser.py": "https://files.ballistica.net/cache/ba1/2d/c8/cbec982a4900ba1c15ea815624d7", - "assets/build/pylib-android/email/_parseaddr.py": "https://files.ballistica.net/cache/ba1/e0/b3/b0167200b852c46e60116ba12740", + "assets/build/pylib-android/email/_parseaddr.py": "https://files.ballistica.net/cache/ba1/c5/43/98a45ca46ee9948447cfc4a23966", "assets/build/pylib-android/email/_policybase.py": "https://files.ballistica.net/cache/ba1/19/f9/844a8a848bc5670a810d06f0a6de", "assets/build/pylib-android/email/base64mime.py": "https://files.ballistica.net/cache/ba1/6b/52/907171fcf7e3baf097a4d503d79c", "assets/build/pylib-android/email/charset.py": "https://files.ballistica.net/cache/ba1/a0/ba/c0b3f8daa9769adb9ba291937736", - "assets/build/pylib-android/email/contentmanager.py": "https://files.ballistica.net/cache/ba1/d6/da/4125ae899a328aa5a3ddccb81cde", + "assets/build/pylib-android/email/contentmanager.py": "https://files.ballistica.net/cache/ba1/de/89/2d4ea4cf8a5de335f1f8cb9336b9", "assets/build/pylib-android/email/encoders.py": "https://files.ballistica.net/cache/ba1/7a/9c/eca8d9e60fa733457fc32facd2fe", "assets/build/pylib-android/email/errors.py": "https://files.ballistica.net/cache/ba1/8c/69/09c2e89bad6d5619cd4758db6bdd", "assets/build/pylib-android/email/feedparser.py": "https://files.ballistica.net/cache/ba1/98/6d/61c614d442ca8451320ca7fe4e86", "assets/build/pylib-android/email/generator.py": "https://files.ballistica.net/cache/ba1/f6/2c/862c0a2aa12d0e1c0ce1ca305299", "assets/build/pylib-android/email/header.py": "https://files.ballistica.net/cache/ba1/bb/cb/194570894c14063cd85ea2d8ab6a", - "assets/build/pylib-android/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/44/93/a6b7f9a32043296668473e21997e", + "assets/build/pylib-android/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/a7/ba/ff572e4fa01850100bd81c198d7c", "assets/build/pylib-android/email/iterators.py": "https://files.ballistica.net/cache/ba1/a5/02/2f56787a3fb91547c61284d7facd", - "assets/build/pylib-android/email/message.py": "https://files.ballistica.net/cache/ba1/26/48/c2ba775069f07f9980dd7ba388dc", + "assets/build/pylib-android/email/message.py": "https://files.ballistica.net/cache/ba1/5d/5f/3a462d2034f763839e73f4286d85", "assets/build/pylib-android/email/mime/__init__.py": "https://files.ballistica.net/cache/ba1/42/fb/835abe12a4e1e72a5d1711d12cde", "assets/build/pylib-android/email/mime/application.py": "https://files.ballistica.net/cache/ba1/47/49/cb957a7a159b5f2259115b7ea27a", "assets/build/pylib-android/email/mime/audio.py": "https://files.ballistica.net/cache/ba1/67/1e/7ba0091888a55ada476f1300e686", @@ -2695,9 +2696,9 @@ "assets/build/pylib-android/email/parser.py": "https://files.ballistica.net/cache/ba1/56/8f/cfad8593bd540c4c2d1b9ab9e133", "assets/build/pylib-android/email/policy.py": "https://files.ballistica.net/cache/ba1/a9/f3/301e5f1e73bed7a7bfa4a113ab14", "assets/build/pylib-android/email/quoprimime.py": "https://files.ballistica.net/cache/ba1/aa/32/7c1d81e4b7b757020947292f4031", - "assets/build/pylib-android/email/utils.py": "https://files.ballistica.net/cache/ba1/c2/f9/e2479bbc1b5957383614e197daf3", + "assets/build/pylib-android/email/utils.py": "https://files.ballistica.net/cache/ba1/1a/93/a810d9f240ad2bdfff06495cbc6c", "assets/build/pylib-android/encodings/__init__.py": "https://files.ballistica.net/cache/ba1/dc/1a/1120389aa62a70fd5a669cab1dfc", - "assets/build/pylib-android/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/4c/10/6d8dd88e91acce8b8ad99b2f3fdf", + "assets/build/pylib-android/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/6e/5c/2f911ed1bbeec1fce518171c32bc", "assets/build/pylib-android/encodings/ascii.py": "https://files.ballistica.net/cache/ba1/f6/30/d35b4c5d478856f618208177d679", "assets/build/pylib-android/encodings/base64_codec.py": "https://files.ballistica.net/cache/ba1/7f/03/88c0997433cffad3d142857389b8", "assets/build/pylib-android/encodings/big5.py": "https://files.ballistica.net/cache/ba1/3c/a3/0310d813b4a6822b0affdec62f00", @@ -2784,7 +2785,6 @@ "assets/build/pylib-android/encodings/kz1048.py": "https://files.ballistica.net/cache/ba1/0e/48/fc8cea0eb08e128d18afbd21bc40", "assets/build/pylib-android/encodings/latin_1.py": "https://files.ballistica.net/cache/ba1/be/e2/98028955fa7784eabd731554df96", "assets/build/pylib-android/encodings/mac_arabic.py": "https://files.ballistica.net/cache/ba1/4e/3d/c348df138dd892e764c653a5e3ad", - "assets/build/pylib-android/encodings/mac_centeuro.py": "https://files.ballistica.net/cache/ba1/6a/d1/bb0368df7e95ca42a8fc484ca463", "assets/build/pylib-android/encodings/mac_croatian.py": "https://files.ballistica.net/cache/ba1/b7/1c/2e050fc360dc363d976321d0196b", "assets/build/pylib-android/encodings/mac_cyrillic.py": "https://files.ballistica.net/cache/ba1/ce/05/72375c004b9fbce45e1ae2ed9fa3", "assets/build/pylib-android/encodings/mac_farsi.py": "https://files.ballistica.net/cache/ba1/fb/60/2864afabbe0f4ef2d0da202b40d8", @@ -2819,283 +2819,290 @@ "assets/build/pylib-android/encodings/utf_8_sig.py": "https://files.ballistica.net/cache/ba1/c5/56/c3d98c0cb4cf569fb833ed919cc1", "assets/build/pylib-android/encodings/uu_codec.py": "https://files.ballistica.net/cache/ba1/f9/64/0107520eca9130ca870cec675bf0", "assets/build/pylib-android/encodings/zlib_codec.py": "https://files.ballistica.net/cache/ba1/b4/3f/7369ee7aa1aa36b098c3b33ea31b", - "assets/build/pylib-android/enum.py": "https://files.ballistica.net/cache/ba1/17/fa/2c2e76ce86357e23a5adffd6139f", - "assets/build/pylib-android/filecmp.py": "https://files.ballistica.net/cache/ba1/54/d4/3d6d66bd7d4ee85407851fe986a0", - "assets/build/pylib-android/fileinput.py": "https://files.ballistica.net/cache/ba1/87/63/37392fb7eece4f1b010117205438", - "assets/build/pylib-android/fnmatch.py": "https://files.ballistica.net/cache/ba1/d5/44/0a58d9161ae9d2409ae2477b5948", + "assets/build/pylib-android/enum.py": "https://files.ballistica.net/cache/ba1/51/91/dfd36ad44d0d4d8ebd262fe03e7c", + "assets/build/pylib-android/filecmp.py": "https://files.ballistica.net/cache/ba1/1d/e7/575bd68a5f66504bb071c66e0996", + "assets/build/pylib-android/fileinput.py": "https://files.ballistica.net/cache/ba1/23/4f/13f958c4286a2a3cd46aed480572", + "assets/build/pylib-android/fnmatch.py": "https://files.ballistica.net/cache/ba1/79/a3/778dda2ff1d92a37aa3709ec141c", "assets/build/pylib-android/formatter.py": "https://files.ballistica.net/cache/ba1/8d/5e/9b9d7451083fbae7ee678ad8f51e", - "assets/build/pylib-android/fractions.py": "https://files.ballistica.net/cache/ba1/62/07/d18fee429386d6e1f3cfa42884e0", - "assets/build/pylib-android/ftplib.py": "https://files.ballistica.net/cache/ba1/ed/58/61631b6f7097f6e06531ba9c4f04", - "assets/build/pylib-android/functools.py": "https://files.ballistica.net/cache/ba1/e7/0b/2a93172c587fc0f2c71802885221", + "assets/build/pylib-android/fractions.py": "https://files.ballistica.net/cache/ba1/04/57/9ba7ff09b1829e3f35e681cc1879", + "assets/build/pylib-android/ftplib.py": "https://files.ballistica.net/cache/ba1/15/f9/66c87baf6cd7be154d0b904a131a", + "assets/build/pylib-android/functools.py": "https://files.ballistica.net/cache/ba1/51/dc/9da02d6e7f5671d36ad3026f86a3", "assets/build/pylib-android/genericpath.py": "https://files.ballistica.net/cache/ba1/a4/d1/a132fc4c20d49468d9aee1667a18", "assets/build/pylib-android/getopt.py": "https://files.ballistica.net/cache/ba1/5c/25/34e54811bd07a3b7a15e60c67094", - "assets/build/pylib-android/getpass.py": "https://files.ballistica.net/cache/ba1/76/37/f0df6882db44ee701aea35e235bb", - "assets/build/pylib-android/gettext.py": "https://files.ballistica.net/cache/ba1/30/f6/0cbdec6984d8bb4de4b8c12d3917", - "assets/build/pylib-android/glob.py": "https://files.ballistica.net/cache/ba1/9f/bb/02378daab858e94498b995d90e58", - "assets/build/pylib-android/gzip.py": "https://files.ballistica.net/cache/ba1/7c/81/2b86114f572713719b00eebc4fe7", - "assets/build/pylib-android/hashlib.py": "https://files.ballistica.net/cache/ba1/ae/a3/4bffbb609e9da7c1dab02c9d1bc0", + "assets/build/pylib-android/getpass.py": "https://files.ballistica.net/cache/ba1/7f/27/2225631bb706fa77edbb0870f96d", + "assets/build/pylib-android/gettext.py": "https://files.ballistica.net/cache/ba1/06/75/330b5daf8b0c62599c1cb5d39e74", + "assets/build/pylib-android/glob.py": "https://files.ballistica.net/cache/ba1/f2/af/eb70cb1127dcd41fb1a72e6a37e6", + "assets/build/pylib-android/graphlib.py": "https://files.ballistica.net/cache/ba1/3a/73/e3081c9d6aba74076485e9bb12a6", + "assets/build/pylib-android/gzip.py": "https://files.ballistica.net/cache/ba1/b9/97/e91d82e66b6cad3a263f040fe788", + "assets/build/pylib-android/hashlib.py": "https://files.ballistica.net/cache/ba1/68/33/c264fd78e6abc89ad39ff884bcde", "assets/build/pylib-android/heapq.py": "https://files.ballistica.net/cache/ba1/63/79/bb9abc2fb3665fffc59e588aba1f", - "assets/build/pylib-android/hmac.py": "https://files.ballistica.net/cache/ba1/ce/4e/595b1539b0a8ea65e8c79afa6506", + "assets/build/pylib-android/hmac.py": "https://files.ballistica.net/cache/ba1/50/c9/441934e594015710288e7a9a9103", "assets/build/pylib-android/html/__init__.py": "https://files.ballistica.net/cache/ba1/63/0b/9695269a02f0ec6d8b2b928d1f3f", "assets/build/pylib-android/html/entities.py": "https://files.ballistica.net/cache/ba1/02/4d/e42a17593176e35ff5da8d720cf9", - "assets/build/pylib-android/html/parser.py": "https://files.ballistica.net/cache/ba1/c7/87/628a5a87855afbac3ebbd858e9a1", - "assets/build/pylib-android/http/__init__.py": "https://files.ballistica.net/cache/ba1/04/78/a177368f7a363b832b7aa700a24e", - "assets/build/pylib-android/http/client.py": "https://files.ballistica.net/cache/ba1/36/59/f5c4c2dfc97ef6a25e87791eb486", + "assets/build/pylib-android/html/parser.py": "https://files.ballistica.net/cache/ba1/53/ef/baf9f793260ab1fd8064b7f76322", + "assets/build/pylib-android/http/__init__.py": "https://files.ballistica.net/cache/ba1/35/33/f3ec6b02d141465c75471b1915c1", + "assets/build/pylib-android/http/client.py": "https://files.ballistica.net/cache/ba1/32/58/b0ef08f75b43d8b9e89906272e63", "assets/build/pylib-android/http/cookiejar.py": "https://files.ballistica.net/cache/ba1/b1/a9/bf2b9d50cca20d3929dcd69a193f", - "assets/build/pylib-android/http/cookies.py": "https://files.ballistica.net/cache/ba1/b8/30/39a0e0ea03150efeb9fdd0c4f0f1", - "assets/build/pylib-android/http/server.py": "https://files.ballistica.net/cache/ba1/04/68/05482a7906eb8a4537fb591f2df9", + "assets/build/pylib-android/http/cookies.py": "https://files.ballistica.net/cache/ba1/d3/8d/e6c3a78a0d420510ff0d88980dc0", + "assets/build/pylib-android/http/server.py": "https://files.ballistica.net/cache/ba1/48/05/a2f8b738f09635f6840593a4f852", "assets/build/pylib-android/imghdr.py": "https://files.ballistica.net/cache/ba1/3d/d0/4f7452be4865bbf2e54e67fff577", "assets/build/pylib-android/imp.py": "https://files.ballistica.net/cache/ba1/76/c5/f35c903e1dd97bf22c1085a8284e", "assets/build/pylib-android/importlib/__init__.py": "https://files.ballistica.net/cache/ba1/5e/ae/5efb7ab469b5d17c2ea79c50fcdf", - "assets/build/pylib-android/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/58/27/ef34e53df05321778b4a1d64f233", - "assets/build/pylib-android/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/f0/7d/66c18cd0ead3730530d9b02ae718", - "assets/build/pylib-android/importlib/abc.py": "https://files.ballistica.net/cache/ba1/35/91/138b805ba19131c83fb9fa8cd5ae", + "assets/build/pylib-android/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/81/bf/bde9153f3f8c6487be86396eaf9a", + "assets/build/pylib-android/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/47/df/9f880b6e968711aaa8d40e21805c", + "assets/build/pylib-android/importlib/_common.py": "https://files.ballistica.net/cache/ba1/c2/5c/a3957f3a09bc359cce95465f7eb8", + "assets/build/pylib-android/importlib/abc.py": "https://files.ballistica.net/cache/ba1/1c/46/bb9c26318a11269343f7053e3677", "assets/build/pylib-android/importlib/machinery.py": "https://files.ballistica.net/cache/ba1/a1/8f/18e6ff954af6e29a2c06701e426d", - "assets/build/pylib-android/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/00/c2/b14ed2a7c144df47409a73626f28", - "assets/build/pylib-android/importlib/resources.py": "https://files.ballistica.net/cache/ba1/15/8c/53a8c444a47e76dde81052a0c41d", - "assets/build/pylib-android/importlib/util.py": "https://files.ballistica.net/cache/ba1/74/6c/cf680cfd666f5e08fc17e1e02e21", - "assets/build/pylib-android/inspect.py": "https://files.ballistica.net/cache/ba1/70/fe/b4fb9bfb0218a1baf681c3dd3493", + "assets/build/pylib-android/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/fb/e9/91a341b9f8b7c7cfde71ce9d9d10", + "assets/build/pylib-android/importlib/resources.py": "https://files.ballistica.net/cache/ba1/e5/52/7e6950753abc4e4a63c35483a61d", + "assets/build/pylib-android/importlib/util.py": "https://files.ballistica.net/cache/ba1/34/fe/dd13e9e4bda634aed3d9c24405f5", + "assets/build/pylib-android/inspect.py": "https://files.ballistica.net/cache/ba1/e6/fb/b8a26a8d469f12c0b9d1caa9f87a", "assets/build/pylib-android/io.py": "https://files.ballistica.net/cache/ba1/04/bf/435c1cef465b5f9f8b3a0e58aac2", - "assets/build/pylib-android/ipaddress.py": "https://files.ballistica.net/cache/ba1/e5/dc/a915c13e827b0f8f5c3d0339a365", - "assets/build/pylib-android/json/__init__.py": "https://files.ballistica.net/cache/ba1/ab/61/7360b1e8e05eae96ecc2614bc666", + "assets/build/pylib-android/ipaddress.py": "https://files.ballistica.net/cache/ba1/83/00/cfaa2e98187bdfd870f368e1bff4", + "assets/build/pylib-android/json/__init__.py": "https://files.ballistica.net/cache/ba1/4a/a4/a2ca81c8b1fc5159d7ee27cf8961", "assets/build/pylib-android/json/decoder.py": "https://files.ballistica.net/cache/ba1/3f/bf/6fd2a01d31cd85e4c21cf2c0a5c8", "assets/build/pylib-android/json/encoder.py": "https://files.ballistica.net/cache/ba1/91/e6/28d5bc7693037562877ff0ea08c5", "assets/build/pylib-android/json/scanner.py": "https://files.ballistica.net/cache/ba1/c8/4b/bcc458a5047e9ac8064a607ee231", - "assets/build/pylib-android/json/tool.py": "https://files.ballistica.net/cache/ba1/d6/38/c65fcd6b76a399d0fb209e9e1130", - "assets/build/pylib-android/keyword.py": "https://files.ballistica.net/cache/ba1/7b/0d/514f7c437ade5881b923228db78d", - "assets/build/pylib-android/linecache.py": "https://files.ballistica.net/cache/ba1/01/91/9aecf23d41972edd3bcb7927b1fe", - "assets/build/pylib-android/locale.py": "https://files.ballistica.net/cache/ba1/ab/cf/da9a211a39662f631b6869e1c28b", - "assets/build/pylib-android/logging/__init__.py": "https://files.ballistica.net/cache/ba1/d1/75/8e5a4a91941e362805dc7d43b7a0", - "assets/build/pylib-android/logging/config.py": "https://files.ballistica.net/cache/ba1/59/8b/cf4357716a774981a06b369e2074", - "assets/build/pylib-android/logging/handlers.py": "https://files.ballistica.net/cache/ba1/be/37/4c3f3e2385e8e6d61d8ef76c5dc4", - "assets/build/pylib-android/lzma.py": "https://files.ballistica.net/cache/ba1/9c/2e/978f3aa52af60fce9a819dc7de7c", - "assets/build/pylib-android/mailbox.py": "https://files.ballistica.net/cache/ba1/c7/5e/f3325f2bd78dcbffbfea6d9770fd", - "assets/build/pylib-android/mailcap.py": "https://files.ballistica.net/cache/ba1/50/16/e34e153745925b34ce9038e3ea7f", - "assets/build/pylib-android/mimetypes.py": "https://files.ballistica.net/cache/ba1/49/c3/d46e03dd6ba50e8e2282ab22839a", - "assets/build/pylib-android/modulefinder.py": "https://files.ballistica.net/cache/ba1/84/08/24b4e6c420fec10ec3c2ea8c47da", + "assets/build/pylib-android/json/tool.py": "https://files.ballistica.net/cache/ba1/f6/89/d06bf3cfc47de60c557183929c37", + "assets/build/pylib-android/keyword.py": "https://files.ballistica.net/cache/ba1/34/f0/9b535759f451719a14e5eaf7e5a0", + "assets/build/pylib-android/linecache.py": "https://files.ballistica.net/cache/ba1/40/66/bfc4023c1853ee085d7f32691874", + "assets/build/pylib-android/locale.py": "https://files.ballistica.net/cache/ba1/a6/59/1321269f13ad79ba6636c665959f", + "assets/build/pylib-android/logging/__init__.py": "https://files.ballistica.net/cache/ba1/a2/f1/558bfebba043ccc058d9d8cca51b", + "assets/build/pylib-android/logging/config.py": "https://files.ballistica.net/cache/ba1/5d/25/15806eb35054964b4c0dbd253d8d", + "assets/build/pylib-android/logging/handlers.py": "https://files.ballistica.net/cache/ba1/84/e6/6c7e1f823242d3ecfebeb2079282", + "assets/build/pylib-android/lzma.py": "https://files.ballistica.net/cache/ba1/c8/5b/c1f8b0cad7db967d5aac0dc93cf3", + "assets/build/pylib-android/mailbox.py": "https://files.ballistica.net/cache/ba1/e2/5b/852981ddeb6c208455146b9d65df", + "assets/build/pylib-android/mailcap.py": "https://files.ballistica.net/cache/ba1/4a/a2/61dfae45beaf22c9696d069ee06c", + "assets/build/pylib-android/mimetypes.py": "https://files.ballistica.net/cache/ba1/55/b0/c42a5accd40cf739d51627fd7726", + "assets/build/pylib-android/modulefinder.py": "https://files.ballistica.net/cache/ba1/bd/bb/c27cf6cf4d87fd4557f19c549ab6", "assets/build/pylib-android/netrc.py": "https://files.ballistica.net/cache/ba1/8f/80/36bb48bf9d57e4e5d2840bbc39ed", - "assets/build/pylib-android/nntplib.py": "https://files.ballistica.net/cache/ba1/ed/e9/4fdac3b585199c036ca9e89b7f90", + "assets/build/pylib-android/nntplib.py": "https://files.ballistica.net/cache/ba1/e9/97/b8c183562190b711e14163b213d8", "assets/build/pylib-android/ntpath.py": "https://files.ballistica.net/cache/ba1/86/46/129e6c4c896c2a48abc5294f3fb4", - "assets/build/pylib-android/nturl2path.py": "https://files.ballistica.net/cache/ba1/b4/46/c374747761328b745d54c20fb2d4", - "assets/build/pylib-android/numbers.py": "https://files.ballistica.net/cache/ba1/b3/ec/5cbca4da9a176673ac3502dfe3ce", - "assets/build/pylib-android/opcode.py": "https://files.ballistica.net/cache/ba1/65/7b/65f902a9c4e4ba7713e2af3fde5e", - "assets/build/pylib-android/operator.py": "https://files.ballistica.net/cache/ba1/f4/ff/f544ac0872105e67239d869102f5", + "assets/build/pylib-android/nturl2path.py": "https://files.ballistica.net/cache/ba1/a9/59/0611204983d7eeed580ab3c56e4d", + "assets/build/pylib-android/numbers.py": "https://files.ballistica.net/cache/ba1/9e/75/45a922718c7dfcd1b68948fb74a3", + "assets/build/pylib-android/opcode.py": "https://files.ballistica.net/cache/ba1/d2/02/8e90c9b100ed89495c0dede5aab2", + "assets/build/pylib-android/operator.py": "https://files.ballistica.net/cache/ba1/c7/e1/faab3be799d4a4bfd844c2425b04", "assets/build/pylib-android/optparse.py": "https://files.ballistica.net/cache/ba1/0f/08/ec8ce5e48392a3f9bdc3c07f49cc", - "assets/build/pylib-android/os.py": "https://files.ballistica.net/cache/ba1/ae/a6/b92e148a97c42f68600fd8f5ff0a", - "assets/build/pylib-android/pathlib.py": "https://files.ballistica.net/cache/ba1/e7/18/74b1980b45e9b0d7aedd6e43f64c", - "assets/build/pylib-android/pdb.py": "https://files.ballistica.net/cache/ba1/fc/24/6860b302ac45445af755cf451711", - "assets/build/pylib-android/pickle.py": "https://files.ballistica.net/cache/ba1/d4/29/46efdd6acdab82b4ae4810522947", + "assets/build/pylib-android/os.py": "https://files.ballistica.net/cache/ba1/b3/44/d04af8c52a023a1d339c0b1311ad", + "assets/build/pylib-android/pathlib.py": "https://files.ballistica.net/cache/ba1/ff/04/018a8adbd4b49bf89ecdd4b905d6", + "assets/build/pylib-android/pdb.py": "https://files.ballistica.net/cache/ba1/80/59/d1ff69bb0219c1a870c1d8966070", + "assets/build/pylib-android/pickle.py": "https://files.ballistica.net/cache/ba1/3a/e1/2e3171acf42a36be590e4a37126d", "assets/build/pylib-android/pickletools.py": "https://files.ballistica.net/cache/ba1/72/c5/182517538ac4e0c1b7d25bde80e4", "assets/build/pylib-android/pipes.py": "https://files.ballistica.net/cache/ba1/ed/d3/9e08e7ece839c58d885223c57adb", - "assets/build/pylib-android/pkgutil.py": "https://files.ballistica.net/cache/ba1/3f/27/1c376bf997f3ee3a09c9ffdb58d6", - "assets/build/pylib-android/platform.py": "https://files.ballistica.net/cache/ba1/2a/65/f358d875e6356bab841348b2a2c1", - "assets/build/pylib-android/plistlib.py": "https://files.ballistica.net/cache/ba1/d8/c1/eaa9ec920838ec9742eaba62032a", - "assets/build/pylib-android/poplib.py": "https://files.ballistica.net/cache/ba1/07/e9/bd3185ee7e11fae8a93350f3c8ef", - "assets/build/pylib-android/posixpath.py": "https://files.ballistica.net/cache/ba1/4e/e0/74802bfb4ce50bf23b1fe082476f", - "assets/build/pylib-android/pprint.py": "https://files.ballistica.net/cache/ba1/c7/3d/79915a2f9a52402ad0165749f8a1", - "assets/build/pylib-android/profile.py": "https://files.ballistica.net/cache/ba1/66/da/92943b022e8e4c32ffa45190e6e3", - "assets/build/pylib-android/pstats.py": "https://files.ballistica.net/cache/ba1/7a/1e/6651495416e0e70900b036ac1b4f", + "assets/build/pylib-android/pkgutil.py": "https://files.ballistica.net/cache/ba1/98/62/24a1465cb2b43458e1d271d2ff19", + "assets/build/pylib-android/platform.py": "https://files.ballistica.net/cache/ba1/48/f0/9e426fea97794447c4b6984be741", + "assets/build/pylib-android/plistlib.py": "https://files.ballistica.net/cache/ba1/e4/b4/c991bcd1812d6ba77181a37a4cd9", + "assets/build/pylib-android/poplib.py": "https://files.ballistica.net/cache/ba1/45/2e/413a448cee745616d9b2a3be1678", + "assets/build/pylib-android/posixpath.py": "https://files.ballistica.net/cache/ba1/df/7c/3af6fc68bda43718dce4275071ef", + "assets/build/pylib-android/pprint.py": "https://files.ballistica.net/cache/ba1/db/db/3d2fff41d48707ec1dfe45fd44ae", + "assets/build/pylib-android/profile.py": "https://files.ballistica.net/cache/ba1/2c/5f/fe19381e5041a1bc781b35aeb5e8", + "assets/build/pylib-android/pstats.py": "https://files.ballistica.net/cache/ba1/9f/9c/4b003a13a13f588bfee2c1427f79", "assets/build/pylib-android/pty.py": "https://files.ballistica.net/cache/ba1/24/e7/674146721384259bfbbc196a59e6", "assets/build/pylib-android/py_compile.py": "https://files.ballistica.net/cache/ba1/4f/4f/41b5756b4248c19b3cc6401b616f", "assets/build/pylib-android/pyclbr.py": "https://files.ballistica.net/cache/ba1/8a/0e/2fc7f524cbc1101d488c1a0c570f", - "assets/build/pylib-android/pydoc.py": "https://files.ballistica.net/cache/ba1/9e/1d/1c472858412cfa24f33d5228154a", - "assets/build/pylib-android/queue.py": "https://files.ballistica.net/cache/ba1/12/26/24837026ac4db0a65d099dfefc69", - "assets/build/pylib-android/quopri.py": "https://files.ballistica.net/cache/ba1/f3/08/1d7b3e0f7ce1ad649b1abf08f8ac", - "assets/build/pylib-android/random.py": "https://files.ballistica.net/cache/ba1/64/96/9262809205b823d80a1d3200cb94", + "assets/build/pylib-android/pydoc.py": "https://files.ballistica.net/cache/ba1/95/05/e698d3f627ebff0656070f0d4655", + "assets/build/pylib-android/queue.py": "https://files.ballistica.net/cache/ba1/3a/2f/3f5f8f97d6aea42bff93351b960a", + "assets/build/pylib-android/quopri.py": "https://files.ballistica.net/cache/ba1/0f/ad/93ff84558a4d8ca0607ab2c35df2", + "assets/build/pylib-android/random.py": "https://files.ballistica.net/cache/ba1/f2/51/e8e53a7db0d2fd381ff801ef31b2", "assets/build/pylib-android/re.py": "https://files.ballistica.net/cache/ba1/59/e4/9022fc5507d9f81c023489d12bea", "assets/build/pylib-android/reprlib.py": "https://files.ballistica.net/cache/ba1/81/66/44ee9dceee6943006c4500ee3303", - "assets/build/pylib-android/rlcompleter.py": "https://files.ballistica.net/cache/ba1/fe/06/6f06102f9f6c8c0e73a33714c25a", - "assets/build/pylib-android/runpy.py": "https://files.ballistica.net/cache/ba1/b2/76/1bf2d61d8494da2aeb4280144b2f", + "assets/build/pylib-android/rlcompleter.py": "https://files.ballistica.net/cache/ba1/38/9a/cd94bf30476e906823ceefcf9cd5", + "assets/build/pylib-android/runpy.py": "https://files.ballistica.net/cache/ba1/de/50/40037954e30bcda859f78d9facb2", "assets/build/pylib-android/sched.py": "https://files.ballistica.net/cache/ba1/c7/c2/12fe5b57f846e1c9d4c75ee89d91", - "assets/build/pylib-android/secrets.py": "https://files.ballistica.net/cache/ba1/b2/b0/b1a5252c6b75183471c11a4dbfb6", - "assets/build/pylib-android/selectors.py": "https://files.ballistica.net/cache/ba1/77/2d/f195a32136d7aee6e17169e88b50", + "assets/build/pylib-android/secrets.py": "https://files.ballistica.net/cache/ba1/e2/1b/ffc4c1422b6ac0eda4924d2f241a", + "assets/build/pylib-android/selectors.py": "https://files.ballistica.net/cache/ba1/ba/53/3b7515983548e5de15ccd7d37fb7", "assets/build/pylib-android/shelve.py": "https://files.ballistica.net/cache/ba1/8b/de/eca086cf73d1c9c823472de06a4c", - "assets/build/pylib-android/shlex.py": "https://files.ballistica.net/cache/ba1/d1/90/427ebd18132790c4b80ca7f0062a", - "assets/build/pylib-android/shutil.py": "https://files.ballistica.net/cache/ba1/d4/85/7a836681a4a43361886127d9a5c6", + "assets/build/pylib-android/shlex.py": "https://files.ballistica.net/cache/ba1/bf/d2/45bdf01bfb2a8d468d6ff0534fb6", + "assets/build/pylib-android/shutil.py": "https://files.ballistica.net/cache/ba1/2f/70/fc4e5267e0df968280861897c4ca", "assets/build/pylib-android/signal.py": "https://files.ballistica.net/cache/ba1/c1/e6/42f7446c4290ebf789e9d5d572e9", - "assets/build/pylib-android/site.py": "https://files.ballistica.net/cache/ba1/99/99/9f9631f0dcbe462ea076f63ea87a", - "assets/build/pylib-android/smtpd.py": "https://files.ballistica.net/cache/ba1/ca/b1/59cd5236b8614b142c1c30f3d826", - "assets/build/pylib-android/smtplib.py": "https://files.ballistica.net/cache/ba1/89/dd/17edc05b630cb0bfdea9f0070356", + "assets/build/pylib-android/site.py": "https://files.ballistica.net/cache/ba1/4b/05/ae253d4728ca8a7f796f4bf38d72", + "assets/build/pylib-android/smtpd.py": "https://files.ballistica.net/cache/ba1/1b/96/d9b9c960b17a701f81102bcf8ef5", + "assets/build/pylib-android/smtplib.py": "https://files.ballistica.net/cache/ba1/a8/d9/714d70951821c007019f14b60bd2", "assets/build/pylib-android/sndhdr.py": "https://files.ballistica.net/cache/ba1/d8/db/7f9e8c520cd68d3cf3308e3a9923", - "assets/build/pylib-android/socket.py": "https://files.ballistica.net/cache/ba1/1a/9e/d4ab190486a0e5fde8c165d76537", - "assets/build/pylib-android/socketserver.py": "https://files.ballistica.net/cache/ba1/ee/5d/ff8d1e8000d294430919d854bfd4", + "assets/build/pylib-android/socket.py": "https://files.ballistica.net/cache/ba1/da/90/e8f1c0529425c43c439c113f09cb", + "assets/build/pylib-android/socketserver.py": "https://files.ballistica.net/cache/ba1/0f/54/a474bf8ddc82d8155de1344e1318", "assets/build/pylib-android/sqlite3/__init__.py": "https://files.ballistica.net/cache/ba1/59/0c/ad2f1115231791e81b99f42bde59", "assets/build/pylib-android/sqlite3/dbapi2.py": "https://files.ballistica.net/cache/ba1/ba/45/70cc4fba245a1394b832240cd706", "assets/build/pylib-android/sqlite3/dump.py": "https://files.ballistica.net/cache/ba1/1c/d8/dc3fb256cbb05c8fffb52c52404a", "assets/build/pylib-android/sre_compile.py": "https://files.ballistica.net/cache/ba1/96/3a/830deabdb104a1d219f88ad9c090", "assets/build/pylib-android/sre_constants.py": "https://files.ballistica.net/cache/ba1/87/9d/78b7e287798d388ac700586308ce", "assets/build/pylib-android/sre_parse.py": "https://files.ballistica.net/cache/ba1/43/8a/41140a5502c31bbf238181ccf581", - "assets/build/pylib-android/ssl.py": "https://files.ballistica.net/cache/ba1/b8/4f/0a8be5651fd60986028dc9e60215", + "assets/build/pylib-android/ssl.py": "https://files.ballistica.net/cache/ba1/b9/a3/93c6326cbed12bd38ddff0442b8f", "assets/build/pylib-android/stat.py": "https://files.ballistica.net/cache/ba1/03/1d/acbfa83d8d94d8a483c6a884b589", - "assets/build/pylib-android/statistics.py": "https://files.ballistica.net/cache/ba1/75/f2/4ce33352d4242c35554604908f43", - "assets/build/pylib-android/string.py": "https://files.ballistica.net/cache/ba1/52/bb/04d8688ce0acb53fef74b1cedaa4", + "assets/build/pylib-android/statistics.py": "https://files.ballistica.net/cache/ba1/62/7a/057495d08851ec32872bcd69b007", + "assets/build/pylib-android/string.py": "https://files.ballistica.net/cache/ba1/71/7f/8d19b04aea3ea1fc6bb49534d244", "assets/build/pylib-android/stringprep.py": "https://files.ballistica.net/cache/ba1/20/41/fcfc5f510286ead5f7f4678ac9ec", "assets/build/pylib-android/struct.py": "https://files.ballistica.net/cache/ba1/37/67/74dea8e8f3831e802c3b5288e901", - "assets/build/pylib-android/subprocess.py": "https://files.ballistica.net/cache/ba1/39/92/11fe2953e9ae13120ebaebea19d1", - "assets/build/pylib-android/sunau.py": "https://files.ballistica.net/cache/ba1/ff/0e/1a6c5fd41803511cad28595dc248", - "assets/build/pylib-android/symbol.py": "https://files.ballistica.net/cache/ba1/47/71/61a7a88103ae16c177bf03953f5f", - "assets/build/pylib-android/symtable.py": "https://files.ballistica.net/cache/ba1/3b/0e/73b187b644f5d861893306db1d11", - "assets/build/pylib-android/sysconfig.py": "https://files.ballistica.net/cache/ba1/05/e9/16513caa8a4d9eb20fa67c7a02f1", + "assets/build/pylib-android/subprocess.py": "https://files.ballistica.net/cache/ba1/3b/0a/1f1927f2064cd5be6952c800191e", + "assets/build/pylib-android/sunau.py": "https://files.ballistica.net/cache/ba1/e5/20/6b38eb6fd8a07086d219d9ab269b", + "assets/build/pylib-android/symbol.py": "https://files.ballistica.net/cache/ba1/f1/d0/2c87723b1afb110667a9b77fe0e3", + "assets/build/pylib-android/symtable.py": "https://files.ballistica.net/cache/ba1/99/1b/2a657c8fb80a527f7900be74c92f", + "assets/build/pylib-android/sysconfig.py": "https://files.ballistica.net/cache/ba1/d2/e4/3f1dfd58d0bc055718563a8116f2", "assets/build/pylib-android/tabnanny.py": "https://files.ballistica.net/cache/ba1/f3/7e/b463d5f4ead23d34a36d0e559447", - "assets/build/pylib-android/tarfile.py": "https://files.ballistica.net/cache/ba1/72/ab/e5dfc47c753d7cbb63934aac8fd9", + "assets/build/pylib-android/tarfile.py": "https://files.ballistica.net/cache/ba1/f2/6c/85bb42b559a27fb0bcd2dbeb1616", "assets/build/pylib-android/telnetlib.py": "https://files.ballistica.net/cache/ba1/a5/81/6133a7707e3de363ddc642944e52", - "assets/build/pylib-android/tempfile.py": "https://files.ballistica.net/cache/ba1/ca/58/e0b1706b032958c6364e7f88adb5", + "assets/build/pylib-android/tempfile.py": "https://files.ballistica.net/cache/ba1/98/02/88d06634078ab0cdb5bb94036140", "assets/build/pylib-android/textwrap.py": "https://files.ballistica.net/cache/ba1/4c/4b/c743c5e7427b00f428c318a9673b", "assets/build/pylib-android/this.py": "https://files.ballistica.net/cache/ba1/a8/fa/4d1152b689d75bc1a997ff34b799", - "assets/build/pylib-android/threading.py": "https://files.ballistica.net/cache/ba1/77/4f/e025ea812a09965cdc395e86ceb9", + "assets/build/pylib-android/threading.py": "https://files.ballistica.net/cache/ba1/70/eb/9151c4484807f6ba87a513964b4f", "assets/build/pylib-android/timeit.py": "https://files.ballistica.net/cache/ba1/55/7b/f7ef83f08ac5cb36ddaff03ac6ab", "assets/build/pylib-android/token.py": "https://files.ballistica.net/cache/ba1/1e/2e/d0c88f9d6ae92bb1fae7167aaba7", - "assets/build/pylib-android/tokenize.py": "https://files.ballistica.net/cache/ba1/72/3b/51cb704606f892e099c2e350e346", - "assets/build/pylib-android/trace.py": "https://files.ballistica.net/cache/ba1/2f/da/847f827b3e048f2b96d6c657bbe4", - "assets/build/pylib-android/traceback.py": "https://files.ballistica.net/cache/ba1/89/42/8bf4333174a7fbfe27552743d5af", - "assets/build/pylib-android/tracemalloc.py": "https://files.ballistica.net/cache/ba1/46/49/5683d0d9e0e342392361adb6e9a3", + "assets/build/pylib-android/tokenize.py": "https://files.ballistica.net/cache/ba1/ae/51/55e4236aa6d5718520086c68e818", + "assets/build/pylib-android/trace.py": "https://files.ballistica.net/cache/ba1/d0/71/2094be597c5d8396d869cf4d0089", + "assets/build/pylib-android/traceback.py": "https://files.ballistica.net/cache/ba1/0b/1d/044152a32b34fcaa538ae2c9a918", + "assets/build/pylib-android/tracemalloc.py": "https://files.ballistica.net/cache/ba1/2c/4a/ea13ebd9c04d1db131d62880b2c6", "assets/build/pylib-android/tty.py": "https://files.ballistica.net/cache/ba1/ad/19/a6ad29b8958fa9f5acc3cf71d3b2", - "assets/build/pylib-android/types.py": "https://files.ballistica.net/cache/ba1/15/8d/824df2b7a8d28811d23ee5dcbc9f", - "assets/build/pylib-android/typing.py": "https://files.ballistica.net/cache/ba1/6e/cc/a870fe92cab98b1d7740da28213c", + "assets/build/pylib-android/types.py": "https://files.ballistica.net/cache/ba1/14/58/e6a4aecb3c48a708a4abee7ed347", + "assets/build/pylib-android/typing.py": "https://files.ballistica.net/cache/ba1/54/f9/e31a593bd8daffba950449ab8ad5", "assets/build/pylib-android/urllib/__init__.py": "https://files.ballistica.net/cache/ba1/b0/56/87601ed47a5181d1e6a40eb4ea40", "assets/build/pylib-android/urllib/error.py": "https://files.ballistica.net/cache/ba1/07/8c/573897fc3bdc6d3e2e8d449f17c7", - "assets/build/pylib-android/urllib/parse.py": "https://files.ballistica.net/cache/ba1/ab/9d/cfcebb340b37e3d58ebbfb2fcd23", - "assets/build/pylib-android/urllib/request.py": "https://files.ballistica.net/cache/ba1/07/6d/58f034637b48922ec51e7d71b0c1", - "assets/build/pylib-android/urllib/response.py": "https://files.ballistica.net/cache/ba1/c4/d5/676a8e9fc4f7bd21ac2f555fc3fc", + "assets/build/pylib-android/urllib/parse.py": "https://files.ballistica.net/cache/ba1/b0/6f/fcf889e56d319e1ab4721e2d699b", + "assets/build/pylib-android/urllib/request.py": "https://files.ballistica.net/cache/ba1/27/f6/c23c9e61fc063e4ba90d6d096ff8", + "assets/build/pylib-android/urllib/response.py": "https://files.ballistica.net/cache/ba1/ac/f3/2d5bd4fe5cfcf640e8be71dec9a4", "assets/build/pylib-android/urllib/robotparser.py": "https://files.ballistica.net/cache/ba1/a4/52/f0d03835bb08e08195aeebd05e04", "assets/build/pylib-android/uu.py": "https://files.ballistica.net/cache/ba1/a1/89/070ed8553858a75fcafae4b7bd37", - "assets/build/pylib-android/uuid.py": "https://files.ballistica.net/cache/ba1/df/2a/cf8755bc0063f6a0d01dee6ac0a3", + "assets/build/pylib-android/uuid.py": "https://files.ballistica.net/cache/ba1/6c/3b/c018c6e9883e5218175592ec3343", "assets/build/pylib-android/warnings.py": "https://files.ballistica.net/cache/ba1/23/25/0ed7968cb91c285e031fa93614db", - "assets/build/pylib-android/wave.py": "https://files.ballistica.net/cache/ba1/f8/72/9e060ca777991ea45d71eed336ca", - "assets/build/pylib-android/weakref.py": "https://files.ballistica.net/cache/ba1/14/4e/fbb121e9cfb74cdb2084e1fbb8d5", + "assets/build/pylib-android/wave.py": "https://files.ballistica.net/cache/ba1/bf/f7/89182d61e9f3eb100e5efbff4243", + "assets/build/pylib-android/weakref.py": "https://files.ballistica.net/cache/ba1/3a/34/42234c435d2e753407b0c068a271", "assets/build/pylib-android/webbrowser.py": "https://files.ballistica.net/cache/ba1/25/95/2b773a140d7d8cfe4e51d23d9ee2", "assets/build/pylib-android/xdrlib.py": "https://files.ballistica.net/cache/ba1/ec/bf/84d830dca1231ec1a67d8ccbb21f", "assets/build/pylib-android/xml/__init__.py": "https://files.ballistica.net/cache/ba1/ba/67/bbd97e53f3db5ebc3abd3fef2275", "assets/build/pylib-android/xml/dom/NodeFilter.py": "https://files.ballistica.net/cache/ba1/36/76/2a47e7bc727db1c44d157b23d2c3", "assets/build/pylib-android/xml/dom/__init__.py": "https://files.ballistica.net/cache/ba1/4b/7b/185f8e04797815876d9a16210af7", "assets/build/pylib-android/xml/dom/domreg.py": "https://files.ballistica.net/cache/ba1/db/f3/81553e1167748f7d22152ac83eba", - "assets/build/pylib-android/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/18/79/cd302655dc15d49e3617a71966dc", + "assets/build/pylib-android/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/8e/f0/26f7a8d646c051dc29134411e5a3", "assets/build/pylib-android/xml/dom/minicompat.py": "https://files.ballistica.net/cache/ba1/27/a6/6caea719e99063ca274ba3dd9883", - "assets/build/pylib-android/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/69/e1/4ca8a5cd1c35dc93873b5d7f89c5", + "assets/build/pylib-android/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/53/8e/fa86c93dc783f50139a6df679f70", "assets/build/pylib-android/xml/dom/pulldom.py": "https://files.ballistica.net/cache/ba1/69/93/695baf453ca1030e7f6a62eb977b", - "assets/build/pylib-android/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/6a/80/e9447455e3df06a8dea4ca762c05", - "assets/build/pylib-android/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/2d/1f/dfb4d40f1edca9a6c4547946258b", - "assets/build/pylib-android/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/7f/ee/475112162331092c87710dde95ac", - "assets/build/pylib-android/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/2c/44/ee7c7ac5086086a64acdbbf2ebd9", - "assets/build/pylib-android/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/98/0c/80c528bd3fe3e658da076d08071e", + "assets/build/pylib-android/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/e2/28/cb659e6d308904b5b8349b2fff52", + "assets/build/pylib-android/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/bf/14/b35813d60c28bb05f1528c80f062", + "assets/build/pylib-android/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/46/fa/5086aea6de2e6bc282d73b0808c4", + "assets/build/pylib-android/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/d6/e7/33912cef283deaee04484e2ccd0b", + "assets/build/pylib-android/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/38/44/1792ae5542c1ae5248568ef5abbd", "assets/build/pylib-android/xml/etree/cElementTree.py": "https://files.ballistica.net/cache/ba1/6f/39/4c840e5eb0e09f709569154159ba", "assets/build/pylib-android/xml/parsers/__init__.py": "https://files.ballistica.net/cache/ba1/db/92/7283051e5e1c7426985835f506b9", "assets/build/pylib-android/xml/parsers/expat.py": "https://files.ballistica.net/cache/ba1/39/6c/fac98453c28f626916837c8a1e6b", - "assets/build/pylib-android/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/d5/5d/6631d2cabb6d5d3de794a1cf8f30", + "assets/build/pylib-android/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/91/57/68039f41084d369567cdad6f02f1", "assets/build/pylib-android/xml/sax/_exceptions.py": "https://files.ballistica.net/cache/ba1/2c/42/ba99070cafd736b165b825f1df53", - "assets/build/pylib-android/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/8f/58/dce938bf4dcf1e240206c88e903e", + "assets/build/pylib-android/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/84/07/34199c53cc1f9d91c835af86b47c", "assets/build/pylib-android/xml/sax/handler.py": "https://files.ballistica.net/cache/ba1/3c/9a/d4295144949f697e57545aff741b", "assets/build/pylib-android/xml/sax/saxutils.py": "https://files.ballistica.net/cache/ba1/13/27/66fe0ad3aa764ba65643f5fcbc37", "assets/build/pylib-android/xml/sax/xmlreader.py": "https://files.ballistica.net/cache/ba1/0d/90/edc37e1a4f436d853c6d90263ae3", "assets/build/pylib-android/xmlrpc/__init__.py": "https://files.ballistica.net/cache/ba1/fd/fd/acc2dbaec2abc4a76071ce7ed7ab", - "assets/build/pylib-android/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/da/48/e65c0e5eb49e3e5087866339f7e3", - "assets/build/pylib-android/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/bd/3d/3771b879aad270172509a740aa80", + "assets/build/pylib-android/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/4a/62/c061195196f787531ef5bc2b4d61", + "assets/build/pylib-android/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/eb/1a/fae274a8e90aa97ade20712bfe2e", "assets/build/pylib-android/zipapp.py": "https://files.ballistica.net/cache/ba1/40/ae/178305c27d72cc46ad2220b504ec", - "assets/build/pylib-android/zipfile.py": "https://files.ballistica.net/cache/ba1/88/73/901cfb9f23cc0bc0a7ba17eebe40", + "assets/build/pylib-android/zipfile.py": "https://files.ballistica.net/cache/ba1/69/86/a59f4fb6a301ab3682af282d6af4", "assets/build/pylib-android/zipimport.py": "https://files.ballistica.net/cache/ba1/99/2a/462d3c6a266d9e4ebdb887a99ae6", + "assets/build/pylib-android/zoneinfo/__init__.py": "https://files.ballistica.net/cache/ba1/b7/4e/bea553b4c2a2e63902c5cb446579", + "assets/build/pylib-android/zoneinfo/_common.py": "https://files.ballistica.net/cache/ba1/ed/e5/0f7502cc1ef46212fcb15c7ada89", + "assets/build/pylib-android/zoneinfo/_tzpath.py": "https://files.ballistica.net/cache/ba1/64/69/98dfdf2ecf82fa172ac717c2e8f0", + "assets/build/pylib-android/zoneinfo/_zoneinfo.py": "https://files.ballistica.net/cache/ba1/26/a7/11f6ab33ede54f35282c70e51984", "assets/build/pylib-apple/__future__.py": "https://files.ballistica.net/cache/ba1/c3/2a/95c24fd76d3dcf796f5aa714cf0b", "assets/build/pylib-apple/__phello__.foo.py": "https://files.ballistica.net/cache/ba1/c1/42/8c4e5889af4acd69a6e866ea360f", + "assets/build/pylib-apple/_aix_support.py": "https://files.ballistica.net/cache/ba1/af/15/a9be2e91d3f12212738760bec685", "assets/build/pylib-apple/_bootlocale.py": "https://files.ballistica.net/cache/ba1/15/7e/07e0a6fcaf9fca6354453f7d09fa", - "assets/build/pylib-apple/_collections_abc.py": "https://files.ballistica.net/cache/ba1/fc/ba/022abfd65bf601ad4094eb051c62", + "assets/build/pylib-apple/_bootsubprocess.py": "https://files.ballistica.net/cache/ba1/e8/c2/bd1aeca19799926a926a2f5ba3fd", + "assets/build/pylib-apple/_collections_abc.py": "https://files.ballistica.net/cache/ba1/de/99/73757a2868d45502d6716354c8b9", "assets/build/pylib-apple/_compat_pickle.py": "https://files.ballistica.net/cache/ba1/5a/19/9dbf1e881a6483e3a268e5f8ea7d", "assets/build/pylib-apple/_compression.py": "https://files.ballistica.net/cache/ba1/c6/06/a4e9cc0e17800d71f6536d27976d", - "assets/build/pylib-apple/_dummy_thread.py": "https://files.ballistica.net/cache/ba1/ca/6b/94c4270a794a3dd9144eac36ba70", "assets/build/pylib-apple/_markupbase.py": "https://files.ballistica.net/cache/ba1/06/64/d7715998bc60bfd5235f96b1a779", - "assets/build/pylib-apple/_osx_support.py": "https://files.ballistica.net/cache/ba1/4d/3c/5a86fa537a2101d34076a72d0460", + "assets/build/pylib-apple/_osx_support.py": "https://files.ballistica.net/cache/ba1/e2/a2/5732e53a09c179a2e1e5d372b386", "assets/build/pylib-apple/_py_abc.py": "https://files.ballistica.net/cache/ba1/be/e3/d1030ff81e5440dc12c13a6730f7", "assets/build/pylib-apple/_pydecimal.py": "https://files.ballistica.net/cache/ba1/c2/6b/9fb0fb2b25247a6d68939f5d6ed5", - "assets/build/pylib-apple/_pyio.py": "https://files.ballistica.net/cache/ba1/41/de/afbd4243267e690fe1588b49db4c", + "assets/build/pylib-apple/_pyio.py": "https://files.ballistica.net/cache/ba1/9e/59/a40cba37ce7db26726fc966c2b5d", "assets/build/pylib-apple/_sitebuiltins.py": "https://files.ballistica.net/cache/ba1/3b/91/55e882376c694fefc106067d0b3b", - "assets/build/pylib-apple/_strptime.py": "https://files.ballistica.net/cache/ba1/7f/b5/8867817306aea16b94f613a26b93", + "assets/build/pylib-apple/_strptime.py": "https://files.ballistica.net/cache/ba1/47/5a/feef7100cfb5a7c285130e2b18f2", "assets/build/pylib-apple/_threading_local.py": "https://files.ballistica.net/cache/ba1/94/a6/3e202c4309c356baf71a34e9325e", - "assets/build/pylib-apple/_weakrefset.py": "https://files.ballistica.net/cache/ba1/2a/9c/f9cca37dc1131dd602c5b96a2312", - "assets/build/pylib-apple/abc.py": "https://files.ballistica.net/cache/ba1/dd/25/65dc23811a08b2445492e9f9d8e3", - "assets/build/pylib-apple/aifc.py": "https://files.ballistica.net/cache/ba1/a3/50/aab369de7f1c182e54878faabd6a", - "assets/build/pylib-apple/antigravity.py": "https://files.ballistica.net/cache/ba1/72/dc/84c9bb5f53db3ffbb81fac16b5be", - "assets/build/pylib-apple/argparse.py": "https://files.ballistica.net/cache/ba1/0a/c2/5cdf93f738b653523e371e91013f", - "assets/build/pylib-apple/ast.py": "https://files.ballistica.net/cache/ba1/dc/7c/1b0ad2f77d1e0f66f87af801c866", - "assets/build/pylib-apple/asynchat.py": "https://files.ballistica.net/cache/ba1/af/53/8002843655550b707f97b0aef513", - "assets/build/pylib-apple/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/b1/da/6206890af9505a246cc7a20d5d66", + "assets/build/pylib-apple/_weakrefset.py": "https://files.ballistica.net/cache/ba1/70/fe/9c92a7a96cdb6b1e00e26aa98fca", + "assets/build/pylib-apple/abc.py": "https://files.ballistica.net/cache/ba1/f2/ec/c492154fca5b0a765895eaa5885a", + "assets/build/pylib-apple/aifc.py": "https://files.ballistica.net/cache/ba1/13/f1/c7846c59f3a3a3f5ac2bfcb5c29a", + "assets/build/pylib-apple/antigravity.py": "https://files.ballistica.net/cache/ba1/6f/c8/f009e5a528fadaa1d92edd2b117d", + "assets/build/pylib-apple/argparse.py": "https://files.ballistica.net/cache/ba1/f4/95/c4c481c556c7a6de0491eeb2305c", + "assets/build/pylib-apple/ast.py": "https://files.ballistica.net/cache/ba1/1e/f6/01830bff652757d9752b02ffabc4", + "assets/build/pylib-apple/asynchat.py": "https://files.ballistica.net/cache/ba1/ab/34/9ebc49afe08d87a195f7ad309f19", + "assets/build/pylib-apple/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/9d/6e/3c238acb7356a8f28a872e133cbe", "assets/build/pylib-apple/asyncio/__main__.py": "https://files.ballistica.net/cache/ba1/10/db/493c9bfaae1f8953435bf7aed8d2", - "assets/build/pylib-apple/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/eb/d3/3a958257fa4133116c01aa1bfd6f", + "assets/build/pylib-apple/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/3a/b9/9b76e7998ff30c55f33c355c107b", "assets/build/pylib-apple/asyncio/base_futures.py": "https://files.ballistica.net/cache/ba1/59/67/37e8f4938af7ebdea7da3fdef34c", "assets/build/pylib-apple/asyncio/base_subprocess.py": "https://files.ballistica.net/cache/ba1/88/cc/f422549995be43e7b17d9830ee38", "assets/build/pylib-apple/asyncio/base_tasks.py": "https://files.ballistica.net/cache/ba1/c5/8f/0a5cbd7b5a6f2c8531af87a09469", "assets/build/pylib-apple/asyncio/constants.py": "https://files.ballistica.net/cache/ba1/bc/0e/b8a63e47d3d3d73b198bf52019e5", "assets/build/pylib-apple/asyncio/coroutines.py": "https://files.ballistica.net/cache/ba1/c3/d7/e58784180e8e61785d455f7e3679", - "assets/build/pylib-apple/asyncio/events.py": "https://files.ballistica.net/cache/ba1/f0/18/e35781df09df31bca6aa14621d71", + "assets/build/pylib-apple/asyncio/events.py": "https://files.ballistica.net/cache/ba1/9a/6d/dceb42b5846a4f3bf7d09481898f", "assets/build/pylib-apple/asyncio/exceptions.py": "https://files.ballistica.net/cache/ba1/e1/81/9fcc3367d8ebba74819157777a25", "assets/build/pylib-apple/asyncio/format_helpers.py": "https://files.ballistica.net/cache/ba1/2d/0c/03cf213d7bc7bcc0a6ee0e7310dc", - "assets/build/pylib-apple/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/ef/69/ab54b22da528d7146cab1a00c2c1", - "assets/build/pylib-apple/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/ea/3c/7ac33a578ac25ca376a60bb59603", + "assets/build/pylib-apple/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/60/76/d98fd62af525430f90573b769925", + "assets/build/pylib-apple/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/1a/b2/3fd1917f489b608be4b33e256201", "assets/build/pylib-apple/asyncio/log.py": "https://files.ballistica.net/cache/ba1/0f/5a/f419c17cbe08eddfa90f314b8a6c", - "assets/build/pylib-apple/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/39/fd/2f6814cc54d475252da101fbba37", + "assets/build/pylib-apple/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/e7/95/1e4217bfe8a0afa14a9e5b75472b", "assets/build/pylib-apple/asyncio/protocols.py": "https://files.ballistica.net/cache/ba1/ea/73/2b77a852d18c2fe98e291552efca", - "assets/build/pylib-apple/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/c4/17/7336ec7c6b3c65724008ebd96b0a", - "assets/build/pylib-apple/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/e3/60/b4663ff9e8fa00a097e8b360ff29", - "assets/build/pylib-apple/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/e3/c4/d8a03bf572ad495a51250dc6a19b", - "assets/build/pylib-apple/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/2d/c1/29a029f52f3b8049eea1d3f86b35", + "assets/build/pylib-apple/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/7f/b5/0f0ba0747453bcbe177708e70b2e", + "assets/build/pylib-apple/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/33/75/a7cf5f0e47834b852b370eb69dd5", + "assets/build/pylib-apple/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/8f/8b/5911fee9252df333b5a17e42ed37", + "assets/build/pylib-apple/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/c9/ea/bb021562e53450698ceb51bae575", "assets/build/pylib-apple/asyncio/staggered.py": "https://files.ballistica.net/cache/ba1/92/3a/0de93c93afe7311a68a615fb2b97", "assets/build/pylib-apple/asyncio/streams.py": "https://files.ballistica.net/cache/ba1/0c/e6/e52c7358eaa4a30fd6d8bbde94b8", "assets/build/pylib-apple/asyncio/subprocess.py": "https://files.ballistica.net/cache/ba1/98/e4/5b002decc44112664cf6526da71a", - "assets/build/pylib-apple/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/a1/a8/22d7a8d58241353a5e288b40759f", + "assets/build/pylib-apple/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/3b/8c/d683b44a74c3f23636eb515f1c05", + "assets/build/pylib-apple/asyncio/threads.py": "https://files.ballistica.net/cache/ba1/1e/4c/d4de9a8086f5bd56041bd52a7fc9", "assets/build/pylib-apple/asyncio/transports.py": "https://files.ballistica.net/cache/ba1/3a/34/f3cc4d7abb02461d148faf8ef19f", "assets/build/pylib-apple/asyncio/trsock.py": "https://files.ballistica.net/cache/ba1/19/74/be437ee7d795f7c6106ef8fbf2db", - "assets/build/pylib-apple/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/28/6e/301cee24873c77c336504addd197", - "assets/build/pylib-apple/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/59/d9/96f8e8e2324dd0400362ff05bd4f", + "assets/build/pylib-apple/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/ac/31/b63e452f91b9ee3a8c8da36b5d24", + "assets/build/pylib-apple/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/f5/85/78a7a30c951b5b9992e40a30e7e7", "assets/build/pylib-apple/asyncio/windows_utils.py": "https://files.ballistica.net/cache/ba1/c3/9a/4bc6c5e7ffe8c0298bbae63157c0", - "assets/build/pylib-apple/asyncore.py": "https://files.ballistica.net/cache/ba1/f0/6a/4573904ec9cac4fd3155e80d5959", - "assets/build/pylib-apple/base64.py": "https://files.ballistica.net/cache/ba1/fc/aa/394cb22a0c927c575758eacd5d3c", - "assets/build/pylib-apple/bdb.py": "https://files.ballistica.net/cache/ba1/51/50/2e05640cfc2c0a4b61ee3fa028d2", - "assets/build/pylib-apple/binhex.py": "https://files.ballistica.net/cache/ba1/51/d9/72daaed73460e29cbf10a63bb7f5", - "assets/build/pylib-apple/bisect.py": "https://files.ballistica.net/cache/ba1/61/e8/bbdb541d16a6fa002a0fd395c73b", - "assets/build/pylib-apple/bz2.py": "https://files.ballistica.net/cache/ba1/4c/3d/878a1e93876d64136fa253176b50", - "assets/build/pylib-apple/cProfile.py": "https://files.ballistica.net/cache/ba1/5a/59/5bc5210e1fb224b2942453595609", + "assets/build/pylib-apple/asyncore.py": "https://files.ballistica.net/cache/ba1/67/d8/ec498cdfaa71a51b7cb9f11541fa", + "assets/build/pylib-apple/base64.py": "https://files.ballistica.net/cache/ba1/5f/a8/78c13d54e9c864c42198fa3cac81", + "assets/build/pylib-apple/bdb.py": "https://files.ballistica.net/cache/ba1/be/77/d307f03f678483487451a2dc4df9", + "assets/build/pylib-apple/binhex.py": "https://files.ballistica.net/cache/ba1/55/2a/cd97de9d7e92a69ea9fd26be5498", + "assets/build/pylib-apple/bisect.py": "https://files.ballistica.net/cache/ba1/e0/53/4c86151ca143696408b16f54e687", + "assets/build/pylib-apple/bz2.py": "https://files.ballistica.net/cache/ba1/ff/13/955800a917e23238dd071cae85ca", + "assets/build/pylib-apple/cProfile.py": "https://files.ballistica.net/cache/ba1/d9/b8/bd483641d5eb3292a4ef38771c04", "assets/build/pylib-apple/calendar.py": "https://files.ballistica.net/cache/ba1/59/9c/2b0a13658c958a9995ade122ae00", - "assets/build/pylib-apple/cgi.py": "https://files.ballistica.net/cache/ba1/a2/53/87021ed914efdc55b636a828f8a0", + "assets/build/pylib-apple/cgi.py": "https://files.ballistica.net/cache/ba1/4f/53/efcf1aa5ac4c4ff124de0e8ce501", "assets/build/pylib-apple/cgitb.py": "https://files.ballistica.net/cache/ba1/9a/2d/70325a99eeaff8701540d2304d80", "assets/build/pylib-apple/chunk.py": "https://files.ballistica.net/cache/ba1/e0/4d/8609a028d890841ff867e97f0869", "assets/build/pylib-apple/cmd.py": "https://files.ballistica.net/cache/ba1/33/25/43fd9394378dd3db266dd35af46e", "assets/build/pylib-apple/code.py": "https://files.ballistica.net/cache/ba1/18/fc/d667016222e466707ec5d0991810", - "assets/build/pylib-apple/codecs.py": "https://files.ballistica.net/cache/ba1/34/82/17d21cdb1a3a8e740629b5720b5b", - "assets/build/pylib-apple/codeop.py": "https://files.ballistica.net/cache/ba1/95/e2/6ba7d680c393e7ddcf72425a9731", - "assets/build/pylib-apple/collections/__init__.py": "https://files.ballistica.net/cache/ba1/2f/ec/36668a1b0f8ffedd3a1fa1ddb276", - "assets/build/pylib-apple/collections/abc.py": "https://files.ballistica.net/cache/ba1/78/dd/38815f6fb41c45822afef8fb1b71", + "assets/build/pylib-apple/codecs.py": "https://files.ballistica.net/cache/ba1/b5/29/a03b1f3dee0d9e2472ef6f9e0cb4", + "assets/build/pylib-apple/codeop.py": "https://files.ballistica.net/cache/ba1/41/29/d34bf4a5e7ca2fc47a2595cf2f1e", + "assets/build/pylib-apple/collections/__init__.py": "https://files.ballistica.net/cache/ba1/c5/04/742da41b4f964e41427b944d5d64", + "assets/build/pylib-apple/collections/abc.py": "https://files.ballistica.net/cache/ba1/63/ca/9d22346f8750ef62088de3c25c0a", "assets/build/pylib-apple/colorsys.py": "https://files.ballistica.net/cache/ba1/ae/99/594631454b09ad4d5c34ec54a344", - "assets/build/pylib-apple/compileall.py": "https://files.ballistica.net/cache/ba1/1f/d7/80c8a9cb297994b001f766f96ca7", + "assets/build/pylib-apple/compileall.py": "https://files.ballistica.net/cache/ba1/b0/10/10ea577b4b7cd27aea2b86b744ad", "assets/build/pylib-apple/concurrent/__init__.py": "https://files.ballistica.net/cache/ba1/f8/0b/346441ef94908fb806338d0510b6", "assets/build/pylib-apple/concurrent/futures/__init__.py": "https://files.ballistica.net/cache/ba1/6b/26/78ac686a2335efb18fa8ed0e5d6a", - "assets/build/pylib-apple/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/e4/da/c5f51a895dbd067d6571a8f1e979", - "assets/build/pylib-apple/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/34/ba/b02bf14621a6b888a29c1a3bb11f", - "assets/build/pylib-apple/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/46/10/e24a0ea083991df41a0301a22b94", - "assets/build/pylib-apple/configparser.py": "https://files.ballistica.net/cache/ba1/06/36/09b61a5e5de8234b37fd3f476493", - "assets/build/pylib-apple/contextlib.py": "https://files.ballistica.net/cache/ba1/e3/b7/1cfb5689e277e48c8c347f6ba36e", + "assets/build/pylib-apple/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/30/85/3db73e4fd0be60ad09eaf5dde94e", + "assets/build/pylib-apple/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/51/3f/bec0554d1aa041ac88375f6e0ab0", + "assets/build/pylib-apple/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/0b/0c/c8315a0b957c916ccc39b1e5dd3d", + "assets/build/pylib-apple/configparser.py": "https://files.ballistica.net/cache/ba1/5e/5d/289f318a747d76d68a2bff077c8f", + "assets/build/pylib-apple/contextlib.py": "https://files.ballistica.net/cache/ba1/a6/a7/6e93480a1647ba9d4f40f8644fb1", "assets/build/pylib-apple/contextvars.py": "https://files.ballistica.net/cache/ba1/02/52/e520b59b10124c813468252fee2a", "assets/build/pylib-apple/copy.py": "https://files.ballistica.net/cache/ba1/d9/f7/6d68526a34fd56e358cc920f723c", - "assets/build/pylib-apple/copyreg.py": "https://files.ballistica.net/cache/ba1/0c/5a/c21a2c6000ad2947861fbd711834", - "assets/build/pylib-apple/crypt.py": "https://files.ballistica.net/cache/ba1/1e/e7/a5d7cc52a39b600ea554534a75de", + "assets/build/pylib-apple/copyreg.py": "https://files.ballistica.net/cache/ba1/45/0e/7ea7c2f999ef934f25706abf0670", + "assets/build/pylib-apple/crypt.py": "https://files.ballistica.net/cache/ba1/a8/21/905bf832e4a54f0efde53d431f2f", "assets/build/pylib-apple/csv.py": "https://files.ballistica.net/cache/ba1/02/21/503374208b50d8cffa21e5aad48a", - "assets/build/pylib-apple/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/1f/87/6aeddc887fcb3d346849b4dcab80", + "assets/build/pylib-apple/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/68/b7/87f1ceae16da8b248a771145e8e4", "assets/build/pylib-apple/ctypes/_aix.py": "https://files.ballistica.net/cache/ba1/f4/e3/d0d2b2809d80ad7cd813477be797", "assets/build/pylib-apple/ctypes/_endian.py": "https://files.ballistica.net/cache/ba1/f7/ff/297cd3308735876b3d7ac54172e0", "assets/build/pylib-apple/ctypes/macholib/__init__.py": "https://files.ballistica.net/cache/ba1/cd/67/df2ef87d5f3411077030882bcae3", - "assets/build/pylib-apple/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/cb/c0/d8e7e17b9b3122e1a0fc5ba805cc", + "assets/build/pylib-apple/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/26/85/489db3f032a47813958e08c687d9", "assets/build/pylib-apple/ctypes/macholib/dylib.py": "https://files.ballistica.net/cache/ba1/bd/b1/b431a9e977498c9c5945a3f63da9", "assets/build/pylib-apple/ctypes/macholib/framework.py": "https://files.ballistica.net/cache/ba1/97/8b/19a7d679d50c0983f9c4b2f37d5e", "assets/build/pylib-apple/ctypes/util.py": "https://files.ballistica.net/cache/ba1/80/95/f30336080c30fcb7d5db549ef68b", "assets/build/pylib-apple/ctypes/wintypes.py": "https://files.ballistica.net/cache/ba1/09/43/f7e315d732918308ea4e4c197c5a", - "assets/build/pylib-apple/curses/__init__.py": "https://files.ballistica.net/cache/ba1/43/5a/c242200e965ec30f3922cf9f73b5", + "assets/build/pylib-apple/curses/__init__.py": "https://files.ballistica.net/cache/ba1/02/0b/75d9b2291f8ce6b7c06003397aba", "assets/build/pylib-apple/curses/ascii.py": "https://files.ballistica.net/cache/ba1/97/27/94584e1dcd1637dfdce80efa78eb", "assets/build/pylib-apple/curses/has_key.py": "https://files.ballistica.net/cache/ba1/60/17/fde8d2bfabfe53298f936ebdec88", "assets/build/pylib-apple/curses/panel.py": "https://files.ballistica.net/cache/ba1/41/42/ef63abf4b18669a22ab9141bcb88", "assets/build/pylib-apple/curses/textpad.py": "https://files.ballistica.net/cache/ba1/34/78/bc5c856e5f1d8439d4e191bc4f75", - "assets/build/pylib-apple/dataclasses.py": "https://files.ballistica.net/cache/ba1/85/e7/aaa5f74230b93068c7bc6df9a645", - "assets/build/pylib-apple/datetime.py": "https://files.ballistica.net/cache/ba1/e1/32/e063935d59bbc2d0383228dc93a6", + "assets/build/pylib-apple/dataclasses.py": "https://files.ballistica.net/cache/ba1/45/58/a588aebb8cdfc7de8672707af32f", + "assets/build/pylib-apple/datetime.py": "https://files.ballistica.net/cache/ba1/2e/98/cc69b8e574fd63662ee0c3abbb90", "assets/build/pylib-apple/decimal.py": "https://files.ballistica.net/cache/ba1/dd/5d/8d0f90ec4e20c613b6ce2a88bc60", - "assets/build/pylib-apple/difflib.py": "https://files.ballistica.net/cache/ba1/63/ca/23738df60b6b3ffe279a617df1bf", + "assets/build/pylib-apple/difflib.py": "https://files.ballistica.net/cache/ba1/83/23/5a8f85ded63f438f11a87c15efc8", "assets/build/pylib-apple/dis.py": "https://files.ballistica.net/cache/ba1/52/8c/c990047191c2cad1f2ce978b146d", - "assets/build/pylib-apple/doctest.py": "https://files.ballistica.net/cache/ba1/2e/e7/7821f5346e5e5f1b228d8a4a0d00", - "assets/build/pylib-apple/dummy_threading.py": "https://files.ballistica.net/cache/ba1/5b/60/6a2a69960c1c982fa667f3fd8051", + "assets/build/pylib-apple/doctest.py": "https://files.ballistica.net/cache/ba1/1c/3f/dd4e6d27965460ca8ffb6cba98b4", "assets/build/pylib-apple/email/__init__.py": "https://files.ballistica.net/cache/ba1/2f/8e/c14225900357ac302213f5b4d674", "assets/build/pylib-apple/email/_encoded_words.py": "https://files.ballistica.net/cache/ba1/c6/3d/d686aa9a7ddbee790ad558b25661", "assets/build/pylib-apple/email/_header_value_parser.py": "https://files.ballistica.net/cache/ba1/fb/2a/efe05a41d7fda3cba1d9a68b31b2", @@ -3109,9 +3116,9 @@ "assets/build/pylib-apple/email/feedparser.py": "https://files.ballistica.net/cache/ba1/5e/34/32eb942596826dd2cb845e9d2a2e", "assets/build/pylib-apple/email/generator.py": "https://files.ballistica.net/cache/ba1/09/86/f9ebd02a5a8a21bd66927b50fffe", "assets/build/pylib-apple/email/header.py": "https://files.ballistica.net/cache/ba1/21/e7/9bb3af5ad0b37941d9c73020cccf", - "assets/build/pylib-apple/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/42/92/988e418cd7b901e8fefe1bd98358", + "assets/build/pylib-apple/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/22/69/f2b2aac8d956079f0833030b5f8d", "assets/build/pylib-apple/email/iterators.py": "https://files.ballistica.net/cache/ba1/2f/8c/6a1dc186422beb8546721f22b72b", - "assets/build/pylib-apple/email/message.py": "https://files.ballistica.net/cache/ba1/53/6f/c22ef21e58ccc9496cdf08d003dc", + "assets/build/pylib-apple/email/message.py": "https://files.ballistica.net/cache/ba1/8d/1f/5ef489963e364dbd49228156a6e3", "assets/build/pylib-apple/email/mime/__init__.py": "https://files.ballistica.net/cache/ba1/e0/cb/20c79c7faa724bdfeebae99795aa", "assets/build/pylib-apple/email/mime/application.py": "https://files.ballistica.net/cache/ba1/45/a9/97edc07b0a7c7e3e004422b674c2", "assets/build/pylib-apple/email/mime/audio.py": "https://files.ballistica.net/cache/ba1/c8/25/9973c555726af5e265c0f459e8b2", @@ -3124,9 +3131,9 @@ "assets/build/pylib-apple/email/parser.py": "https://files.ballistica.net/cache/ba1/86/8c/8030eb141d7713a36befee9736ef", "assets/build/pylib-apple/email/policy.py": "https://files.ballistica.net/cache/ba1/a5/64/8c59670fdf565988c72f21040ed5", "assets/build/pylib-apple/email/quoprimime.py": "https://files.ballistica.net/cache/ba1/4a/85/aa0a24ec3a4f407d18aadf357bad", - "assets/build/pylib-apple/email/utils.py": "https://files.ballistica.net/cache/ba1/07/04/1a8a3e3d77eb4b3b31f434514012", + "assets/build/pylib-apple/email/utils.py": "https://files.ballistica.net/cache/ba1/92/e5/20f2c37647f2fcdb586b78a340e5", "assets/build/pylib-apple/encodings/__init__.py": "https://files.ballistica.net/cache/ba1/b8/61/d28f98d3527e5e7285265ef03f7f", - "assets/build/pylib-apple/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/3a/72/a855c1e63bc3510a87099b87770f", + "assets/build/pylib-apple/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/d8/a9/a7cd663238f58ba364d163ab0caf", "assets/build/pylib-apple/encodings/ascii.py": "https://files.ballistica.net/cache/ba1/ae/eb/d4efe1172c154ed19f3ed9c3e0d8", "assets/build/pylib-apple/encodings/base64_codec.py": "https://files.ballistica.net/cache/ba1/ac/9d/63f89df311a1a5cfb3c0e8cedcce", "assets/build/pylib-apple/encodings/big5.py": "https://files.ballistica.net/cache/ba1/78/ea/960502c422e3c224c8ad449fd429", @@ -3213,7 +3220,6 @@ "assets/build/pylib-apple/encodings/kz1048.py": "https://files.ballistica.net/cache/ba1/f5/2a/2b0dcc29c907c6a518497c7f48c7", "assets/build/pylib-apple/encodings/latin_1.py": "https://files.ballistica.net/cache/ba1/59/fe/91ae90c6e9dd63531cb3d312100b", "assets/build/pylib-apple/encodings/mac_arabic.py": "https://files.ballistica.net/cache/ba1/68/fe/d6a7084555b675b9c484ce28b0b7", - "assets/build/pylib-apple/encodings/mac_centeuro.py": "https://files.ballistica.net/cache/ba1/0b/79/3f05d1194270249651c838df01f2", "assets/build/pylib-apple/encodings/mac_croatian.py": "https://files.ballistica.net/cache/ba1/b7/55/5934baacacdbab3fc78aab842577", "assets/build/pylib-apple/encodings/mac_cyrillic.py": "https://files.ballistica.net/cache/ba1/4a/4a/56eb674ccc125d9f75c14283d979", "assets/build/pylib-apple/encodings/mac_farsi.py": "https://files.ballistica.net/cache/ba1/f1/d3/6f3a3bc64f3dee0db82072cd1578", @@ -3248,363 +3254,380 @@ "assets/build/pylib-apple/encodings/utf_8_sig.py": "https://files.ballistica.net/cache/ba1/1b/c8/1ffa26b3c2a650efae206d27b6f3", "assets/build/pylib-apple/encodings/uu_codec.py": "https://files.ballistica.net/cache/ba1/40/6c/279145a291f59642952ea9880b9d", "assets/build/pylib-apple/encodings/zlib_codec.py": "https://files.ballistica.net/cache/ba1/1f/c9/57406baceeabe0a0e201a81833d5", - "assets/build/pylib-apple/enum.py": "https://files.ballistica.net/cache/ba1/68/87/a3fbd9a4a710a06e03625e870b37", - "assets/build/pylib-apple/filecmp.py": "https://files.ballistica.net/cache/ba1/4f/1a/2d6576fd5bc7722af46820164d58", - "assets/build/pylib-apple/fileinput.py": "https://files.ballistica.net/cache/ba1/6b/04/bdebb1257b328a98f109e23eadfc", - "assets/build/pylib-apple/fnmatch.py": "https://files.ballistica.net/cache/ba1/00/11/7533d94880452cc0ab88f9373642", + "assets/build/pylib-apple/enum.py": "https://files.ballistica.net/cache/ba1/0a/93/a93daaeb9d8ed4bf372e75d8cedd", + "assets/build/pylib-apple/filecmp.py": "https://files.ballistica.net/cache/ba1/b9/69/6137a2d0a2c31a7e08891ee56c35", + "assets/build/pylib-apple/fileinput.py": "https://files.ballistica.net/cache/ba1/16/3d/b40632ab99df5c645db182c82023", + "assets/build/pylib-apple/fnmatch.py": "https://files.ballistica.net/cache/ba1/c7/a6/5036cd268eee8504116945ea8d02", "assets/build/pylib-apple/formatter.py": "https://files.ballistica.net/cache/ba1/b3/5f/58445670edaf8bb748c745197fa7", - "assets/build/pylib-apple/fractions.py": "https://files.ballistica.net/cache/ba1/df/db/61be6d9b79cbce6bb29fae2aa9fb", - "assets/build/pylib-apple/ftplib.py": "https://files.ballistica.net/cache/ba1/42/ef/b31f8d12adfe82836b95a930b26f", - "assets/build/pylib-apple/functools.py": "https://files.ballistica.net/cache/ba1/20/35/bec93f7b040908eb4b87f30d2fa0", + "assets/build/pylib-apple/fractions.py": "https://files.ballistica.net/cache/ba1/64/fc/75a465ea7bd286c6c0006ff6f9dc", + "assets/build/pylib-apple/ftplib.py": "https://files.ballistica.net/cache/ba1/6c/7f/c59704a4093cecace0737ff19134", + "assets/build/pylib-apple/functools.py": "https://files.ballistica.net/cache/ba1/a5/dd/c2f7f8be4be52671041268842bc8", "assets/build/pylib-apple/genericpath.py": "https://files.ballistica.net/cache/ba1/b3/cd/0b7bb99d3aa5a41b69a4b62cd3cf", "assets/build/pylib-apple/getopt.py": "https://files.ballistica.net/cache/ba1/46/47/d33382d447d398923f4c0c0f87c1", - "assets/build/pylib-apple/getpass.py": "https://files.ballistica.net/cache/ba1/02/a1/d4249edfdf76656945cda335490b", - "assets/build/pylib-apple/gettext.py": "https://files.ballistica.net/cache/ba1/f8/e0/8ad913d8eac5ad9d2f34973cbc77", - "assets/build/pylib-apple/glob.py": "https://files.ballistica.net/cache/ba1/9c/8c/5db3f5435168ff5270ae2dbd7977", - "assets/build/pylib-apple/gzip.py": "https://files.ballistica.net/cache/ba1/1e/e9/669c96cbbc701643459c26e0ce87", - "assets/build/pylib-apple/hashlib.py": "https://files.ballistica.net/cache/ba1/a1/51/6234b8612e60917ecea82b8a7f3a", + "assets/build/pylib-apple/getpass.py": "https://files.ballistica.net/cache/ba1/4e/67/45234cbaae5e74cdd50bab4423bd", + "assets/build/pylib-apple/gettext.py": "https://files.ballistica.net/cache/ba1/f7/39/95601dd0780dd07609592b57dda6", + "assets/build/pylib-apple/glob.py": "https://files.ballistica.net/cache/ba1/81/c2/fa7c53bfb8ab2b5bd8a07ae4c0ba", + "assets/build/pylib-apple/graphlib.py": "https://files.ballistica.net/cache/ba1/fc/d4/ee610106a558e0bd3a67ea75418a", + "assets/build/pylib-apple/gzip.py": "https://files.ballistica.net/cache/ba1/64/05/5ec0ddcf87b51b3d372df9b7e740", + "assets/build/pylib-apple/hashlib.py": "https://files.ballistica.net/cache/ba1/5c/c0/cf70700130b4bdd0a09f06c3006b", "assets/build/pylib-apple/heapq.py": "https://files.ballistica.net/cache/ba1/cf/ff/e3aa597a8669e6030a2b8ab06228", - "assets/build/pylib-apple/hmac.py": "https://files.ballistica.net/cache/ba1/b8/43/24176dd09b4a346c5d2fb23b2489", + "assets/build/pylib-apple/hmac.py": "https://files.ballistica.net/cache/ba1/b3/46/08335f3fac6c64dae75d20e07283", "assets/build/pylib-apple/html/__init__.py": "https://files.ballistica.net/cache/ba1/cd/32/56a082769e4cd6fb8de604e0a1aa", "assets/build/pylib-apple/html/entities.py": "https://files.ballistica.net/cache/ba1/98/95/6e96db7b66edc0178c1680bbd561", - "assets/build/pylib-apple/html/parser.py": "https://files.ballistica.net/cache/ba1/53/49/7e66623bcf32ec74f3b91806e36e", - "assets/build/pylib-apple/http/__init__.py": "https://files.ballistica.net/cache/ba1/0c/4b/fd4d41d4614d30fbbc8a29804306", - "assets/build/pylib-apple/http/client.py": "https://files.ballistica.net/cache/ba1/ce/d8/87e20752d130bbd5dd5e232247c9", + "assets/build/pylib-apple/html/parser.py": "https://files.ballistica.net/cache/ba1/64/af/83c193c1f479a9cc705b86c0422c", + "assets/build/pylib-apple/http/__init__.py": "https://files.ballistica.net/cache/ba1/ac/29/61d2120b0900162a941b89c9773f", + "assets/build/pylib-apple/http/client.py": "https://files.ballistica.net/cache/ba1/fd/6e/f396816c9a45b7e5d906ada54c60", "assets/build/pylib-apple/http/cookiejar.py": "https://files.ballistica.net/cache/ba1/ca/58/434a958d4f8372b96b4cfa87a4a2", - "assets/build/pylib-apple/http/cookies.py": "https://files.ballistica.net/cache/ba1/3f/7e/a86ac95ad155cd1e7469437ce570", - "assets/build/pylib-apple/http/server.py": "https://files.ballistica.net/cache/ba1/30/83/9001b9601fc4c335ba19384c7996", + "assets/build/pylib-apple/http/cookies.py": "https://files.ballistica.net/cache/ba1/4f/b7/ec4c23a01fb3b7a7a8c88239fb17", + "assets/build/pylib-apple/http/server.py": "https://files.ballistica.net/cache/ba1/0c/d0/b49e4c5a61de64a23b2c326cd6c3", "assets/build/pylib-apple/imghdr.py": "https://files.ballistica.net/cache/ba1/58/22/50ad8d061dc8e6c9d59e96bf04fe", "assets/build/pylib-apple/imp.py": "https://files.ballistica.net/cache/ba1/ee/bf/d6a2ec2413b54a6be3a02cfa00ba", "assets/build/pylib-apple/importlib/__init__.py": "https://files.ballistica.net/cache/ba1/4e/6f/8d7a262ab97963fdd5b9ce8efe8b", - "assets/build/pylib-apple/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/26/7f/65d2f08e6894232a4fcc3f070f8b", - "assets/build/pylib-apple/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/19/fe/c77419d8c6dd79a483b62652fe46", - "assets/build/pylib-apple/importlib/abc.py": "https://files.ballistica.net/cache/ba1/3f/bf/f3caab2fcf18ed1ae3ba1e9adaad", + "assets/build/pylib-apple/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/b8/22/e3b7a728bcaa4d1cc8e8211d3ed5", + "assets/build/pylib-apple/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/99/92/f7940cdd17b84552d2823ac3059c", + "assets/build/pylib-apple/importlib/_common.py": "https://files.ballistica.net/cache/ba1/83/f1/92265a70ba9137bef49793fb4963", + "assets/build/pylib-apple/importlib/abc.py": "https://files.ballistica.net/cache/ba1/3c/1a/c59f8ffca97eb2bbd043566279b3", "assets/build/pylib-apple/importlib/machinery.py": "https://files.ballistica.net/cache/ba1/1f/fe/2a27ae49f0c0db298c9eac2d6fa4", - "assets/build/pylib-apple/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/23/3d/9aa84052261a4f0a19d06413ceee", - "assets/build/pylib-apple/importlib/resources.py": "https://files.ballistica.net/cache/ba1/88/45/4484c3e601fb26761c9f300d2866", - "assets/build/pylib-apple/importlib/util.py": "https://files.ballistica.net/cache/ba1/28/14/519fd434e756d3e630d96cbc4d4f", - "assets/build/pylib-apple/inspect.py": "https://files.ballistica.net/cache/ba1/e0/5f/793c8e2af7674d58c5da7ed8c6a5", + "assets/build/pylib-apple/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/dd/26/14b3863c2caa3f146a4220c16894", + "assets/build/pylib-apple/importlib/resources.py": "https://files.ballistica.net/cache/ba1/50/16/38c4b66d58318baf727603ed74c0", + "assets/build/pylib-apple/importlib/util.py": "https://files.ballistica.net/cache/ba1/ca/bb/3a4156656f9b1f1037d2429a72f5", + "assets/build/pylib-apple/inspect.py": "https://files.ballistica.net/cache/ba1/5f/5b/33e01ea6246c532b749ff56c713b", "assets/build/pylib-apple/io.py": "https://files.ballistica.net/cache/ba1/f9/ed/07dba0ecf1e81d4cd816bce9542b", - "assets/build/pylib-apple/ipaddress.py": "https://files.ballistica.net/cache/ba1/4b/33/905d7110b8f1bdce47d9ca897302", - "assets/build/pylib-apple/json/__init__.py": "https://files.ballistica.net/cache/ba1/72/b2/49cbdedf6ad5c411bb444377ec4f", + "assets/build/pylib-apple/ipaddress.py": "https://files.ballistica.net/cache/ba1/7a/3f/e87514b33ba1527edb5701932554", + "assets/build/pylib-apple/json/__init__.py": "https://files.ballistica.net/cache/ba1/25/90/8a5205e19cc65824ea1055a736f3", "assets/build/pylib-apple/json/decoder.py": "https://files.ballistica.net/cache/ba1/6f/c8/ddcd524fd23ec4c64a11c80905da", "assets/build/pylib-apple/json/encoder.py": "https://files.ballistica.net/cache/ba1/ec/bd/e78407bc99409c0fd4a6ff25c112", "assets/build/pylib-apple/json/scanner.py": "https://files.ballistica.net/cache/ba1/81/7c/03b7f8d8f18de6a1b12debd594db", - "assets/build/pylib-apple/json/tool.py": "https://files.ballistica.net/cache/ba1/14/15/f9f6e36235068667cb79b18fae84", - "assets/build/pylib-apple/keyword.py": "https://files.ballistica.net/cache/ba1/58/77/7d22ba844f36174fcbf10e362d44", - "assets/build/pylib-apple/linecache.py": "https://files.ballistica.net/cache/ba1/50/52/03cee68f3d0a5959db0fb4746e6c", - "assets/build/pylib-apple/locale.py": "https://files.ballistica.net/cache/ba1/90/f9/938e5408764ae6a0fc378cc301bb", - "assets/build/pylib-apple/logging/__init__.py": "https://files.ballistica.net/cache/ba1/a4/3a/d8719b6afe0790133bb09d168438", - "assets/build/pylib-apple/logging/config.py": "https://files.ballistica.net/cache/ba1/47/7d/30abadf91ca12fe6e68fdc38b239", - "assets/build/pylib-apple/logging/handlers.py": "https://files.ballistica.net/cache/ba1/6a/26/5e31888d46fc1f0616c2cc5cfc78", - "assets/build/pylib-apple/lzma.py": "https://files.ballistica.net/cache/ba1/8d/4c/6289a712439521bf99a154d316ab", - "assets/build/pylib-apple/mailbox.py": "https://files.ballistica.net/cache/ba1/bc/95/77de0c6aaad3819b09abe0eed612", - "assets/build/pylib-apple/mailcap.py": "https://files.ballistica.net/cache/ba1/c8/fc/03aaee28a480c60b9465c8358df2", - "assets/build/pylib-apple/mimetypes.py": "https://files.ballistica.net/cache/ba1/9b/50/39e619d3ea0dbda304627f859782", - "assets/build/pylib-apple/modulefinder.py": "https://files.ballistica.net/cache/ba1/f5/26/0d92ec3a03d7f933cf157572f375", + "assets/build/pylib-apple/json/tool.py": "https://files.ballistica.net/cache/ba1/64/eb/8e43da0d2e57b7b1b866baf76c7d", + "assets/build/pylib-apple/keyword.py": "https://files.ballistica.net/cache/ba1/10/71/8b7f301021ebf02b37d116fffcac", + "assets/build/pylib-apple/linecache.py": "https://files.ballistica.net/cache/ba1/70/6b/18924560575dc071af05ff1c23d9", + "assets/build/pylib-apple/locale.py": "https://files.ballistica.net/cache/ba1/be/38/d3f3510ad98468a398af864ca48b", + "assets/build/pylib-apple/logging/__init__.py": "https://files.ballistica.net/cache/ba1/bb/ab/f8ffb9fde815b8956983e7038e78", + "assets/build/pylib-apple/logging/config.py": "https://files.ballistica.net/cache/ba1/61/02/0138edd72b73cc8d2e3f7a112d65", + "assets/build/pylib-apple/logging/handlers.py": "https://files.ballistica.net/cache/ba1/86/95/c2c5c4f53cc2f9fef929145dbc93", + "assets/build/pylib-apple/lzma.py": "https://files.ballistica.net/cache/ba1/a9/90/2cedbc63be303fd2e4fe9ad9293d", + "assets/build/pylib-apple/mailbox.py": "https://files.ballistica.net/cache/ba1/e3/28/f0d20f21f0858b3e730ebebdfef3", + "assets/build/pylib-apple/mailcap.py": "https://files.ballistica.net/cache/ba1/4d/23/f74089a34cbd2edc6c11ebb790aa", + "assets/build/pylib-apple/mimetypes.py": "https://files.ballistica.net/cache/ba1/0c/ce/895933f8a07f7c21b500fa66a2c1", + "assets/build/pylib-apple/modulefinder.py": "https://files.ballistica.net/cache/ba1/88/34/e12f85d48d954a45ecf42c243c21", + "assets/build/pylib-apple/msilib/__init__.py": "https://files.ballistica.net/cache/ba1/aa/ff/356e0db47c4c1c06f8e37bcd38a7", + "assets/build/pylib-apple/msilib/schema.py": "https://files.ballistica.net/cache/ba1/bd/15/7ee47f77149296542aaf883e58f2", + "assets/build/pylib-apple/msilib/sequence.py": "https://files.ballistica.net/cache/ba1/94/25/0e90328d0fb33814334a3ec64472", + "assets/build/pylib-apple/msilib/text.py": "https://files.ballistica.net/cache/ba1/39/0a/1a182e532d3f0574298120dad765", "assets/build/pylib-apple/netrc.py": "https://files.ballistica.net/cache/ba1/35/a9/0a1e1c8ecab734c09a5f8d64b51a", - "assets/build/pylib-apple/nntplib.py": "https://files.ballistica.net/cache/ba1/37/d0/25c88f817de5a6705d1c227bbd0d", + "assets/build/pylib-apple/nntplib.py": "https://files.ballistica.net/cache/ba1/fa/d5/e0f012ba98a3069ced1c5115c043", "assets/build/pylib-apple/ntpath.py": "https://files.ballistica.net/cache/ba1/2c/fd/c8b71d3d5efdf44556c68df02d30", - "assets/build/pylib-apple/nturl2path.py": "https://files.ballistica.net/cache/ba1/d8/fa/0d625b59939d483cafa553790235", - "assets/build/pylib-apple/numbers.py": "https://files.ballistica.net/cache/ba1/92/16/807de1550920d485c87f3d587d5d", - "assets/build/pylib-apple/opcode.py": "https://files.ballistica.net/cache/ba1/7a/a8/3be6796ad635043eee8ba6ee031e", + "assets/build/pylib-apple/nturl2path.py": "https://files.ballistica.net/cache/ba1/cc/79/e930bdf392702ad2da57f10c8a7a", + "assets/build/pylib-apple/numbers.py": "https://files.ballistica.net/cache/ba1/45/40/fe6afa3e354c7bc5a9a8c3700659", + "assets/build/pylib-apple/opcode.py": "https://files.ballistica.net/cache/ba1/e2/15/1f3f5e8e6a3c24b455f71a055249", "assets/build/pylib-apple/operator.py": "https://files.ballistica.net/cache/ba1/c5/02/51e774eacc0e70d60420010749f4", "assets/build/pylib-apple/optparse.py": "https://files.ballistica.net/cache/ba1/a0/0b/202b321b2eddb9b62f30d58fd1f6", - "assets/build/pylib-apple/os.py": "https://files.ballistica.net/cache/ba1/65/88/d7823716fea104e4e65665b35f27", - "assets/build/pylib-apple/pathlib.py": "https://files.ballistica.net/cache/ba1/76/0b/2f2ac6ea5e2f56031de310e493da", - "assets/build/pylib-apple/pdb.py": "https://files.ballistica.net/cache/ba1/f9/7c/9da21258e7103d43019a8b121957", - "assets/build/pylib-apple/pickle.py": "https://files.ballistica.net/cache/ba1/f9/4b/0757ea3efc5c3bd10c325817b5e1", + "assets/build/pylib-apple/os.py": "https://files.ballistica.net/cache/ba1/57/6f/960711faa73f4114c7e2b473330f", + "assets/build/pylib-apple/pathlib.py": "https://files.ballistica.net/cache/ba1/ff/20/fd5951ff8c7f243dc49f13b6ebcf", + "assets/build/pylib-apple/pdb.py": "https://files.ballistica.net/cache/ba1/6d/14/23ebc1d637aad4a34eaa42bc52e7", + "assets/build/pylib-apple/pickle.py": "https://files.ballistica.net/cache/ba1/3f/5e/40fa7bfa971312a1a108610878a6", "assets/build/pylib-apple/pickletools.py": "https://files.ballistica.net/cache/ba1/b0/a2/0655f9bef1f950e8f678be867bec", "assets/build/pylib-apple/pipes.py": "https://files.ballistica.net/cache/ba1/95/86/92cb2b19dc776bd8d7dc459eccc3", - "assets/build/pylib-apple/pkgutil.py": "https://files.ballistica.net/cache/ba1/38/b0/3e59ab18a07c9f4f6995b855a7c4", - "assets/build/pylib-apple/platform.py": "https://files.ballistica.net/cache/ba1/bb/d4/06918fb7382d0f898f0f33bbd83c", - "assets/build/pylib-apple/plistlib.py": "https://files.ballistica.net/cache/ba1/db/bc/c8db0b8789383efeb714744754da", - "assets/build/pylib-apple/poplib.py": "https://files.ballistica.net/cache/ba1/92/a9/b8f8a4449c41b913cd0471a29703", + "assets/build/pylib-apple/pkgutil.py": "https://files.ballistica.net/cache/ba1/e7/20/8f854914afa27fb4574720e5b9ba", + "assets/build/pylib-apple/platform.py": "https://files.ballistica.net/cache/ba1/01/b3/05c486dd9e13f7c8152ba1e5ca7f", + "assets/build/pylib-apple/plistlib.py": "https://files.ballistica.net/cache/ba1/e0/71/58498a0c336ab3a26bfe82db1c37", + "assets/build/pylib-apple/poplib.py": "https://files.ballistica.net/cache/ba1/50/c6/d2c55762b3e2e06754cdec4aad0b", "assets/build/pylib-apple/posixpath.py": "https://files.ballistica.net/cache/ba1/e1/06/e298802e053842f6d101326ae76c", - "assets/build/pylib-apple/pprint.py": "https://files.ballistica.net/cache/ba1/04/96/6c34676c08e631ded6416c14866d", - "assets/build/pylib-apple/profile.py": "https://files.ballistica.net/cache/ba1/6f/e5/b1348f0c118f508d94d24f0a1133", - "assets/build/pylib-apple/pstats.py": "https://files.ballistica.net/cache/ba1/94/fb/1e30f0b143965be031f2c3fa4121", + "assets/build/pylib-apple/pprint.py": "https://files.ballistica.net/cache/ba1/1e/80/4e9ac7adef0ffbf04946645782f5", + "assets/build/pylib-apple/profile.py": "https://files.ballistica.net/cache/ba1/87/07/7fc7d9607ba2dd3eace3de730d5a", + "assets/build/pylib-apple/pstats.py": "https://files.ballistica.net/cache/ba1/90/cd/9f43fa464fdfc86a1c817cefb0cf", "assets/build/pylib-apple/pty.py": "https://files.ballistica.net/cache/ba1/33/56/32146736331945537902f3771ffb", "assets/build/pylib-apple/py_compile.py": "https://files.ballistica.net/cache/ba1/3c/04/8cb4b45ddb65e3d8c30521dc3166", "assets/build/pylib-apple/pyclbr.py": "https://files.ballistica.net/cache/ba1/1a/e2/76bb863e9c510078b5e0828caf56", - "assets/build/pylib-apple/pydoc.py": "https://files.ballistica.net/cache/ba1/c7/39/322ac2338f1737dfa217f3645609", - "assets/build/pylib-apple/queue.py": "https://files.ballistica.net/cache/ba1/b6/2a/db3c0a47ad2bf43b3df8a2b4ebac", - "assets/build/pylib-apple/quopri.py": "https://files.ballistica.net/cache/ba1/34/a2/7e15c991e3a6ba75d988323117e8", - "assets/build/pylib-apple/random.py": "https://files.ballistica.net/cache/ba1/d1/55/4fddea355c8156b287408489b579", + "assets/build/pylib-apple/pydoc.py": "https://files.ballistica.net/cache/ba1/0c/fa/ed033fd11ded2014e69d07fa2f0e", + "assets/build/pylib-apple/queue.py": "https://files.ballistica.net/cache/ba1/bc/12/ad8745f4cd033dce64b4169d4998", + "assets/build/pylib-apple/quopri.py": "https://files.ballistica.net/cache/ba1/71/23/921fa527149e18b7dd43d408f104", + "assets/build/pylib-apple/random.py": "https://files.ballistica.net/cache/ba1/31/f0/de5e326b1e6ca1afeb1dd806b68e", "assets/build/pylib-apple/re.py": "https://files.ballistica.net/cache/ba1/49/00/196fc6e98b9c244526b2d773c71f", "assets/build/pylib-apple/reprlib.py": "https://files.ballistica.net/cache/ba1/25/3c/b07febf734908722d45da1ea6c57", "assets/build/pylib-apple/rlcompleter.py": "https://files.ballistica.net/cache/ba1/fd/6f/0d94c6ff1d295c4381fff0042842", - "assets/build/pylib-apple/runpy.py": "https://files.ballistica.net/cache/ba1/a8/01/35faaa35a3f951aca147d1863f11", + "assets/build/pylib-apple/runpy.py": "https://files.ballistica.net/cache/ba1/a2/94/1a3796437765db0b1506744cda8d", "assets/build/pylib-apple/sched.py": "https://files.ballistica.net/cache/ba1/6f/18/dd390ca79c5429626c7e4d3f52e8", - "assets/build/pylib-apple/secrets.py": "https://files.ballistica.net/cache/ba1/5e/a5/be60578ed41fe83eb1cd9124a2c4", - "assets/build/pylib-apple/selectors.py": "https://files.ballistica.net/cache/ba1/d0/d3/46fb0c3bd78b1a38c58f7823365a", + "assets/build/pylib-apple/secrets.py": "https://files.ballistica.net/cache/ba1/fb/3f/59ef3e01440f29a2d3eb193cb873", + "assets/build/pylib-apple/selectors.py": "https://files.ballistica.net/cache/ba1/4e/d1/ceb7bbee7484d8a49e8a3619766c", "assets/build/pylib-apple/shelve.py": "https://files.ballistica.net/cache/ba1/9b/7b/ae49077c735a6347f0711d0ecbb9", - "assets/build/pylib-apple/shlex.py": "https://files.ballistica.net/cache/ba1/7f/24/3dd0f393ff5d88dba1eef618e3cf", - "assets/build/pylib-apple/shutil.py": "https://files.ballistica.net/cache/ba1/0b/3f/191461e95650816203174656fb58", + "assets/build/pylib-apple/shlex.py": "https://files.ballistica.net/cache/ba1/9c/99/a93fe9fb09dbba3272bb202aa7eb", + "assets/build/pylib-apple/shutil.py": "https://files.ballistica.net/cache/ba1/48/92/1894bd52237ac84f9c3b0449d825", "assets/build/pylib-apple/signal.py": "https://files.ballistica.net/cache/ba1/1d/94/28fcd21e46fd2df5d11fd36b8a16", - "assets/build/pylib-apple/site.py": "https://files.ballistica.net/cache/ba1/b7/95/4d84e3aaf5c2bd15dfba3fb492e2", - "assets/build/pylib-apple/smtpd.py": "https://files.ballistica.net/cache/ba1/74/25/b2a885dc3ec86528497fa22b44d2", - "assets/build/pylib-apple/smtplib.py": "https://files.ballistica.net/cache/ba1/2c/cc/55e63d5083abe53feaa60b28ad9d", + "assets/build/pylib-apple/site.py": "https://files.ballistica.net/cache/ba1/81/4e/031e216c8c1f87051d623ff84905", + "assets/build/pylib-apple/smtpd.py": "https://files.ballistica.net/cache/ba1/5c/e8/9a963624c83a1954ee852bf9c789", + "assets/build/pylib-apple/smtplib.py": "https://files.ballistica.net/cache/ba1/14/83/9acf640b895fd35c6e342f2f5025", "assets/build/pylib-apple/sndhdr.py": "https://files.ballistica.net/cache/ba1/14/6a/c95a945f5f442e33567069ff95bd", - "assets/build/pylib-apple/socket.py": "https://files.ballistica.net/cache/ba1/38/33/369517fa47cab8bf4bc020986108", - "assets/build/pylib-apple/socketserver.py": "https://files.ballistica.net/cache/ba1/4b/d2/913b77ec0f800ec101e82e9e9721", + "assets/build/pylib-apple/socket.py": "https://files.ballistica.net/cache/ba1/88/b3/f0c30602772d32d5a2b05bb8448c", + "assets/build/pylib-apple/socketserver.py": "https://files.ballistica.net/cache/ba1/e4/81/ae642b90684451a011e516f74241", "assets/build/pylib-apple/sqlite3/__init__.py": "https://files.ballistica.net/cache/ba1/3e/dc/91b84dad3702e9ae8d915e3bd379", "assets/build/pylib-apple/sqlite3/dbapi2.py": "https://files.ballistica.net/cache/ba1/cd/c9/8ba4cb1adcb533d433e96af9f624", "assets/build/pylib-apple/sqlite3/dump.py": "https://files.ballistica.net/cache/ba1/cb/c9/2ea904e0824aefc3d9524174fd29", "assets/build/pylib-apple/sre_compile.py": "https://files.ballistica.net/cache/ba1/7d/b1/e88453af530e58284561945056c4", "assets/build/pylib-apple/sre_constants.py": "https://files.ballistica.net/cache/ba1/95/ef/a427cef2c7463b6906f53e8811b8", "assets/build/pylib-apple/sre_parse.py": "https://files.ballistica.net/cache/ba1/f7/67/2db2e1e8de620039831f008beb29", - "assets/build/pylib-apple/ssl.py": "https://files.ballistica.net/cache/ba1/7c/4a/5a2cd77e1d3b56e280ab08d8a03d", + "assets/build/pylib-apple/ssl.py": "https://files.ballistica.net/cache/ba1/70/cc/18a939e2d26071e9f5242ad0082b", "assets/build/pylib-apple/stat.py": "https://files.ballistica.net/cache/ba1/9b/79/01acd372faf539e10c6f87803eae", - "assets/build/pylib-apple/statistics.py": "https://files.ballistica.net/cache/ba1/4f/f9/ba5d026d82071429b4ed353b348c", - "assets/build/pylib-apple/string.py": "https://files.ballistica.net/cache/ba1/47/17/7792b18e4d5862d9269c3f2901ef", + "assets/build/pylib-apple/statistics.py": "https://files.ballistica.net/cache/ba1/8d/b8/19267f0ccef11b191b210fe24e31", + "assets/build/pylib-apple/string.py": "https://files.ballistica.net/cache/ba1/26/91/1f4fa0849214246a5befd79ffa18", "assets/build/pylib-apple/stringprep.py": "https://files.ballistica.net/cache/ba1/f0/9b/77cc5580b139f527ee84fff812fc", "assets/build/pylib-apple/struct.py": "https://files.ballistica.net/cache/ba1/10/6d/7a6c0fbac83b2680bbeda8585f8f", - "assets/build/pylib-apple/subprocess.py": "https://files.ballistica.net/cache/ba1/fc/86/c516d8f9c386967ae1c34998cb4c", - "assets/build/pylib-apple/sunau.py": "https://files.ballistica.net/cache/ba1/99/de/eb56408801fec20de1d7c4a745c8", - "assets/build/pylib-apple/symbol.py": "https://files.ballistica.net/cache/ba1/39/4b/212a37298559a013d6cb6ff84516", - "assets/build/pylib-apple/symtable.py": "https://files.ballistica.net/cache/ba1/1e/1d/a678654eac2ee7df2ebb3f5974fb", - "assets/build/pylib-apple/sysconfig.py": "https://files.ballistica.net/cache/ba1/9e/4a/d4f9f5af2ec717c5a1882df63657", + "assets/build/pylib-apple/subprocess.py": "https://files.ballistica.net/cache/ba1/fe/f0/6fa6c930a862d192b5050552768d", + "assets/build/pylib-apple/sunau.py": "https://files.ballistica.net/cache/ba1/e0/49/c14a20e198761c7dfa423f09941e", + "assets/build/pylib-apple/symbol.py": "https://files.ballistica.net/cache/ba1/98/87/854211c000e9ab3b9cf8c782c8c6", + "assets/build/pylib-apple/symtable.py": "https://files.ballistica.net/cache/ba1/1c/fa/cd6d53bd38fc81041492017c2f3c", + "assets/build/pylib-apple/sysconfig.py": "https://files.ballistica.net/cache/ba1/7d/68/79a91d965f85c8612cfe8f0a941f", "assets/build/pylib-apple/tabnanny.py": "https://files.ballistica.net/cache/ba1/f7/ba/da1e12d53ebdf326581c99c7d29b", - "assets/build/pylib-apple/tarfile.py": "https://files.ballistica.net/cache/ba1/2a/52/c64343bf4355d5f2f50a31a55480", + "assets/build/pylib-apple/tarfile.py": "https://files.ballistica.net/cache/ba1/0f/24/af09379912cf5cd831945b6964a6", "assets/build/pylib-apple/telnetlib.py": "https://files.ballistica.net/cache/ba1/48/28/786c9600155c60407fe91045d587", - "assets/build/pylib-apple/tempfile.py": "https://files.ballistica.net/cache/ba1/80/78/bea27cd8dbca1d14733b18a7f971", + "assets/build/pylib-apple/tempfile.py": "https://files.ballistica.net/cache/ba1/86/ae/9ce115d11e51c9fc4fee7df23d6f", "assets/build/pylib-apple/textwrap.py": "https://files.ballistica.net/cache/ba1/a9/d4/996c224bb06520a10b7bd86f8ee0", "assets/build/pylib-apple/this.py": "https://files.ballistica.net/cache/ba1/ae/6a/c4cfb10d365db8ca16afef89958e", - "assets/build/pylib-apple/threading.py": "https://files.ballistica.net/cache/ba1/ba/31/8a5be4b90aa2654e0c14fd8fe1ae", + "assets/build/pylib-apple/threading.py": "https://files.ballistica.net/cache/ba1/86/1d/12d419997981a3940c5881e253cc", "assets/build/pylib-apple/timeit.py": "https://files.ballistica.net/cache/ba1/70/2a/4dc25a032c4975b059f972c76e0f", "assets/build/pylib-apple/token.py": "https://files.ballistica.net/cache/ba1/da/77/a96be5a40982cc622f9812ee96e1", "assets/build/pylib-apple/tokenize.py": "https://files.ballistica.net/cache/ba1/49/2d/09c9c18b942346de0a1eb5932d39", - "assets/build/pylib-apple/trace.py": "https://files.ballistica.net/cache/ba1/42/50/c1163bfb4597bfe650d4b9116ca8", - "assets/build/pylib-apple/traceback.py": "https://files.ballistica.net/cache/ba1/ca/e6/b80536014c91b58078f251e535fa", - "assets/build/pylib-apple/tracemalloc.py": "https://files.ballistica.net/cache/ba1/b5/1e/62e69ad7c2181e30fac478d4f936", + "assets/build/pylib-apple/trace.py": "https://files.ballistica.net/cache/ba1/c0/03/35378c9447884cf4bb71f6425c20", + "assets/build/pylib-apple/traceback.py": "https://files.ballistica.net/cache/ba1/85/12/83105f24c37a9d989c13a698807e", + "assets/build/pylib-apple/tracemalloc.py": "https://files.ballistica.net/cache/ba1/77/0e/a83629cfbc0a9560ace295d5c403", "assets/build/pylib-apple/tty.py": "https://files.ballistica.net/cache/ba1/ec/ea/2421fecb0e38e38d55cf0ce2b0e2", - "assets/build/pylib-apple/types.py": "https://files.ballistica.net/cache/ba1/21/89/94447b44682aa438ea205a7e4a06", - "assets/build/pylib-apple/typing.py": "https://files.ballistica.net/cache/ba1/2a/c9/32965347ba5fa4b4fc0fab4d83c7", + "assets/build/pylib-apple/types.py": "https://files.ballistica.net/cache/ba1/f2/15/b89887617276a3df5d4d465627f1", + "assets/build/pylib-apple/typing.py": "https://files.ballistica.net/cache/ba1/0f/15/91d405d301764affaad6cb2d9ad3", "assets/build/pylib-apple/urllib/__init__.py": "https://files.ballistica.net/cache/ba1/a2/c9/6d1cda1b043897ad0b5b043e7112", "assets/build/pylib-apple/urllib/error.py": "https://files.ballistica.net/cache/ba1/09/dd/15e4e9e675bd3242b0d5fb0f2707", - "assets/build/pylib-apple/urllib/parse.py": "https://files.ballistica.net/cache/ba1/62/f9/b69b5ca52b8b5951b946243b4adb", - "assets/build/pylib-apple/urllib/request.py": "https://files.ballistica.net/cache/ba1/14/9d/63afd0699904a811bc6fb993d514", - "assets/build/pylib-apple/urllib/response.py": "https://files.ballistica.net/cache/ba1/03/b2/ec9cd1798de4004d98d213362713", + "assets/build/pylib-apple/urllib/parse.py": "https://files.ballistica.net/cache/ba1/cd/33/817e945bd2ebb157c5949cd2108d", + "assets/build/pylib-apple/urllib/request.py": "https://files.ballistica.net/cache/ba1/70/be/44b33af87064de4e5e387d213764", + "assets/build/pylib-apple/urllib/response.py": "https://files.ballistica.net/cache/ba1/80/27/642b1adb216af47e5401647276e7", "assets/build/pylib-apple/urllib/robotparser.py": "https://files.ballistica.net/cache/ba1/ba/83/b9c99d5b11514b827d64f9fd6d33", "assets/build/pylib-apple/uu.py": "https://files.ballistica.net/cache/ba1/02/7a/d6fed645dcff0d4aff84e3cea58e", - "assets/build/pylib-apple/uuid.py": "https://files.ballistica.net/cache/ba1/02/79/8cb316b2206be3cca67e6680036a", + "assets/build/pylib-apple/uuid.py": "https://files.ballistica.net/cache/ba1/f1/2a/9e44739fed968c3b750184ff1b65", "assets/build/pylib-apple/warnings.py": "https://files.ballistica.net/cache/ba1/65/5c/5e6cf7bf573f4fae2344c68bed04", - "assets/build/pylib-apple/wave.py": "https://files.ballistica.net/cache/ba1/4d/a0/b093aa87d58ab11be45e1e8dd05a", - "assets/build/pylib-apple/weakref.py": "https://files.ballistica.net/cache/ba1/2a/74/9f4d631ef9a7e998ec9fa040fea9", + "assets/build/pylib-apple/wave.py": "https://files.ballistica.net/cache/ba1/fe/5d/63cca128c210230749e7ab44d94c", + "assets/build/pylib-apple/weakref.py": "https://files.ballistica.net/cache/ba1/63/6c/284c757222502999672ca59f008b", "assets/build/pylib-apple/webbrowser.py": "https://files.ballistica.net/cache/ba1/a1/e0/c43c65b7330f037c51ee10009ba7", "assets/build/pylib-apple/xdrlib.py": "https://files.ballistica.net/cache/ba1/b7/83/ac6e63a15cead601475a09350849", "assets/build/pylib-apple/xml/__init__.py": "https://files.ballistica.net/cache/ba1/3f/bd/6072ff48fc04c3af1dcbb8005adf", "assets/build/pylib-apple/xml/dom/NodeFilter.py": "https://files.ballistica.net/cache/ba1/97/e8/e3ea178b500cab89a64c7e5d3d81", "assets/build/pylib-apple/xml/dom/__init__.py": "https://files.ballistica.net/cache/ba1/31/12/a48c1565e682174e10bbbcf5b819", "assets/build/pylib-apple/xml/dom/domreg.py": "https://files.ballistica.net/cache/ba1/7b/7d/a7cea1700813d14a0909085369b0", - "assets/build/pylib-apple/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/a1/36/34d0eea18937a0e2ae01a817cb72", + "assets/build/pylib-apple/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/91/0e/e275bf104b202bf61654bd70d525", "assets/build/pylib-apple/xml/dom/minicompat.py": "https://files.ballistica.net/cache/ba1/97/0c/a28bca0a0bd221a70cb6377f1bef", - "assets/build/pylib-apple/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/15/c2/a7bb9dbeebf7e3082b9fc932b008", + "assets/build/pylib-apple/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/cb/1c/c49400fc90343e994e3fcf2363d0", "assets/build/pylib-apple/xml/dom/pulldom.py": "https://files.ballistica.net/cache/ba1/bc/df/46a7e10fac8b5dd6c0361aaef6a2", - "assets/build/pylib-apple/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/03/bc/e639a0fd394cf537f9c29993179b", - "assets/build/pylib-apple/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/e9/83/50f2fae2edafbaacfd9e278d9d7b", + "assets/build/pylib-apple/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/40/f2/d8f3279b82679d625fc279e557f3", + "assets/build/pylib-apple/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/64/34/862bd6db5b788e67e6d97cdfffcc", "assets/build/pylib-apple/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/73/a6/0633b38a4c9db85b021447c9457c", - "assets/build/pylib-apple/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/24/b4/16f98ca0ce1d018ef86c370bba72", + "assets/build/pylib-apple/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/a7/be/4b2fa18753ae4f83215c2271918f", "assets/build/pylib-apple/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/87/76/e8e68d23559ff4b14e010dad2a32", "assets/build/pylib-apple/xml/etree/cElementTree.py": "https://files.ballistica.net/cache/ba1/50/ec/0cd835d512fa5ca9bcada07c27ab", "assets/build/pylib-apple/xml/parsers/__init__.py": "https://files.ballistica.net/cache/ba1/2c/3e/7f79fe325f250709ab2c01bedada", "assets/build/pylib-apple/xml/parsers/expat.py": "https://files.ballistica.net/cache/ba1/58/65/6ea61e8a28312897baa67deeac2e", - "assets/build/pylib-apple/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/9c/f8/3660a1de69e4e8c18a99ee85ad07", + "assets/build/pylib-apple/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/7c/a4/ee44447f0bf4dab1fdaa5401a41c", "assets/build/pylib-apple/xml/sax/_exceptions.py": "https://files.ballistica.net/cache/ba1/82/3b/a63de9807fe5698ad1283e70e261", - "assets/build/pylib-apple/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/1a/ac/411c7140a4dc1f075acad11a899f", + "assets/build/pylib-apple/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/c1/7b/bffc2cc52335fab24863a87692a9", "assets/build/pylib-apple/xml/sax/handler.py": "https://files.ballistica.net/cache/ba1/1c/69/1ebd1278f335c1f6283bded9e89b", "assets/build/pylib-apple/xml/sax/saxutils.py": "https://files.ballistica.net/cache/ba1/2f/a5/38f2998b6ed24c674aa04a32d899", "assets/build/pylib-apple/xml/sax/xmlreader.py": "https://files.ballistica.net/cache/ba1/41/e7/9fcf670b326880d5452a7cc4cc7c", "assets/build/pylib-apple/xmlrpc/__init__.py": "https://files.ballistica.net/cache/ba1/7a/ee/61deeb7b264890b54b1cbb894cf8", - "assets/build/pylib-apple/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/64/07/7249de27571c45a051572d3e5f3d", - "assets/build/pylib-apple/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/0b/6d/4d9c74b62db0068856f63ad0f29e", + "assets/build/pylib-apple/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/2f/a8/99cffeaf4f101014916d3415cdbd", + "assets/build/pylib-apple/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/8e/29/b94fdc590de0d74331e523cd2eae", "assets/build/pylib-apple/zipapp.py": "https://files.ballistica.net/cache/ba1/bc/39/2d745b00133cddd197c3a4ee400e", - "assets/build/pylib-apple/zipfile.py": "https://files.ballistica.net/cache/ba1/f2/7b/5614676b914cfbed897919046f1c", + "assets/build/pylib-apple/zipfile.py": "https://files.ballistica.net/cache/ba1/c3/1f/d3ed0dbc84826a76cf7d4fe32283", "assets/build/pylib-apple/zipimport.py": "https://files.ballistica.net/cache/ba1/1f/fa/e11a7b5e9b1191a74bb80f48dc9f", - "assets/build/windows/Win32/DLLs/_asyncio.pyd": "https://files.ballistica.net/cache/ba1/8d/de/800e3c97af2ce219a02b684e477c", - "assets/build/windows/Win32/DLLs/_asyncio_d.pyd": "https://files.ballistica.net/cache/ba1/e3/4d/ef2b666ed2c1dce82f73407caf68", - "assets/build/windows/Win32/DLLs/_bz2.pyd": "https://files.ballistica.net/cache/ba1/19/76/d5f179d480b26ffe56308415d28b", - "assets/build/windows/Win32/DLLs/_bz2_d.pyd": "https://files.ballistica.net/cache/ba1/c8/84/01422f9047df7c561eb7478643bc", - "assets/build/windows/Win32/DLLs/_ctypes.pyd": "https://files.ballistica.net/cache/ba1/4e/b2/30cb4f1924fe6ae528d2757ddf32", - "assets/build/windows/Win32/DLLs/_ctypes_d.pyd": "https://files.ballistica.net/cache/ba1/4f/14/d3564fabfce0e2a079e5d911f35a", - "assets/build/windows/Win32/DLLs/_ctypes_test.pyd": "https://files.ballistica.net/cache/ba1/51/d8/730d55a2ce2e2a1b5a1b738a4472", - "assets/build/windows/Win32/DLLs/_ctypes_test_d.pyd": "https://files.ballistica.net/cache/ba1/95/17/04dee43b02b0a026d763cc07954b", - "assets/build/windows/Win32/DLLs/_decimal.pyd": "https://files.ballistica.net/cache/ba1/b4/c7/522ae34b6b5f22f92b4ad3b4ceb2", - "assets/build/windows/Win32/DLLs/_decimal_d.pyd": "https://files.ballistica.net/cache/ba1/38/9d/6d790cb3eb0b896b4821a0ff8e6f", - "assets/build/windows/Win32/DLLs/_elementtree.pyd": "https://files.ballistica.net/cache/ba1/b8/82/4ee93baae05d17c96d0ffc45430d", - "assets/build/windows/Win32/DLLs/_elementtree_d.pyd": "https://files.ballistica.net/cache/ba1/35/63/1ffc72d11aa065b98fa10f1a42e7", - "assets/build/windows/Win32/DLLs/_hashlib.pyd": "https://files.ballistica.net/cache/ba1/c8/80/83f110f0afd6cd6e8a856ca860b4", - "assets/build/windows/Win32/DLLs/_hashlib_d.pyd": "https://files.ballistica.net/cache/ba1/de/b9/666391fb24c5d179bd3950a89e73", - "assets/build/windows/Win32/DLLs/_lzma.pyd": "https://files.ballistica.net/cache/ba1/1b/85/a4d05514f2e04858415a4d38741f", - "assets/build/windows/Win32/DLLs/_lzma_d.pyd": "https://files.ballistica.net/cache/ba1/b3/9c/34a5681ae0f2f473003c41598145", - "assets/build/windows/Win32/DLLs/_msi.pyd": "https://files.ballistica.net/cache/ba1/c8/e4/b4652214320f087102b1a3419fd4", - "assets/build/windows/Win32/DLLs/_msi_d.pyd": "https://files.ballistica.net/cache/ba1/2e/90/98ac82df2ae5e46bec283f5d9a9b", - "assets/build/windows/Win32/DLLs/_multiprocessing.pyd": "https://files.ballistica.net/cache/ba1/8c/8f/316765421523e677d5941258c651", - "assets/build/windows/Win32/DLLs/_multiprocessing_d.pyd": "https://files.ballistica.net/cache/ba1/87/cf/4ea7db642edd5e03a46af41576aa", - "assets/build/windows/Win32/DLLs/_overlapped.pyd": "https://files.ballistica.net/cache/ba1/24/d8/f17662d3c56ff611683657ddd2c5", - "assets/build/windows/Win32/DLLs/_overlapped_d.pyd": "https://files.ballistica.net/cache/ba1/d7/68/2852343867a48ca04f2bbd0abed0", - "assets/build/windows/Win32/DLLs/_queue.pyd": "https://files.ballistica.net/cache/ba1/f7/e3/45f3091b672acccbf3578b4bfe39", - "assets/build/windows/Win32/DLLs/_queue_d.pyd": "https://files.ballistica.net/cache/ba1/4d/38/7ead86d7ccf1914bcfbb6582fb5e", - "assets/build/windows/Win32/DLLs/_socket.pyd": "https://files.ballistica.net/cache/ba1/ed/68/e8042e91668ad33eb36561c6b629", - "assets/build/windows/Win32/DLLs/_socket_d.pyd": "https://files.ballistica.net/cache/ba1/27/a0/49e56fe84dc098f72ff6b12f0408", - "assets/build/windows/Win32/DLLs/_sqlite3.pyd": "https://files.ballistica.net/cache/ba1/30/07/effc3f8a77e3938440146755f087", - "assets/build/windows/Win32/DLLs/_sqlite3_d.pyd": "https://files.ballistica.net/cache/ba1/c8/a2/ccdcef00ada2b993938928f29a66", - "assets/build/windows/Win32/DLLs/_ssl.pyd": "https://files.ballistica.net/cache/ba1/fd/a9/0564bf549953a848b725dcd1ec8a", - "assets/build/windows/Win32/DLLs/_ssl_d.pyd": "https://files.ballistica.net/cache/ba1/10/1f/985bb1cb8d65a055554bccd1ed7c", - "assets/build/windows/Win32/DLLs/_testbuffer.pyd": "https://files.ballistica.net/cache/ba1/33/11/5a33331b18e47f49acb46a14a02b", - "assets/build/windows/Win32/DLLs/_testbuffer_d.pyd": "https://files.ballistica.net/cache/ba1/85/8d/6b43a04ea1324aafb8c8306a7264", - "assets/build/windows/Win32/DLLs/_testcapi.pyd": "https://files.ballistica.net/cache/ba1/08/6a/8e74bff951fdf6f20f0e2feed891", - "assets/build/windows/Win32/DLLs/_testcapi_d.pyd": "https://files.ballistica.net/cache/ba1/a6/a1/c8375b852ec72779bcfc13ef1d3b", - "assets/build/windows/Win32/DLLs/_testconsole.pyd": "https://files.ballistica.net/cache/ba1/1e/d6/bfbbd4179c10779da86bce93db27", - "assets/build/windows/Win32/DLLs/_testconsole_d.pyd": "https://files.ballistica.net/cache/ba1/dd/52/1437c93c7ae7adec7dcd020a0a69", - "assets/build/windows/Win32/DLLs/_testimportmultiple.pyd": "https://files.ballistica.net/cache/ba1/be/93/d94a12ed9a2fb4a4fe30c7bc1d14", - "assets/build/windows/Win32/DLLs/_testimportmultiple_d.pyd": "https://files.ballistica.net/cache/ba1/d7/71/e781ddfbc40f9946bec4e587847f", - "assets/build/windows/Win32/DLLs/_testmultiphase.pyd": "https://files.ballistica.net/cache/ba1/27/e6/b72e931d1cc112bc6172509afe8b", - "assets/build/windows/Win32/DLLs/_testmultiphase_d.pyd": "https://files.ballistica.net/cache/ba1/c2/d6/482bda4e439a5d7cb339528c59fb", - "assets/build/windows/Win32/DLLs/_tkinter.pyd": "https://files.ballistica.net/cache/ba1/a2/ae/8f0117dacefaf1518a508e4f84f1", - "assets/build/windows/Win32/DLLs/_tkinter_d.lib": "https://files.ballistica.net/cache/ba1/91/b9/efde15bd959340cfe6235dd8aeb5", - "assets/build/windows/Win32/DLLs/_tkinter_d.pyd": "https://files.ballistica.net/cache/ba1/fb/4d/98a28fe2109ffc2373bc4071eed0", - "assets/build/windows/Win32/DLLs/libcrypto-1_1.dll": "https://files.ballistica.net/cache/ba1/22/74/724cad55596b66aca60c4a6722ea", + "assets/build/pylib-apple/zoneinfo/__init__.py": "https://files.ballistica.net/cache/ba1/0d/98/0cf009982c33ab3cfec1cd201628", + "assets/build/pylib-apple/zoneinfo/_common.py": "https://files.ballistica.net/cache/ba1/86/c5/8825cb59916a302b81a0b540e6ec", + "assets/build/pylib-apple/zoneinfo/_tzpath.py": "https://files.ballistica.net/cache/ba1/23/43/a1f97306955413a1100b70e04d10", + "assets/build/pylib-apple/zoneinfo/_zoneinfo.py": "https://files.ballistica.net/cache/ba1/1a/99/08ccb8b87d05018a64b84d53ef30", + "assets/build/windows/Win32/DLLs/_asyncio.pyd": "https://files.ballistica.net/cache/ba1/22/52/ad23d03bc2e3fc4dfde1f89e197d", + "assets/build/windows/Win32/DLLs/_asyncio_d.pyd": "https://files.ballistica.net/cache/ba1/4c/5a/941b11f15c5fe3c685885bc19908", + "assets/build/windows/Win32/DLLs/_bz2.pyd": "https://files.ballistica.net/cache/ba1/60/0e/6d1e3c3e82f081976e61c6d1efe4", + "assets/build/windows/Win32/DLLs/_bz2_d.pyd": "https://files.ballistica.net/cache/ba1/bb/cf/e717d28ffef8f6c2648271961aa6", + "assets/build/windows/Win32/DLLs/_ctypes.pyd": "https://files.ballistica.net/cache/ba1/d2/42/376535f2b5ea4c6e987702456494", + "assets/build/windows/Win32/DLLs/_ctypes_d.pyd": "https://files.ballistica.net/cache/ba1/e0/d1/188181bd1440d3d6b17d9cc430a6", + "assets/build/windows/Win32/DLLs/_ctypes_test.pyd": "https://files.ballistica.net/cache/ba1/37/ce/338c5f51f465972a4495e8bf10fc", + "assets/build/windows/Win32/DLLs/_ctypes_test_d.pyd": "https://files.ballistica.net/cache/ba1/fb/5e/f3252c380be87ac072cf1c29d7d0", + "assets/build/windows/Win32/DLLs/_decimal.pyd": "https://files.ballistica.net/cache/ba1/29/fe/20e8c5d844f30f341253c679d565", + "assets/build/windows/Win32/DLLs/_decimal_d.pyd": "https://files.ballistica.net/cache/ba1/a1/db/6f8ea21df65f20d9309f63938af6", + "assets/build/windows/Win32/DLLs/_elementtree.pyd": "https://files.ballistica.net/cache/ba1/9c/86/3f39e211d1067e8483a657c368b2", + "assets/build/windows/Win32/DLLs/_elementtree_d.pyd": "https://files.ballistica.net/cache/ba1/cc/a7/2fa7de781454cc7ab0416b0bee88", + "assets/build/windows/Win32/DLLs/_hashlib.pyd": "https://files.ballistica.net/cache/ba1/0c/8e/5abee214051dd1b87d4309a136c9", + "assets/build/windows/Win32/DLLs/_hashlib_d.pyd": "https://files.ballistica.net/cache/ba1/9f/fd/0fd9bac57aa9f94d2209e60f2546", + "assets/build/windows/Win32/DLLs/_lzma.pyd": "https://files.ballistica.net/cache/ba1/0a/c1/067ffaf2a3bbea4c51ccb76acd1f", + "assets/build/windows/Win32/DLLs/_lzma_d.pyd": "https://files.ballistica.net/cache/ba1/df/b8/d21ef8ca37220c949d85e5ea874c", + "assets/build/windows/Win32/DLLs/_msi.pyd": "https://files.ballistica.net/cache/ba1/d2/66/e9e950e59e659d4542d75e12f54e", + "assets/build/windows/Win32/DLLs/_msi_d.pyd": "https://files.ballistica.net/cache/ba1/ae/5f/bfdf8227e62166423249d63e56d3", + "assets/build/windows/Win32/DLLs/_multiprocessing.pyd": "https://files.ballistica.net/cache/ba1/37/1b/98a07c79caea8d8998f3e07a5f9f", + "assets/build/windows/Win32/DLLs/_multiprocessing_d.pyd": "https://files.ballistica.net/cache/ba1/78/63/316ff1e334e1fd24ffe2b643f8d8", + "assets/build/windows/Win32/DLLs/_overlapped.pyd": "https://files.ballistica.net/cache/ba1/7e/9e/f8eaeb281e028b5a78e4de2f0268", + "assets/build/windows/Win32/DLLs/_overlapped_d.pyd": "https://files.ballistica.net/cache/ba1/b4/d8/853dda49597b0a8783ed14c7bbb8", + "assets/build/windows/Win32/DLLs/_queue.pyd": "https://files.ballistica.net/cache/ba1/a6/56/42f28a2d1809c749cb7e56cb1cf0", + "assets/build/windows/Win32/DLLs/_queue_d.pyd": "https://files.ballistica.net/cache/ba1/ba/ea/2196a613d1682e75c9e712fc7aa7", + "assets/build/windows/Win32/DLLs/_socket.pyd": "https://files.ballistica.net/cache/ba1/5a/1c/e64b2a89f4df0c962fa2cb17234e", + "assets/build/windows/Win32/DLLs/_socket_d.pyd": "https://files.ballistica.net/cache/ba1/da/f4/f1f1b9f069f9f7b251a38cb3fe55", + "assets/build/windows/Win32/DLLs/_sqlite3.pyd": "https://files.ballistica.net/cache/ba1/7e/86/26168e1e46e318234b888e88e844", + "assets/build/windows/Win32/DLLs/_sqlite3_d.pyd": "https://files.ballistica.net/cache/ba1/e4/12/18fc7db11be959305c49809851b3", + "assets/build/windows/Win32/DLLs/_ssl.pyd": "https://files.ballistica.net/cache/ba1/ce/8a/abc5bc6c360e7de2664a286207ed", + "assets/build/windows/Win32/DLLs/_ssl_d.pyd": "https://files.ballistica.net/cache/ba1/2c/d7/25b290950abfdea9d1b94ad417fd", + "assets/build/windows/Win32/DLLs/_testbuffer.pyd": "https://files.ballistica.net/cache/ba1/b6/24/13068ed8e795ab35ceabae97e2a3", + "assets/build/windows/Win32/DLLs/_testbuffer_d.pyd": "https://files.ballistica.net/cache/ba1/9e/9a/cc172f66b18c77b92cf783bcc6ed", + "assets/build/windows/Win32/DLLs/_testcapi.pyd": "https://files.ballistica.net/cache/ba1/2e/9e/3a1ed361d7c4f8db175fd8026334", + "assets/build/windows/Win32/DLLs/_testcapi_d.pyd": "https://files.ballistica.net/cache/ba1/78/79/08eb4093f32721be1a3e354c3606", + "assets/build/windows/Win32/DLLs/_testconsole.pyd": "https://files.ballistica.net/cache/ba1/25/93/1c067e2954da7ac347035d97aa3f", + "assets/build/windows/Win32/DLLs/_testconsole_d.pyd": "https://files.ballistica.net/cache/ba1/d8/eb/3e0e733d974f900a8ab62d97ebcd", + "assets/build/windows/Win32/DLLs/_testimportmultiple.pyd": "https://files.ballistica.net/cache/ba1/a9/84/5552aa6b0b0a595db7c2683079b9", + "assets/build/windows/Win32/DLLs/_testimportmultiple_d.pyd": "https://files.ballistica.net/cache/ba1/1d/c3/92e78838956fe374163bae5608b5", + "assets/build/windows/Win32/DLLs/_testinternalcapi.pyd": "https://files.ballistica.net/cache/ba1/a0/36/a82fefcc8b835249363dbb1efd42", + "assets/build/windows/Win32/DLLs/_testinternalcapi_d.pyd": "https://files.ballistica.net/cache/ba1/50/9b/87d58f57ef02c4f7652d5c396676", + "assets/build/windows/Win32/DLLs/_testmultiphase.pyd": "https://files.ballistica.net/cache/ba1/59/79/7547cccb4168b1647ecc29155a30", + "assets/build/windows/Win32/DLLs/_testmultiphase_d.pyd": "https://files.ballistica.net/cache/ba1/b5/1b/c9091db3b0ca4d7beb759ef5abd5", + "assets/build/windows/Win32/DLLs/_tkinter.pyd": "https://files.ballistica.net/cache/ba1/bb/80/3298b565d570542b206322d986f7", + "assets/build/windows/Win32/DLLs/_tkinter_d.lib": "https://files.ballistica.net/cache/ba1/7a/4b/2036e3ffd4e3f29c37d05262c687", + "assets/build/windows/Win32/DLLs/_tkinter_d.pyd": "https://files.ballistica.net/cache/ba1/4a/e9/c65557c813db399f548ec90cb33d", + "assets/build/windows/Win32/DLLs/_uuid.pyd": "https://files.ballistica.net/cache/ba1/99/21/527dbc767bd0db38bc7bdf81a5d3", + "assets/build/windows/Win32/DLLs/_uuid_d.pyd": "https://files.ballistica.net/cache/ba1/b7/41/54b21a07edad343b2c65ea37368d", + "assets/build/windows/Win32/DLLs/_zoneinfo.pyd": "https://files.ballistica.net/cache/ba1/fd/54/86755ec70a6681438dd3793d6e94", + "assets/build/windows/Win32/DLLs/_zoneinfo_d.pyd": "https://files.ballistica.net/cache/ba1/e7/46/21aefbc51dc3f062bf3b44484a0f", + "assets/build/windows/Win32/DLLs/libcrypto-1_1.dll": "https://files.ballistica.net/cache/ba1/4f/2a/9cf37a97aae4b567ded5236de431", "assets/build/windows/Win32/DLLs/libffi-7.dll": "https://files.ballistica.net/cache/ba1/0a/62/9908b69e4aace0659b7ba62772bf", - "assets/build/windows/Win32/DLLs/libssl-1_1.dll": "https://files.ballistica.net/cache/ba1/51/de/d89dfbf61686f9f7c37f1bcba5ef", - "assets/build/windows/Win32/DLLs/pyexpat.pyd": "https://files.ballistica.net/cache/ba1/c0/f5/9724a4694a3c9ecc879408c115bc", - "assets/build/windows/Win32/DLLs/pyexpat_d.pyd": "https://files.ballistica.net/cache/ba1/c2/41/51027410073a6238a056263b5450", - "assets/build/windows/Win32/DLLs/python_lib.cat": "https://files.ballistica.net/cache/ba1/ca/22/1f7cddb73b48ffd50f08081c27c3", - "assets/build/windows/Win32/DLLs/python_tools.cat": "https://files.ballistica.net/cache/ba1/2b/33/f32faece43ae5a1b58951800355a", - "assets/build/windows/Win32/DLLs/select.pyd": "https://files.ballistica.net/cache/ba1/54/83/e80947d5ed0a46e68312773653fb", - "assets/build/windows/Win32/DLLs/select_d.pyd": "https://files.ballistica.net/cache/ba1/af/db/13085b111321d3a4fdd843ffcf54", - "assets/build/windows/Win32/DLLs/sqlite3.dll": "https://files.ballistica.net/cache/ba1/d2/23/82ec454973363b65f92440e4d967", - "assets/build/windows/Win32/DLLs/sqlite3_d.dll": "https://files.ballistica.net/cache/ba1/60/2f/ff01f24a6876e8f9e821c3851664", + "assets/build/windows/Win32/DLLs/libssl-1_1.dll": "https://files.ballistica.net/cache/ba1/ec/da/2587760334af1ca1f641c68af262", + "assets/build/windows/Win32/DLLs/pyexpat.pyd": "https://files.ballistica.net/cache/ba1/f1/9d/46f667c13fd18325fab26f88f4fb", + "assets/build/windows/Win32/DLLs/pyexpat_d.pyd": "https://files.ballistica.net/cache/ba1/ba/ac/36f6761a81383223574327c15a84", + "assets/build/windows/Win32/DLLs/python_lib.cat": "https://files.ballistica.net/cache/ba1/70/9b/fc186dc7eb3e8842429fad8782cd", + "assets/build/windows/Win32/DLLs/python_tools.cat": "https://files.ballistica.net/cache/ba1/41/ef/7fb20d50587028ae9174b5e33cc7", + "assets/build/windows/Win32/DLLs/select.pyd": "https://files.ballistica.net/cache/ba1/96/86/c175242f93f83ceb65afc2f58038", + "assets/build/windows/Win32/DLLs/select_d.pyd": "https://files.ballistica.net/cache/ba1/12/a5/b2981a81fd12e34a51e87e413f96", + "assets/build/windows/Win32/DLLs/sqlite3.dll": "https://files.ballistica.net/cache/ba1/f8/bc/7bde605127c7885bc8e333a9a6a1", + "assets/build/windows/Win32/DLLs/sqlite3_d.dll": "https://files.ballistica.net/cache/ba1/57/08/f35bd104a0b19ad84a049baaa0f5", "assets/build/windows/Win32/DLLs/tcl86t.dll": "https://files.ballistica.net/cache/ba1/45/33/a98580a5a3794c22b8d487a256db", "assets/build/windows/Win32/DLLs/tk86t.dll": "https://files.ballistica.net/cache/ba1/84/35/2bfd12b142f4fe1ff277e9ce3940", - "assets/build/windows/Win32/DLLs/unicodedata.pyd": "https://files.ballistica.net/cache/ba1/5c/47/0d7b57ae78def60ca263f35b97ca", - "assets/build/windows/Win32/DLLs/unicodedata_d.pyd": "https://files.ballistica.net/cache/ba1/fe/20/1d7bde0812563ab4b585e03a698a", - "assets/build/windows/Win32/DLLs/winsound.pyd": "https://files.ballistica.net/cache/ba1/50/ea/951f98c6f187f25757dae10b8337", - "assets/build/windows/Win32/DLLs/winsound_d.pyd": "https://files.ballistica.net/cache/ba1/28/13/8857b36063d66e952434a3973853", - "assets/build/windows/Win32/Lib/__future__.py": "https://files.ballistica.net/cache/ba1/3d/b8/861d93720bc3cbcfaaae4b83b244", + "assets/build/windows/Win32/DLLs/unicodedata.pyd": "https://files.ballistica.net/cache/ba1/96/c3/5bb5f4529d89652d21d3230a76a3", + "assets/build/windows/Win32/DLLs/unicodedata_d.pyd": "https://files.ballistica.net/cache/ba1/91/00/5716068772dfde8b63a045b692c3", + "assets/build/windows/Win32/DLLs/winsound.pyd": "https://files.ballistica.net/cache/ba1/e4/0b/5ad587d3f0169b050bdbfc8d9432", + "assets/build/windows/Win32/DLLs/winsound_d.pyd": "https://files.ballistica.net/cache/ba1/af/8f/e7da8fbcf5db9a28d4ccadf493ce", + "assets/build/windows/Win32/Lib/__future__.py": "https://files.ballistica.net/cache/ba1/28/b0/3c7d3d3cfabd14056c5955905de9", "assets/build/windows/Win32/Lib/__phello__.foo.py": "https://files.ballistica.net/cache/ba1/3b/8b/939d78ee0764fdf52f3098127d6c", + "assets/build/windows/Win32/Lib/_aix_support.py": "https://files.ballistica.net/cache/ba1/bc/4c/8e5bf871e7543e51896cdee31412", "assets/build/windows/Win32/Lib/_bootlocale.py": "https://files.ballistica.net/cache/ba1/09/0e/9293a47b0ed243fc7482ab56b330", - "assets/build/windows/Win32/Lib/_collections_abc.py": "https://files.ballistica.net/cache/ba1/00/3b/57aa68a37cfe29103b6c1f23d59b", + "assets/build/windows/Win32/Lib/_bootsubprocess.py": "https://files.ballistica.net/cache/ba1/7b/c0/88d4a649d94551456dc8702f3739", + "assets/build/windows/Win32/Lib/_collections_abc.py": "https://files.ballistica.net/cache/ba1/50/5b/8687e8abc95677bb91b9bd156bd9", "assets/build/windows/Win32/Lib/_compat_pickle.py": "https://files.ballistica.net/cache/ba1/46/06/1015248f3c4416edb60e7830aecb", "assets/build/windows/Win32/Lib/_compression.py": "https://files.ballistica.net/cache/ba1/db/90/20ab62fe1558d9ec656e5ed43d0f", - "assets/build/windows/Win32/Lib/_dummy_thread.py": "https://files.ballistica.net/cache/ba1/41/7b/e6e2723be021e2c4a5ca9de01ea5", "assets/build/windows/Win32/Lib/_markupbase.py": "https://files.ballistica.net/cache/ba1/0b/b4/b2b374394442d3ceac5659174306", - "assets/build/windows/Win32/Lib/_osx_support.py": "https://files.ballistica.net/cache/ba1/08/7d/966879d8875ca07403db2f0ccb6b", + "assets/build/windows/Win32/Lib/_osx_support.py": "https://files.ballistica.net/cache/ba1/2b/fd/127d8cfeb2d06d9bde24d25d2ec8", "assets/build/windows/Win32/Lib/_py_abc.py": "https://files.ballistica.net/cache/ba1/ad/d8/684169061fcf843ea3541d4a27a6", "assets/build/windows/Win32/Lib/_pydecimal.py": "https://files.ballistica.net/cache/ba1/1d/27/479bf918f1c1d21e41a793adfcf1", - "assets/build/windows/Win32/Lib/_pyio.py": "https://files.ballistica.net/cache/ba1/ad/1d/2c6c4bb1acb9184f47a50df117f1", + "assets/build/windows/Win32/Lib/_pyio.py": "https://files.ballistica.net/cache/ba1/95/c4/f1bf6ca088ede4e86edb8413c399", "assets/build/windows/Win32/Lib/_sitebuiltins.py": "https://files.ballistica.net/cache/ba1/f9/0d/fb8aa34c3c72f100ea0de27b6891", - "assets/build/windows/Win32/Lib/_strptime.py": "https://files.ballistica.net/cache/ba1/bb/b0/9a4289fffa3a74dd5fdab6128bf0", + "assets/build/windows/Win32/Lib/_strptime.py": "https://files.ballistica.net/cache/ba1/1f/d3/d9d48711d7c2f8272d85172bc142", "assets/build/windows/Win32/Lib/_threading_local.py": "https://files.ballistica.net/cache/ba1/6c/8a/9ac70e582f8ec4da33694a8a2409", - "assets/build/windows/Win32/Lib/_weakrefset.py": "https://files.ballistica.net/cache/ba1/d3/e3/ff1d4002e752d1410a3167c00642", - "assets/build/windows/Win32/Lib/abc.py": "https://files.ballistica.net/cache/ba1/c1/db/33e9537d855bd8c0e34660099463", - "assets/build/windows/Win32/Lib/aifc.py": "https://files.ballistica.net/cache/ba1/f0/05/54f64f43dd8a1269b42495106a8b", - "assets/build/windows/Win32/Lib/antigravity.py": "https://files.ballistica.net/cache/ba1/fe/66/fc51a4ead5b55dbf09bad7dee9cf", - "assets/build/windows/Win32/Lib/argparse.py": "https://files.ballistica.net/cache/ba1/46/34/8dc5b7f13686ed4f3f996effeca1", - "assets/build/windows/Win32/Lib/ast.py": "https://files.ballistica.net/cache/ba1/86/d1/93d66a0c3eca891bcba343c6ed71", - "assets/build/windows/Win32/Lib/asynchat.py": "https://files.ballistica.net/cache/ba1/6d/8d/403f343399d118de9e3c42bf15ae", - "assets/build/windows/Win32/Lib/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/23/99/3a675e89dbd967a1ae1f9b58df2b", + "assets/build/windows/Win32/Lib/_weakrefset.py": "https://files.ballistica.net/cache/ba1/98/8f/0eefe23bddf158278317f3c713a9", + "assets/build/windows/Win32/Lib/abc.py": "https://files.ballistica.net/cache/ba1/27/ec/e418babd57b0f811976a6736f269", + "assets/build/windows/Win32/Lib/aifc.py": "https://files.ballistica.net/cache/ba1/c8/7e/7a303b0e1b32c42dc2878e80c931", + "assets/build/windows/Win32/Lib/antigravity.py": "https://files.ballistica.net/cache/ba1/06/68/e45f30bcc009d8e4647b2d881cf8", + "assets/build/windows/Win32/Lib/argparse.py": "https://files.ballistica.net/cache/ba1/42/fd/ca8f9760542715ea59ca7f8f6fe7", + "assets/build/windows/Win32/Lib/ast.py": "https://files.ballistica.net/cache/ba1/a4/26/cbfec43c646695dde17b01429d13", + "assets/build/windows/Win32/Lib/asynchat.py": "https://files.ballistica.net/cache/ba1/65/35/92f80618fb7959c1df4c945c4d28", + "assets/build/windows/Win32/Lib/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/47/e8/0aeb647d8a81881454fd46596290", "assets/build/windows/Win32/Lib/asyncio/__main__.py": "https://files.ballistica.net/cache/ba1/fb/f0/a4fad40aea4845a907af269fa159", - "assets/build/windows/Win32/Lib/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/8d/61/9aabcbec5e16b10b60d9816bf168", - "assets/build/windows/Win32/Lib/asyncio/base_futures.py": "https://files.ballistica.net/cache/ba1/11/55/a6611b2c4f69b7aec0256fac7c04", + "assets/build/windows/Win32/Lib/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/44/88/2ab54dda65f1c6f7fc735ea3ed8a", + "assets/build/windows/Win32/Lib/asyncio/base_futures.py": "https://files.ballistica.net/cache/ba1/c8/13/786974d187c40e2b50174f73f040", "assets/build/windows/Win32/Lib/asyncio/base_subprocess.py": "https://files.ballistica.net/cache/ba1/0e/c0/3384fbba49486643e507a49770ee", "assets/build/windows/Win32/Lib/asyncio/base_tasks.py": "https://files.ballistica.net/cache/ba1/28/9d/b3adf943122909eb73dd216ef179", "assets/build/windows/Win32/Lib/asyncio/constants.py": "https://files.ballistica.net/cache/ba1/28/3e/49ec61050acc59c2bb5761d5332e", "assets/build/windows/Win32/Lib/asyncio/coroutines.py": "https://files.ballistica.net/cache/ba1/22/0f/65ce7b4328dbdf3a300616755b5f", - "assets/build/windows/Win32/Lib/asyncio/events.py": "https://files.ballistica.net/cache/ba1/b1/05/2e1dd073cc595bcc07f6eb4a42dc", - "assets/build/windows/Win32/Lib/asyncio/exceptions.py": "https://files.ballistica.net/cache/ba1/00/70/1a9e71b51410e1d7a674201c5956", + "assets/build/windows/Win32/Lib/asyncio/events.py": "https://files.ballistica.net/cache/ba1/67/3f/4debf11f78e291da31b6db00d533", + "assets/build/windows/Win32/Lib/asyncio/exceptions.py": "https://files.ballistica.net/cache/ba1/8e/d5/3836a190b2e188ab2889cfd572b9", "assets/build/windows/Win32/Lib/asyncio/format_helpers.py": "https://files.ballistica.net/cache/ba1/40/98/952c80350fd35c81680c0d565aa1", - "assets/build/windows/Win32/Lib/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/9f/f7/f1b103c12bfec7aff8fc17d2b730", - "assets/build/windows/Win32/Lib/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/10/f8/b21927b7d94ce1db0643d50ef4a2", + "assets/build/windows/Win32/Lib/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/a3/ea/88fb555361525076067b5bf5fd9a", + "assets/build/windows/Win32/Lib/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/e4/74/15884a54a0096b9aa3e60ac6f348", "assets/build/windows/Win32/Lib/asyncio/log.py": "https://files.ballistica.net/cache/ba1/d6/d3/380f88b21d3b8ef14f758f283af0", - "assets/build/windows/Win32/Lib/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/c5/f7/4442452b93b5c09747219e6a2713", + "assets/build/windows/Win32/Lib/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/ed/84/84d50b1c795e686d8049f5ba3efd", "assets/build/windows/Win32/Lib/asyncio/protocols.py": "https://files.ballistica.net/cache/ba1/95/49/8df484a9d8a0fb3259f90ef5c96c", - "assets/build/windows/Win32/Lib/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/61/ba/dbf2d71075f7a5bc7633261c9c3b", - "assets/build/windows/Win32/Lib/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/7b/41/4f6c78ebc75f4ed41d97d9289554", - "assets/build/windows/Win32/Lib/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/18/2a/70a2893571a2af3092fef753b57f", - "assets/build/windows/Win32/Lib/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/47/7a/942926b07057203c2e7288f59815", + "assets/build/windows/Win32/Lib/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/9d/89/0b6df7636a9293a332a94ef026d3", + "assets/build/windows/Win32/Lib/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/6c/49/d7b9de6bdcf033dd1ef88d74791b", + "assets/build/windows/Win32/Lib/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/97/93/65ddcf1af3cd4d63d76432f283ad", + "assets/build/windows/Win32/Lib/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/84/10/cbc702706139eb7301d56b9dbeff", "assets/build/windows/Win32/Lib/asyncio/staggered.py": "https://files.ballistica.net/cache/ba1/9f/52/01396863292b0b31dfbc92c03907", "assets/build/windows/Win32/Lib/asyncio/streams.py": "https://files.ballistica.net/cache/ba1/23/a6/917ae117a4057839242a360c1fd5", "assets/build/windows/Win32/Lib/asyncio/subprocess.py": "https://files.ballistica.net/cache/ba1/7d/47/eeed1a313027e5ee77acfaa0dc0a", - "assets/build/windows/Win32/Lib/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/ce/d2/5a2220b412f1942e7580bbf942de", - "assets/build/windows/Win32/Lib/asyncio/transports.py": "https://files.ballistica.net/cache/ba1/c4/85/42d04f243299aeb34e7df9aca184", + "assets/build/windows/Win32/Lib/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/09/3c/85845d812f4d76ed858ae4a5337a", + "assets/build/windows/Win32/Lib/asyncio/threads.py": "https://files.ballistica.net/cache/ba1/8b/ec/747fd095b73a211ce132a135270d", + "assets/build/windows/Win32/Lib/asyncio/transports.py": "https://files.ballistica.net/cache/ba1/69/90/f354c7899dfc7c116f3ea56d4a93", "assets/build/windows/Win32/Lib/asyncio/trsock.py": "https://files.ballistica.net/cache/ba1/46/88/ab7c4a2f09e5a3b9f675d5f89b2e", - "assets/build/windows/Win32/Lib/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/7d/a1/000d2bec4813db2295c888991800", - "assets/build/windows/Win32/Lib/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/e2/32/e5093d00d060bf24a02335ba6d36", + "assets/build/windows/Win32/Lib/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/92/68/9fe73e30046c65c126771abf5361", + "assets/build/windows/Win32/Lib/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/76/e5/194c508e2540f13df818a9c5fd2c", "assets/build/windows/Win32/Lib/asyncio/windows_utils.py": "https://files.ballistica.net/cache/ba1/bd/ed/ddb1d357625e17352ed9928cb9e5", - "assets/build/windows/Win32/Lib/asyncore.py": "https://files.ballistica.net/cache/ba1/7c/9e/3da840852d4b2389cb7c286d016b", - "assets/build/windows/Win32/Lib/base64.py": "https://files.ballistica.net/cache/ba1/d2/54/a6f18991ae74f56b4779e881a199", - "assets/build/windows/Win32/Lib/bdb.py": "https://files.ballistica.net/cache/ba1/f1/db/04f5a5f69b53227b2cea2a9ed417", - "assets/build/windows/Win32/Lib/binhex.py": "https://files.ballistica.net/cache/ba1/ff/de/25906a6ac05fb00f147442afb165", - "assets/build/windows/Win32/Lib/bisect.py": "https://files.ballistica.net/cache/ba1/ab/40/e561035a5c9d84d0346e2a1b4ba1", - "assets/build/windows/Win32/Lib/bz2.py": "https://files.ballistica.net/cache/ba1/61/15/adef78493f0e2509db7590ea293c", - "assets/build/windows/Win32/Lib/cProfile.py": "https://files.ballistica.net/cache/ba1/56/8e/02e250e073deb65c6c6d0c81fb4f", + "assets/build/windows/Win32/Lib/asyncore.py": "https://files.ballistica.net/cache/ba1/eb/9f/ac2902b088827a0bb1983dda3ad2", + "assets/build/windows/Win32/Lib/base64.py": "https://files.ballistica.net/cache/ba1/2f/bb/c8b49dbb0e7bac27e0f17c4b9a8b", + "assets/build/windows/Win32/Lib/bdb.py": "https://files.ballistica.net/cache/ba1/2d/fa/6414bc4afadb24af4379a4ea3e7f", + "assets/build/windows/Win32/Lib/binhex.py": "https://files.ballistica.net/cache/ba1/ea/3b/4934f59948cd40a4d47462ae8a7f", + "assets/build/windows/Win32/Lib/bisect.py": "https://files.ballistica.net/cache/ba1/89/bc/f8684bfc3fb49a15695e005dfcc5", + "assets/build/windows/Win32/Lib/bz2.py": "https://files.ballistica.net/cache/ba1/51/ab/2a9647445ad2d7aa9889a4b35d28", + "assets/build/windows/Win32/Lib/cProfile.py": "https://files.ballistica.net/cache/ba1/c3/00/d6ba42740a6a153aa1c5bf6e15e5", "assets/build/windows/Win32/Lib/calendar.py": "https://files.ballistica.net/cache/ba1/19/df/5fcc786979f9697a113d8ba9363f", - "assets/build/windows/Win32/Lib/cgi.py": "https://files.ballistica.net/cache/ba1/13/3b/49301cdd99d04c2cb027dc8bf954", + "assets/build/windows/Win32/Lib/cgi.py": "https://files.ballistica.net/cache/ba1/aa/6e/4a622920aa2e19446482077506c5", "assets/build/windows/Win32/Lib/cgitb.py": "https://files.ballistica.net/cache/ba1/77/44/358b17a4fc4b06db2d69d51bb1ff", "assets/build/windows/Win32/Lib/chunk.py": "https://files.ballistica.net/cache/ba1/16/08/2708ae495aab5e54fe27da06f633", "assets/build/windows/Win32/Lib/cmd.py": "https://files.ballistica.net/cache/ba1/cc/83/f3046ec22ee06c45649da6add0c7", "assets/build/windows/Win32/Lib/code.py": "https://files.ballistica.net/cache/ba1/61/31/f1ff9d938a5f29efe83838362b52", - "assets/build/windows/Win32/Lib/codecs.py": "https://files.ballistica.net/cache/ba1/1f/64/412ff1b173e741fec018e4013213", - "assets/build/windows/Win32/Lib/codeop.py": "https://files.ballistica.net/cache/ba1/07/8a/5015a1453f0645dd58f5befa8fbc", - "assets/build/windows/Win32/Lib/collections/__init__.py": "https://files.ballistica.net/cache/ba1/89/aa/c75b4a114fb7caf9554f7e0030ea", - "assets/build/windows/Win32/Lib/collections/abc.py": "https://files.ballistica.net/cache/ba1/ee/9e/1b14e35345f9208b897b8db40100", + "assets/build/windows/Win32/Lib/codecs.py": "https://files.ballistica.net/cache/ba1/e1/ab/8cc272e5925ec1129d176c15c81a", + "assets/build/windows/Win32/Lib/codeop.py": "https://files.ballistica.net/cache/ba1/6d/b0/f7f92e64ca371e9c307e637d472a", + "assets/build/windows/Win32/Lib/collections/__init__.py": "https://files.ballistica.net/cache/ba1/a7/a4/c979a01d557a822c3a3c4cd47be2", + "assets/build/windows/Win32/Lib/collections/abc.py": "https://files.ballistica.net/cache/ba1/47/0c/2287da3638e7910fecb7b32504a0", "assets/build/windows/Win32/Lib/colorsys.py": "https://files.ballistica.net/cache/ba1/e8/1f/297a0b5e14be06d3f3f554c9725e", - "assets/build/windows/Win32/Lib/compileall.py": "https://files.ballistica.net/cache/ba1/60/d6/1d1435455b13730345ed85a54cd3", + "assets/build/windows/Win32/Lib/compileall.py": "https://files.ballistica.net/cache/ba1/df/16/82206d2b01cc4a0bf6d6f2ec52af", "assets/build/windows/Win32/Lib/concurrent/__init__.py": "https://files.ballistica.net/cache/ba1/5b/ec/08df2761a442b8ff6fe7d52fcc89", "assets/build/windows/Win32/Lib/concurrent/futures/__init__.py": "https://files.ballistica.net/cache/ba1/c7/46/341d04b8d611753ebc06780081ea", - "assets/build/windows/Win32/Lib/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/85/fc/0d7d7cca61f766b4409d6fbe513f", - "assets/build/windows/Win32/Lib/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/7b/d9/5cb645d05a0bfa6fc3c023c09884", - "assets/build/windows/Win32/Lib/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/ce/6c/1e79d68a25a3f0e69cf3433264cd", - "assets/build/windows/Win32/Lib/configparser.py": "https://files.ballistica.net/cache/ba1/d9/cf/771c2ae14dd33a948e16a784a48f", - "assets/build/windows/Win32/Lib/contextlib.py": "https://files.ballistica.net/cache/ba1/0a/d0/ee6f3432112f85ec1efd7253e728", + "assets/build/windows/Win32/Lib/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/81/36/21912471515ec8e94fcef7a54767", + "assets/build/windows/Win32/Lib/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/c2/eb/631cc0bc19c522e583ec52d300b3", + "assets/build/windows/Win32/Lib/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/dd/54/4017d80fe7f52897d60f4fef9d91", + "assets/build/windows/Win32/Lib/configparser.py": "https://files.ballistica.net/cache/ba1/5f/07/f39cf85883b16140c38745db8571", + "assets/build/windows/Win32/Lib/contextlib.py": "https://files.ballistica.net/cache/ba1/16/7e/e8ca4b4e2a997b0fdf59fb7c2197", "assets/build/windows/Win32/Lib/contextvars.py": "https://files.ballistica.net/cache/ba1/97/a6/19610cddd01bb44cc6f9d3a21293", "assets/build/windows/Win32/Lib/copy.py": "https://files.ballistica.net/cache/ba1/28/95/d923a86e884501194d65f2646de8", - "assets/build/windows/Win32/Lib/copyreg.py": "https://files.ballistica.net/cache/ba1/98/b3/d832dad3f6c073d6efcb14da53ce", - "assets/build/windows/Win32/Lib/crypt.py": "https://files.ballistica.net/cache/ba1/ae/cc/e39c20e40e3388095e186b6aa3b9", + "assets/build/windows/Win32/Lib/copyreg.py": "https://files.ballistica.net/cache/ba1/b4/e5/7796afa4c52102760e81854d581d", + "assets/build/windows/Win32/Lib/crypt.py": "https://files.ballistica.net/cache/ba1/cb/33/c3831d873f0e168596fe6d6d0a6a", "assets/build/windows/Win32/Lib/csv.py": "https://files.ballistica.net/cache/ba1/61/84/ece8a5a1edd77dfd481a0029bcc8", - "assets/build/windows/Win32/Lib/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/b5/3d/9e5225131d6b60d12eda1f11e058", + "assets/build/windows/Win32/Lib/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/1b/69/8e9072eb16430d7ac77bb3065d8c", "assets/build/windows/Win32/Lib/ctypes/_aix.py": "https://files.ballistica.net/cache/ba1/30/2d/3ad91a485f58eb3690c863e7a961", "assets/build/windows/Win32/Lib/ctypes/_endian.py": "https://files.ballistica.net/cache/ba1/04/c7/1775ac390854c9015be8e834ff50", "assets/build/windows/Win32/Lib/ctypes/macholib/README.ctypes": "https://files.ballistica.net/cache/ba1/90/bf/d7c620c1dec8a9219b27e1cfa6f4", "assets/build/windows/Win32/Lib/ctypes/macholib/__init__.py": "https://files.ballistica.net/cache/ba1/a7/68/4d72c2a8db47c671575650daa0e6", - "assets/build/windows/Win32/Lib/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/cc/29/9eb47bbb4519ff41fd593917a78b", + "assets/build/windows/Win32/Lib/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/5a/b0/dbb8fe9518edf3a514f5fcdf7d09", "assets/build/windows/Win32/Lib/ctypes/macholib/dylib.py": "https://files.ballistica.net/cache/ba1/c2/c2/547efc609d150143701b892bc5ae", "assets/build/windows/Win32/Lib/ctypes/macholib/fetch_macholib": "https://files.ballistica.net/cache/ba1/4d/fb/26d07e6522338f7fc233734f8807", "assets/build/windows/Win32/Lib/ctypes/macholib/fetch_macholib.bat": "https://files.ballistica.net/cache/ba1/ab/58/c056f07d65b7abf4ac2fc3598947", "assets/build/windows/Win32/Lib/ctypes/macholib/framework.py": "https://files.ballistica.net/cache/ba1/fb/23/90116831cb2f6d105bc3cd65559c", - "assets/build/windows/Win32/Lib/ctypes/util.py": "https://files.ballistica.net/cache/ba1/c9/92/b71e0b1afdffde4b91ce0ad71cc8", + "assets/build/windows/Win32/Lib/ctypes/util.py": "https://files.ballistica.net/cache/ba1/8b/ca/74691e74841c822d74843c8cb1fe", "assets/build/windows/Win32/Lib/ctypes/wintypes.py": "https://files.ballistica.net/cache/ba1/25/1d/9a7dfb9d5c76744c30ffcde3b6eb", - "assets/build/windows/Win32/Lib/curses/__init__.py": "https://files.ballistica.net/cache/ba1/d4/7a/94f01cec089c4c7b3a058954d1a0", + "assets/build/windows/Win32/Lib/curses/__init__.py": "https://files.ballistica.net/cache/ba1/83/2b/9028d278d47bc11d9ad0326f68a9", "assets/build/windows/Win32/Lib/curses/ascii.py": "https://files.ballistica.net/cache/ba1/fd/14/86316d73c170437831841f44f410", "assets/build/windows/Win32/Lib/curses/has_key.py": "https://files.ballistica.net/cache/ba1/39/59/8a09c722d5a9c762fe51d6bf827a", "assets/build/windows/Win32/Lib/curses/panel.py": "https://files.ballistica.net/cache/ba1/48/9c/133d9a244f62e3739cb392d1a096", "assets/build/windows/Win32/Lib/curses/textpad.py": "https://files.ballistica.net/cache/ba1/ea/c0/e047229f762662427d6c64dd3c61", - "assets/build/windows/Win32/Lib/dataclasses.py": "https://files.ballistica.net/cache/ba1/1d/0a/d2ae7b3e8d6db1a24afed5549455", - "assets/build/windows/Win32/Lib/datetime.py": "https://files.ballistica.net/cache/ba1/09/bd/bd6fd74b8cd885b5032ffe2d2718", + "assets/build/windows/Win32/Lib/dataclasses.py": "https://files.ballistica.net/cache/ba1/e9/9c/827ff1be7ab63af4842d26747f15", + "assets/build/windows/Win32/Lib/datetime.py": "https://files.ballistica.net/cache/ba1/34/e1/f8c7052b4702a8715328be059132", "assets/build/windows/Win32/Lib/decimal.py": "https://files.ballistica.net/cache/ba1/d5/55/9ae7a36d41bfe37b2d67ce3599d0", - "assets/build/windows/Win32/Lib/difflib.py": "https://files.ballistica.net/cache/ba1/20/25/50f6e9a63e9660b451ccbd9f8d86", - "assets/build/windows/Win32/Lib/dis.py": "https://files.ballistica.net/cache/ba1/31/e7/b3775d40bca4e0b4810fbb312260", - "assets/build/windows/Win32/Lib/doctest.py": "https://files.ballistica.net/cache/ba1/35/31/60314b37cfc4ef8e06b9c512a129", - "assets/build/windows/Win32/Lib/dummy_threading.py": "https://files.ballistica.net/cache/ba1/08/5a/e7d834d6197d9b58a075b05c4be6", + "assets/build/windows/Win32/Lib/difflib.py": "https://files.ballistica.net/cache/ba1/fc/ce/dc021d207553e253bf5f4f3ef8d5", + "assets/build/windows/Win32/Lib/dis.py": "https://files.ballistica.net/cache/ba1/2d/e0/0d23d642882feca62642623b1925", + "assets/build/windows/Win32/Lib/doctest.py": "https://files.ballistica.net/cache/ba1/59/0c/c7495e1f68cd0e217c2d1a6aeaaf", "assets/build/windows/Win32/Lib/email/__init__.py": "https://files.ballistica.net/cache/ba1/ed/7d/64247a9b90f5c7b3f577b0e28ca0", "assets/build/windows/Win32/Lib/email/_encoded_words.py": "https://files.ballistica.net/cache/ba1/05/81/408bbbd16a07d3c6473ff0ce523b", "assets/build/windows/Win32/Lib/email/_header_value_parser.py": "https://files.ballistica.net/cache/ba1/79/74/8b39d9278c30a5113a6285f68c13", - "assets/build/windows/Win32/Lib/email/_parseaddr.py": "https://files.ballistica.net/cache/ba1/ed/d2/06c5127141292bc913caee80137b", + "assets/build/windows/Win32/Lib/email/_parseaddr.py": "https://files.ballistica.net/cache/ba1/07/39/929a44451e24380aebd685d081ba", "assets/build/windows/Win32/Lib/email/_policybase.py": "https://files.ballistica.net/cache/ba1/06/37/302137642525762bee6ce4a09cf1", "assets/build/windows/Win32/Lib/email/architecture.rst": "https://files.ballistica.net/cache/ba1/78/7c/c4274166d5aa06c20c2c0d391104", "assets/build/windows/Win32/Lib/email/base64mime.py": "https://files.ballistica.net/cache/ba1/92/3c/d5b71a0457e0715462a700c52e78", "assets/build/windows/Win32/Lib/email/charset.py": "https://files.ballistica.net/cache/ba1/85/85/2e724aa519d670805839deb3415f", - "assets/build/windows/Win32/Lib/email/contentmanager.py": "https://files.ballistica.net/cache/ba1/32/ed/b0372aa11be4a30fbd1820b57bb1", + "assets/build/windows/Win32/Lib/email/contentmanager.py": "https://files.ballistica.net/cache/ba1/60/a3/969ab2b942387eaac59a53312f7c", "assets/build/windows/Win32/Lib/email/encoders.py": "https://files.ballistica.net/cache/ba1/05/5e/1da72e6b33454bc00ccc75bae468", "assets/build/windows/Win32/Lib/email/errors.py": "https://files.ballistica.net/cache/ba1/53/1a/246d8f67140256975ac7ae97d1e5", "assets/build/windows/Win32/Lib/email/feedparser.py": "https://files.ballistica.net/cache/ba1/aa/d0/f54e9f077a1a3a69295932c21353", - "assets/build/windows/Win32/Lib/email/generator.py": "https://files.ballistica.net/cache/ba1/92/60/db86790637e373e2a198c89619a7", + "assets/build/windows/Win32/Lib/email/generator.py": "https://files.ballistica.net/cache/ba1/ee/1e/0cd02341e34d798770b3ac88d9d4", "assets/build/windows/Win32/Lib/email/header.py": "https://files.ballistica.net/cache/ba1/d8/53/2ad4aea28a0f2fb1dcdbaca1d8e8", - "assets/build/windows/Win32/Lib/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/89/87/3e0601839389ab46421c1325608e", + "assets/build/windows/Win32/Lib/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/be/5d/d42e0fa956f6785fb22b8c958e19", "assets/build/windows/Win32/Lib/email/iterators.py": "https://files.ballistica.net/cache/ba1/90/09/e8c04371be81b7ab0a11be68784d", - "assets/build/windows/Win32/Lib/email/message.py": "https://files.ballistica.net/cache/ba1/13/eb/1359fed9fd0ba38797bcd98a45d9", + "assets/build/windows/Win32/Lib/email/message.py": "https://files.ballistica.net/cache/ba1/37/dd/436fd62061b38bfdd6279d235bae", "assets/build/windows/Win32/Lib/email/mime/__init__.py": "https://files.ballistica.net/cache/ba1/b5/ea/80f195a1c0d100480897a83a4da4", "assets/build/windows/Win32/Lib/email/mime/application.py": "https://files.ballistica.net/cache/ba1/a6/b1/f129c2517c74d85f48087f80824d", "assets/build/windows/Win32/Lib/email/mime/audio.py": "https://files.ballistica.net/cache/ba1/29/39/306f35115c997946975ac7c0191b", @@ -3617,9 +3640,9 @@ "assets/build/windows/Win32/Lib/email/parser.py": "https://files.ballistica.net/cache/ba1/4f/06/6bf636bb70433a9a62c41bca8406", "assets/build/windows/Win32/Lib/email/policy.py": "https://files.ballistica.net/cache/ba1/77/b1/8a70ba209a24931675bff0a345cd", "assets/build/windows/Win32/Lib/email/quoprimime.py": "https://files.ballistica.net/cache/ba1/76/74/92b4640edaa325ff338c5affb245", - "assets/build/windows/Win32/Lib/email/utils.py": "https://files.ballistica.net/cache/ba1/eb/d6/bb1e792fc83161264525c914cc46", + "assets/build/windows/Win32/Lib/email/utils.py": "https://files.ballistica.net/cache/ba1/99/d7/af0fd7db83f90594c82066c49d21", "assets/build/windows/Win32/Lib/encodings/__init__.py": "https://files.ballistica.net/cache/ba1/6f/a4/bb19f2225934af92392ef32b5096", - "assets/build/windows/Win32/Lib/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/7a/7b/9e1451e88044c5c16cf671d207b8", + "assets/build/windows/Win32/Lib/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/6b/e8/e4a9550b7bba748fef8f65526066", "assets/build/windows/Win32/Lib/encodings/ascii.py": "https://files.ballistica.net/cache/ba1/41/44/3c51a65e96fdbbdfc71983863cf5", "assets/build/windows/Win32/Lib/encodings/base64_codec.py": "https://files.ballistica.net/cache/ba1/f8/5d/78e448a54324be27c57960c3ef8f", "assets/build/windows/Win32/Lib/encodings/big5.py": "https://files.ballistica.net/cache/ba1/59/23/27486e3ee84ed7e8f3dfcba5497d", @@ -3706,7 +3729,6 @@ "assets/build/windows/Win32/Lib/encodings/kz1048.py": "https://files.ballistica.net/cache/ba1/d3/5b/422fa8a73c17bb05fdff6f663827", "assets/build/windows/Win32/Lib/encodings/latin_1.py": "https://files.ballistica.net/cache/ba1/41/45/1c7f9d33cc7a8febf0a0071808cc", "assets/build/windows/Win32/Lib/encodings/mac_arabic.py": "https://files.ballistica.net/cache/ba1/0a/8a/ab8900ad1b09cd5faeeb6eb6b5c6", - "assets/build/windows/Win32/Lib/encodings/mac_centeuro.py": "https://files.ballistica.net/cache/ba1/6c/27/ad832c0664490a0783439df01a7f", "assets/build/windows/Win32/Lib/encodings/mac_croatian.py": "https://files.ballistica.net/cache/ba1/a5/01/ae139e112718536de88fe63f5bbf", "assets/build/windows/Win32/Lib/encodings/mac_cyrillic.py": "https://files.ballistica.net/cache/ba1/01/84/40472ce95eaf2c04d3387a021eeb", "assets/build/windows/Win32/Lib/encodings/mac_farsi.py": "https://files.ballistica.net/cache/ba1/04/9c/0b1bfb3fa6b4580cbc0c95f05f3d", @@ -3741,246 +3763,252 @@ "assets/build/windows/Win32/Lib/encodings/utf_8_sig.py": "https://files.ballistica.net/cache/ba1/02/57/abf1662be43acd806d712d09ad92", "assets/build/windows/Win32/Lib/encodings/uu_codec.py": "https://files.ballistica.net/cache/ba1/ca/1c/8b4574b02be8387d5b8818d1399d", "assets/build/windows/Win32/Lib/encodings/zlib_codec.py": "https://files.ballistica.net/cache/ba1/ca/b7/a919c6be178102f90d97879e61ec", - "assets/build/windows/Win32/Lib/enum.py": "https://files.ballistica.net/cache/ba1/bb/c9/3118d618dc2c7a6c11e4336e7b2d", - "assets/build/windows/Win32/Lib/filecmp.py": "https://files.ballistica.net/cache/ba1/20/32/e1aa0ebff27033ec554330288554", - "assets/build/windows/Win32/Lib/fileinput.py": "https://files.ballistica.net/cache/ba1/9c/59/041f2cde1b129359ae61dfa9816c", - "assets/build/windows/Win32/Lib/fnmatch.py": "https://files.ballistica.net/cache/ba1/50/d8/be1bfccd23262714b368a87efcfe", + "assets/build/windows/Win32/Lib/enum.py": "https://files.ballistica.net/cache/ba1/c4/f3/60d3296bbfadcc6941b4e0d3b324", + "assets/build/windows/Win32/Lib/filecmp.py": "https://files.ballistica.net/cache/ba1/d7/a9/8bda33ae3ccb35a4f8fb8e58d5c7", + "assets/build/windows/Win32/Lib/fileinput.py": "https://files.ballistica.net/cache/ba1/4e/af/c6223e6830124b4705ea655a1a78", + "assets/build/windows/Win32/Lib/fnmatch.py": "https://files.ballistica.net/cache/ba1/e9/b4/9afa7e0e63d5fc0cba43ee03189b", "assets/build/windows/Win32/Lib/formatter.py": "https://files.ballistica.net/cache/ba1/94/4e/c1f6b9a2f088571d5faa0f323dca", - "assets/build/windows/Win32/Lib/fractions.py": "https://files.ballistica.net/cache/ba1/d3/66/5942f4e9b9ea2f05fb7de136f2f3", - "assets/build/windows/Win32/Lib/ftplib.py": "https://files.ballistica.net/cache/ba1/09/0e/05e3fa3fc16419c3f5be08c5d3fe", - "assets/build/windows/Win32/Lib/functools.py": "https://files.ballistica.net/cache/ba1/bb/24/12c61dcec09c98ad01b56801db9f", + "assets/build/windows/Win32/Lib/fractions.py": "https://files.ballistica.net/cache/ba1/00/ef/ad0286aae0aa2f66ea28206fbc44", + "assets/build/windows/Win32/Lib/ftplib.py": "https://files.ballistica.net/cache/ba1/cd/ab/0156861df1e160c17b79454c7b72", + "assets/build/windows/Win32/Lib/functools.py": "https://files.ballistica.net/cache/ba1/a5/54/2fdee10300ef21de3e7ce0e58880", "assets/build/windows/Win32/Lib/genericpath.py": "https://files.ballistica.net/cache/ba1/51/fc/1a323017e8b06cdc6327c524fe66", "assets/build/windows/Win32/Lib/getopt.py": "https://files.ballistica.net/cache/ba1/c8/63/dfdbb68d2e67c3bae4f9dcc3f0f5", - "assets/build/windows/Win32/Lib/getpass.py": "https://files.ballistica.net/cache/ba1/be/e6/71f0a41074219d94d7e5f4d4dd77", - "assets/build/windows/Win32/Lib/gettext.py": "https://files.ballistica.net/cache/ba1/11/6b/c1e62ac780490c34659934a6ab38", - "assets/build/windows/Win32/Lib/glob.py": "https://files.ballistica.net/cache/ba1/36/6c/b8ce0cc27f4cb3b86db3c7d9347a", - "assets/build/windows/Win32/Lib/gzip.py": "https://files.ballistica.net/cache/ba1/b8/da/b458a9670a4fa0d99a4835489a95", - "assets/build/windows/Win32/Lib/hashlib.py": "https://files.ballistica.net/cache/ba1/58/22/5813b858f7b0c5f6bd3c08b5e270", + "assets/build/windows/Win32/Lib/getpass.py": "https://files.ballistica.net/cache/ba1/72/31/d1e384b10905ca750c1ed8c0b84a", + "assets/build/windows/Win32/Lib/gettext.py": "https://files.ballistica.net/cache/ba1/0e/42/9e44277c3e9347fa5401959e3705", + "assets/build/windows/Win32/Lib/glob.py": "https://files.ballistica.net/cache/ba1/0d/68/f6f02a463d42eb1321a440b7d351", + "assets/build/windows/Win32/Lib/graphlib.py": "https://files.ballistica.net/cache/ba1/15/35/2836d5b4fd3bd165e36c08019ace", + "assets/build/windows/Win32/Lib/gzip.py": "https://files.ballistica.net/cache/ba1/bc/11/1ae05369d31b657cc555500510b3", + "assets/build/windows/Win32/Lib/hashlib.py": "https://files.ballistica.net/cache/ba1/76/99/f4b0dfa9bd74c599168245ada448", "assets/build/windows/Win32/Lib/heapq.py": "https://files.ballistica.net/cache/ba1/34/2f/f8ff15aedf39c36b2f6412af45fe", - "assets/build/windows/Win32/Lib/hmac.py": "https://files.ballistica.net/cache/ba1/30/f4/e91fda1efa524172eb6aac3d326d", + "assets/build/windows/Win32/Lib/hmac.py": "https://files.ballistica.net/cache/ba1/97/9f/ced773ee6db266ea49ce9484d878", "assets/build/windows/Win32/Lib/html/__init__.py": "https://files.ballistica.net/cache/ba1/8c/08/c638db74e5e5979dea109da1f68b", "assets/build/windows/Win32/Lib/html/entities.py": "https://files.ballistica.net/cache/ba1/52/69/e7311caea2fbfdfef9c05515de4b", - "assets/build/windows/Win32/Lib/html/parser.py": "https://files.ballistica.net/cache/ba1/93/8c/7e6734f43521e484eff3265c3b2f", - "assets/build/windows/Win32/Lib/http/__init__.py": "https://files.ballistica.net/cache/ba1/00/9a/8db3eba06a3e0e739cf2da0c8996", - "assets/build/windows/Win32/Lib/http/client.py": "https://files.ballistica.net/cache/ba1/9b/b3/823a9620582a4310880c99b9013b", + "assets/build/windows/Win32/Lib/html/parser.py": "https://files.ballistica.net/cache/ba1/6a/60/b90c31b1f1474741106d3da6de25", + "assets/build/windows/Win32/Lib/http/__init__.py": "https://files.ballistica.net/cache/ba1/bb/b0/88199e7610b1ad70587c5472753e", + "assets/build/windows/Win32/Lib/http/client.py": "https://files.ballistica.net/cache/ba1/0f/84/59222e132a3410d380fb217e3f52", "assets/build/windows/Win32/Lib/http/cookiejar.py": "https://files.ballistica.net/cache/ba1/08/00/0b45e485fbbf70dc705d41216abd", - "assets/build/windows/Win32/Lib/http/cookies.py": "https://files.ballistica.net/cache/ba1/d1/96/f86c64ac27b1aec761087d1fc55a", - "assets/build/windows/Win32/Lib/http/server.py": "https://files.ballistica.net/cache/ba1/30/7e/5e90c701918e966c0a10fe2b3d88", + "assets/build/windows/Win32/Lib/http/cookies.py": "https://files.ballistica.net/cache/ba1/4a/49/a309c5a835f284a508f1a621ba61", + "assets/build/windows/Win32/Lib/http/server.py": "https://files.ballistica.net/cache/ba1/08/f6/9b039097180d2129109230798b52", "assets/build/windows/Win32/Lib/imghdr.py": "https://files.ballistica.net/cache/ba1/a8/49/6afa9e88ee446fadd95254fc159d", "assets/build/windows/Win32/Lib/imp.py": "https://files.ballistica.net/cache/ba1/27/49/796442c2ad99d661778789ccb6b9", "assets/build/windows/Win32/Lib/importlib/__init__.py": "https://files.ballistica.net/cache/ba1/34/ab/d855c97aa3f1707dc083d3812422", - "assets/build/windows/Win32/Lib/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/e0/b8/fd3a491af05bab27fffee4711b36", - "assets/build/windows/Win32/Lib/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/d6/44/8e9fecfa85afede694eb06298034", - "assets/build/windows/Win32/Lib/importlib/abc.py": "https://files.ballistica.net/cache/ba1/e1/ce/cf8dfb21a116a8bf87f757ddb332", + "assets/build/windows/Win32/Lib/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/54/da/bedb5154306c441ba28992682943", + "assets/build/windows/Win32/Lib/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/da/ad/ef5fd84e9b073e4699c7ecc7f426", + "assets/build/windows/Win32/Lib/importlib/_common.py": "https://files.ballistica.net/cache/ba1/df/62/59cfe843dacc4a7101bc56d6bfc9", + "assets/build/windows/Win32/Lib/importlib/abc.py": "https://files.ballistica.net/cache/ba1/48/fe/414f06478ec0a25b7b09cdd619e5", "assets/build/windows/Win32/Lib/importlib/machinery.py": "https://files.ballistica.net/cache/ba1/a1/ac/b97d16285d94f0b18406366d803b", - "assets/build/windows/Win32/Lib/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/50/b7/1e091864ef2342eb9f7627a5ad85", - "assets/build/windows/Win32/Lib/importlib/resources.py": "https://files.ballistica.net/cache/ba1/13/da/3bc2fe81fddcb89589d4f5129d2b", - "assets/build/windows/Win32/Lib/importlib/util.py": "https://files.ballistica.net/cache/ba1/5e/96/a3d35aecec8ff9e6f2158f56c27c", - "assets/build/windows/Win32/Lib/inspect.py": "https://files.ballistica.net/cache/ba1/3e/76/764dd66ccb9ad74292d6e07ee3ff", + "assets/build/windows/Win32/Lib/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/c2/f6/a6dbb83c45260a78749204f60ac7", + "assets/build/windows/Win32/Lib/importlib/resources.py": "https://files.ballistica.net/cache/ba1/1b/36/101f113c9f9d6dcb0458d1a560ee", + "assets/build/windows/Win32/Lib/importlib/util.py": "https://files.ballistica.net/cache/ba1/21/12/936c7ba9b3fe6b59497219398d3f", + "assets/build/windows/Win32/Lib/inspect.py": "https://files.ballistica.net/cache/ba1/c4/43/1f26250c090a9d17a4da97f8ba91", "assets/build/windows/Win32/Lib/io.py": "https://files.ballistica.net/cache/ba1/ee/a7/27e33a9728a22a8228628782bfe7", - "assets/build/windows/Win32/Lib/ipaddress.py": "https://files.ballistica.net/cache/ba1/7d/3c/b71af3f7f5d381bfaa1e200eb2ac", - "assets/build/windows/Win32/Lib/json/__init__.py": "https://files.ballistica.net/cache/ba1/a0/b3/9179fcad487ca6edf2c5a96f2f5e", + "assets/build/windows/Win32/Lib/ipaddress.py": "https://files.ballistica.net/cache/ba1/d0/d1/74396deb2ba83c112e540f973ce4", + "assets/build/windows/Win32/Lib/json/__init__.py": "https://files.ballistica.net/cache/ba1/d4/01/1826c398aa475558640288fbf8da", "assets/build/windows/Win32/Lib/json/decoder.py": "https://files.ballistica.net/cache/ba1/f5/44/19f6e70ef50bed1f318027bbf9aa", "assets/build/windows/Win32/Lib/json/encoder.py": "https://files.ballistica.net/cache/ba1/65/87/ea5c0cd241ce16750147c2b113da", "assets/build/windows/Win32/Lib/json/scanner.py": "https://files.ballistica.net/cache/ba1/a7/9e/0fdf34c72293733a58f0dd2677fa", - "assets/build/windows/Win32/Lib/json/tool.py": "https://files.ballistica.net/cache/ba1/70/80/f06ec89a4cfe38fabfeae3a9b1e4", - "assets/build/windows/Win32/Lib/keyword.py": "https://files.ballistica.net/cache/ba1/b6/c9/6fe1ba0c2f3df0a7cff398a69c75", - "assets/build/windows/Win32/Lib/linecache.py": "https://files.ballistica.net/cache/ba1/a5/e9/a9af76d79b1d6295749ea12a9590", - "assets/build/windows/Win32/Lib/locale.py": "https://files.ballistica.net/cache/ba1/ff/49/64c2836f6f9a4a9b7613ae4bbe68", - "assets/build/windows/Win32/Lib/logging/__init__.py": "https://files.ballistica.net/cache/ba1/78/e7/c93caee9b78214381dff14d0a645", - "assets/build/windows/Win32/Lib/logging/config.py": "https://files.ballistica.net/cache/ba1/af/72/51a97504cd5fda5bdfe7c9f966f6", - "assets/build/windows/Win32/Lib/logging/handlers.py": "https://files.ballistica.net/cache/ba1/8a/b9/7a237a423b8377a2b76be0e80f8e", - "assets/build/windows/Win32/Lib/lzma.py": "https://files.ballistica.net/cache/ba1/88/58/5eb2ce7457b4084010d40fa35609", - "assets/build/windows/Win32/Lib/mailbox.py": "https://files.ballistica.net/cache/ba1/c9/02/4033e7308dd093bfb8dd15d58ea0", - "assets/build/windows/Win32/Lib/mailcap.py": "https://files.ballistica.net/cache/ba1/cd/ef/d43f7e1f692a91246149348186f8", - "assets/build/windows/Win32/Lib/mimetypes.py": "https://files.ballistica.net/cache/ba1/25/a2/01e55fef8b57f4fcf5c92eebef4a", - "assets/build/windows/Win32/Lib/modulefinder.py": "https://files.ballistica.net/cache/ba1/55/6d/bd1b7ea0bc6b584d15bdde04c210", - "assets/build/windows/Win32/Lib/msilib/__init__.py": "https://files.ballistica.net/cache/ba1/32/b4/3d542fb6efb60c95af4e1edbe102", + "assets/build/windows/Win32/Lib/json/tool.py": "https://files.ballistica.net/cache/ba1/e0/66/6134206a819f737f2abdb391b4f5", + "assets/build/windows/Win32/Lib/keyword.py": "https://files.ballistica.net/cache/ba1/d0/4e/b6720a564842cc99f0bcf4cab00d", + "assets/build/windows/Win32/Lib/linecache.py": "https://files.ballistica.net/cache/ba1/dc/cf/cff04c33ac67207c1be857e69bd7", + "assets/build/windows/Win32/Lib/locale.py": "https://files.ballistica.net/cache/ba1/41/71/90e27a75d1f633ffcbff231b6d76", + "assets/build/windows/Win32/Lib/logging/__init__.py": "https://files.ballistica.net/cache/ba1/16/7f/9b8b634f9c4d6bb463b92160e993", + "assets/build/windows/Win32/Lib/logging/config.py": "https://files.ballistica.net/cache/ba1/13/92/d341d9e2b725228791c3ae0f6544", + "assets/build/windows/Win32/Lib/logging/handlers.py": "https://files.ballistica.net/cache/ba1/e2/60/696cffa3c43a257d1658f80a1757", + "assets/build/windows/Win32/Lib/lzma.py": "https://files.ballistica.net/cache/ba1/42/22/997edcab36ca24d6652197b43946", + "assets/build/windows/Win32/Lib/mailbox.py": "https://files.ballistica.net/cache/ba1/f5/47/ec4fe120a31bc22ee4160ee2b628", + "assets/build/windows/Win32/Lib/mailcap.py": "https://files.ballistica.net/cache/ba1/39/3c/ba855852479d4b38bff59e22f7c9", + "assets/build/windows/Win32/Lib/mimetypes.py": "https://files.ballistica.net/cache/ba1/51/db/b358cd7eab9cee99dda417ea977f", + "assets/build/windows/Win32/Lib/modulefinder.py": "https://files.ballistica.net/cache/ba1/63/85/9cd35229337868fce8bd0456d505", + "assets/build/windows/Win32/Lib/msilib/__init__.py": "https://files.ballistica.net/cache/ba1/54/95/b1f45d5d58bdb568be4fb1c9d7ad", "assets/build/windows/Win32/Lib/msilib/schema.py": "https://files.ballistica.net/cache/ba1/65/dd/95b460cf2c95a6caf4bdbb1a3d51", "assets/build/windows/Win32/Lib/msilib/sequence.py": "https://files.ballistica.net/cache/ba1/5e/c4/a7a6140c298325ee69a8958b40d6", "assets/build/windows/Win32/Lib/msilib/text.py": "https://files.ballistica.net/cache/ba1/49/b2/15871bd0d47d347c9371490eb35f", "assets/build/windows/Win32/Lib/netrc.py": "https://files.ballistica.net/cache/ba1/6e/c7/c912c856c06d61ce362403506c58", - "assets/build/windows/Win32/Lib/nntplib.py": "https://files.ballistica.net/cache/ba1/3f/6c/124eb82ca929cdbcbb7c8cb4628a", + "assets/build/windows/Win32/Lib/nntplib.py": "https://files.ballistica.net/cache/ba1/84/ff/9ca203896a4c7f75d09bbbb49f23", "assets/build/windows/Win32/Lib/ntpath.py": "https://files.ballistica.net/cache/ba1/d0/16/d4d8d088994e890714a11dc15434", - "assets/build/windows/Win32/Lib/nturl2path.py": "https://files.ballistica.net/cache/ba1/05/77/b863ff2e727259dac90f77bdcbfb", - "assets/build/windows/Win32/Lib/numbers.py": "https://files.ballistica.net/cache/ba1/19/02/57245f310345adfc574565c19471", - "assets/build/windows/Win32/Lib/opcode.py": "https://files.ballistica.net/cache/ba1/ad/4a/0d449831129669c0b9f800754322", - "assets/build/windows/Win32/Lib/operator.py": "https://files.ballistica.net/cache/ba1/fe/a1/433be97456e193c9a2e600ff84aa", + "assets/build/windows/Win32/Lib/nturl2path.py": "https://files.ballistica.net/cache/ba1/6c/d4/b0ad03a05c03e8a672239a8d3c22", + "assets/build/windows/Win32/Lib/numbers.py": "https://files.ballistica.net/cache/ba1/4c/14/0c9d8a9af8c19d9639c4bf46470f", + "assets/build/windows/Win32/Lib/opcode.py": "https://files.ballistica.net/cache/ba1/48/18/e49f9bde356defaf57931b719db6", + "assets/build/windows/Win32/Lib/operator.py": "https://files.ballistica.net/cache/ba1/62/02/2ae2e6306970768ece225d61e8f6", "assets/build/windows/Win32/Lib/optparse.py": "https://files.ballistica.net/cache/ba1/08/d8/10bbc27b50836a1329ca9a8c76d9", - "assets/build/windows/Win32/Lib/os.py": "https://files.ballistica.net/cache/ba1/f7/b0/7795b8038c42d6c812be0b62d42c", - "assets/build/windows/Win32/Lib/pathlib.py": "https://files.ballistica.net/cache/ba1/f9/66/3f0aea2a0518289bc4286b4bda8d", - "assets/build/windows/Win32/Lib/pdb.py": "https://files.ballistica.net/cache/ba1/75/66/b6b61ea0471e82da55f7b95e47b1", - "assets/build/windows/Win32/Lib/pickle.py": "https://files.ballistica.net/cache/ba1/23/de/8cea763cb47bd1d8dcde05876c23", + "assets/build/windows/Win32/Lib/os.py": "https://files.ballistica.net/cache/ba1/5c/dd/579c24efb5c00df2976f332cf186", + "assets/build/windows/Win32/Lib/pathlib.py": "https://files.ballistica.net/cache/ba1/94/ed/7aeed103f4f6911c2bf47987a77c", + "assets/build/windows/Win32/Lib/pdb.py": "https://files.ballistica.net/cache/ba1/1f/cc/e2615b40a6cb1a3eddcbd406df40", + "assets/build/windows/Win32/Lib/pickle.py": "https://files.ballistica.net/cache/ba1/b6/46/f767feb20108a62448d0fdc7602f", "assets/build/windows/Win32/Lib/pickletools.py": "https://files.ballistica.net/cache/ba1/2e/45/eddff9ff648e35265541ce3296aa", "assets/build/windows/Win32/Lib/pipes.py": "https://files.ballistica.net/cache/ba1/4f/e3/798b7a258f1747aa6c5abb437149", - "assets/build/windows/Win32/Lib/pkgutil.py": "https://files.ballistica.net/cache/ba1/71/ec/ef12b9e970cdd6519387ad7168bc", - "assets/build/windows/Win32/Lib/platform.py": "https://files.ballistica.net/cache/ba1/e4/ce/7ff2a305f977646d16e9bd3f8520", - "assets/build/windows/Win32/Lib/plistlib.py": "https://files.ballistica.net/cache/ba1/4a/5c/e2974e9a8d629f5bdea197989c4c", - "assets/build/windows/Win32/Lib/poplib.py": "https://files.ballistica.net/cache/ba1/0b/3f/ebe15eb5e0aed0f623fb371d1e6c", - "assets/build/windows/Win32/Lib/posixpath.py": "https://files.ballistica.net/cache/ba1/0e/d9/4afdfd1c5d247b2184c9da8ce58d", - "assets/build/windows/Win32/Lib/pprint.py": "https://files.ballistica.net/cache/ba1/d7/a9/1c512abc7fa9626b3d4b8032aceb", - "assets/build/windows/Win32/Lib/profile.py": "https://files.ballistica.net/cache/ba1/df/aa/5f646a01fbbf11278346627ad967", - "assets/build/windows/Win32/Lib/pstats.py": "https://files.ballistica.net/cache/ba1/d8/83/57c8604d5383e3a1a72730c5ccbe", + "assets/build/windows/Win32/Lib/pkgutil.py": "https://files.ballistica.net/cache/ba1/e4/b8/79a14ad4cb6ee46377ec45d6df74", + "assets/build/windows/Win32/Lib/platform.py": "https://files.ballistica.net/cache/ba1/0b/52/0bb8a0560bced25c8728c6c7a0a4", + "assets/build/windows/Win32/Lib/plistlib.py": "https://files.ballistica.net/cache/ba1/6a/e8/4d5c747e45f582db11ffa511d651", + "assets/build/windows/Win32/Lib/poplib.py": "https://files.ballistica.net/cache/ba1/68/71/845ce32e039b1d7c9fe9dc07e059", + "assets/build/windows/Win32/Lib/posixpath.py": "https://files.ballistica.net/cache/ba1/f4/aa/897b0ebd640cc2538b4125fe8ead", + "assets/build/windows/Win32/Lib/pprint.py": "https://files.ballistica.net/cache/ba1/85/6e/57f702f42a1023f506084172699c", + "assets/build/windows/Win32/Lib/profile.py": "https://files.ballistica.net/cache/ba1/27/f7/fecf77603def6be7e272ecf879b1", + "assets/build/windows/Win32/Lib/pstats.py": "https://files.ballistica.net/cache/ba1/8e/3e/2e0ba82e95a5ea276ade31824e46", "assets/build/windows/Win32/Lib/pty.py": "https://files.ballistica.net/cache/ba1/01/fa/73d52f1e8ad3e8fba58a8fd67d60", - "assets/build/windows/Win32/Lib/py_compile.py": "https://files.ballistica.net/cache/ba1/b3/4a/825bf33162ad633f02c93f05fa3a", + "assets/build/windows/Win32/Lib/py_compile.py": "https://files.ballistica.net/cache/ba1/1d/c5/05bbfe3acd92bddb0ecb22bb56b5", "assets/build/windows/Win32/Lib/pyclbr.py": "https://files.ballistica.net/cache/ba1/15/53/68c8a9df2a80480b6fc458352687", - "assets/build/windows/Win32/Lib/pydoc.py": "https://files.ballistica.net/cache/ba1/e5/ff/e8d985a8dbd62f018c02f6651e5f", - "assets/build/windows/Win32/Lib/queue.py": "https://files.ballistica.net/cache/ba1/f9/33/4ae8645dcd0a9d8b73d14a1b71c7", - "assets/build/windows/Win32/Lib/quopri.py": "https://files.ballistica.net/cache/ba1/2c/58/ad0d88ce4f54696b2e3b77229b6f", - "assets/build/windows/Win32/Lib/random.py": "https://files.ballistica.net/cache/ba1/b6/d9/b95dd3d9250d459233f6b5315a3b", + "assets/build/windows/Win32/Lib/pydoc.py": "https://files.ballistica.net/cache/ba1/56/1f/6fb68934b6045e93a0e0ad866f7d", + "assets/build/windows/Win32/Lib/queue.py": "https://files.ballistica.net/cache/ba1/ad/d9/dccb193c1f5b918c874573949a7c", + "assets/build/windows/Win32/Lib/quopri.py": "https://files.ballistica.net/cache/ba1/01/61/77a2bd9e234c35d4e5e3dca41474", + "assets/build/windows/Win32/Lib/random.py": "https://files.ballistica.net/cache/ba1/9e/46/3bf62f305b77fd0b952d6ab47475", "assets/build/windows/Win32/Lib/re.py": "https://files.ballistica.net/cache/ba1/92/ef/6bfc4cf4278e1d656a339af3a4fb", "assets/build/windows/Win32/Lib/reprlib.py": "https://files.ballistica.net/cache/ba1/a8/ba/d93d9b48a6c8e84421dc29a7a356", - "assets/build/windows/Win32/Lib/rlcompleter.py": "https://files.ballistica.net/cache/ba1/07/36/8d1de8a69e6b5b1cc73d0216948a", - "assets/build/windows/Win32/Lib/runpy.py": "https://files.ballistica.net/cache/ba1/33/bb/94fdb22005971a029ec79aea277f", + "assets/build/windows/Win32/Lib/rlcompleter.py": "https://files.ballistica.net/cache/ba1/3b/fd/4ebf4b35da2f173ed151b87056aa", + "assets/build/windows/Win32/Lib/runpy.py": "https://files.ballistica.net/cache/ba1/13/05/2bdddfbff67d94f98d0710c807d5", "assets/build/windows/Win32/Lib/sched.py": "https://files.ballistica.net/cache/ba1/c6/60/916d287001a20a6a9b10edec7eab", - "assets/build/windows/Win32/Lib/secrets.py": "https://files.ballistica.net/cache/ba1/56/3e/95bb97b0783468cfc2d3334daa98", - "assets/build/windows/Win32/Lib/selectors.py": "https://files.ballistica.net/cache/ba1/af/9a/2ffd2e47c2bfd9318aaf126ee6af", + "assets/build/windows/Win32/Lib/secrets.py": "https://files.ballistica.net/cache/ba1/3a/08/35ad5fa7b2674b557d6877856e57", + "assets/build/windows/Win32/Lib/selectors.py": "https://files.ballistica.net/cache/ba1/e7/e0/5974f4d22db37ed06a4a88c3982f", "assets/build/windows/Win32/Lib/shelve.py": "https://files.ballistica.net/cache/ba1/78/b5/9bc76a4facc8d27398b939bc074b", - "assets/build/windows/Win32/Lib/shlex.py": "https://files.ballistica.net/cache/ba1/ea/f0/c13f433acca4bee87831401e5846", - "assets/build/windows/Win32/Lib/shutil.py": "https://files.ballistica.net/cache/ba1/48/6c/ab9181bbd7675b275280defc0a25", + "assets/build/windows/Win32/Lib/shlex.py": "https://files.ballistica.net/cache/ba1/8b/f0/0626cd9774fc74dbdd57171b6bd0", + "assets/build/windows/Win32/Lib/shutil.py": "https://files.ballistica.net/cache/ba1/bc/18/296bd7c481b225dcc4708695d05f", "assets/build/windows/Win32/Lib/signal.py": "https://files.ballistica.net/cache/ba1/01/09/a4a4e1ca8c41d84e831555752222", - "assets/build/windows/Win32/Lib/site.py": "https://files.ballistica.net/cache/ba1/f1/8c/e38cbf5f63a710111788414c07c6", - "assets/build/windows/Win32/Lib/smtpd.py": "https://files.ballistica.net/cache/ba1/63/b6/77d11c42ae0775a49ed76818bffb", - "assets/build/windows/Win32/Lib/smtplib.py": "https://files.ballistica.net/cache/ba1/ee/88/b917a2d5a11d3b3f4ac874fd5510", + "assets/build/windows/Win32/Lib/site.py": "https://files.ballistica.net/cache/ba1/63/2c/fb3429d2bc8173f4556c95c12a27", + "assets/build/windows/Win32/Lib/smtpd.py": "https://files.ballistica.net/cache/ba1/43/9a/1bde22068149fd37cb82a3ca52ae", + "assets/build/windows/Win32/Lib/smtplib.py": "https://files.ballistica.net/cache/ba1/ce/db/a86932841fc9db4ce62254cfbe3c", "assets/build/windows/Win32/Lib/sndhdr.py": "https://files.ballistica.net/cache/ba1/48/bd/cf83c27bc7f72e2c5b5d5497aeb3", - "assets/build/windows/Win32/Lib/socket.py": "https://files.ballistica.net/cache/ba1/f4/f6/c4a07d6f6a135b22f9a5d0df4eb4", - "assets/build/windows/Win32/Lib/socketserver.py": "https://files.ballistica.net/cache/ba1/8e/6e/62997e4b94b1360849b5476014d5", + "assets/build/windows/Win32/Lib/socket.py": "https://files.ballistica.net/cache/ba1/b0/4a/883940df01c2a2743b394b65eb6d", + "assets/build/windows/Win32/Lib/socketserver.py": "https://files.ballistica.net/cache/ba1/c6/b6/45fd1ececd3b4272f1f0674ce05c", "assets/build/windows/Win32/Lib/sqlite3/__init__.py": "https://files.ballistica.net/cache/ba1/4b/1b/be86116df24d067bf7aaa9dc690b", "assets/build/windows/Win32/Lib/sqlite3/dbapi2.py": "https://files.ballistica.net/cache/ba1/12/ce/e004498a9d51b893c10a613c7c56", "assets/build/windows/Win32/Lib/sqlite3/dump.py": "https://files.ballistica.net/cache/ba1/25/0e/52f5b1972488978dae3361460bec", "assets/build/windows/Win32/Lib/sre_compile.py": "https://files.ballistica.net/cache/ba1/ad/7b/8ab12949ef2e5f8da457fac53624", "assets/build/windows/Win32/Lib/sre_constants.py": "https://files.ballistica.net/cache/ba1/5e/cd/1e06950ce526150b57e13943b117", "assets/build/windows/Win32/Lib/sre_parse.py": "https://files.ballistica.net/cache/ba1/ff/9f/a8bbd40431420f03a24cbaa958c0", - "assets/build/windows/Win32/Lib/ssl.py": "https://files.ballistica.net/cache/ba1/66/fa/d4499fb567d9c2fd5ab28070773e", + "assets/build/windows/Win32/Lib/ssl.py": "https://files.ballistica.net/cache/ba1/1a/9a/b24634a4cfff16c3137011677d57", "assets/build/windows/Win32/Lib/stat.py": "https://files.ballistica.net/cache/ba1/f5/ba/9a795715bfa80417f6b90fc4d5eb", - "assets/build/windows/Win32/Lib/statistics.py": "https://files.ballistica.net/cache/ba1/59/68/14bc90c9ca05a8c167f7e9361ea0", - "assets/build/windows/Win32/Lib/string.py": "https://files.ballistica.net/cache/ba1/55/cf/9b2286ef41a546b8e83dafb4c21f", + "assets/build/windows/Win32/Lib/statistics.py": "https://files.ballistica.net/cache/ba1/54/8a/4b1365441f1f5362ad5133207069", + "assets/build/windows/Win32/Lib/string.py": "https://files.ballistica.net/cache/ba1/e7/b7/56d0ff953973eb37ef38328f75e2", "assets/build/windows/Win32/Lib/stringprep.py": "https://files.ballistica.net/cache/ba1/5b/42/39b8e69a2979e4f553bb6908b545", "assets/build/windows/Win32/Lib/struct.py": "https://files.ballistica.net/cache/ba1/8e/da/3a3bdc58e197050b1906c1c86266", - "assets/build/windows/Win32/Lib/subprocess.py": "https://files.ballistica.net/cache/ba1/92/51/d899b4d325e933590218fcfb81b3", - "assets/build/windows/Win32/Lib/sunau.py": "https://files.ballistica.net/cache/ba1/83/4a/58133fd86ce134568f30cfa21b9c", - "assets/build/windows/Win32/Lib/symbol.py": "https://files.ballistica.net/cache/ba1/db/33/0e3b5b52110cacc345203fd9d328", - "assets/build/windows/Win32/Lib/symtable.py": "https://files.ballistica.net/cache/ba1/32/ab/b015cae4110d38b37cc64251d89f", - "assets/build/windows/Win32/Lib/sysconfig.py": "https://files.ballistica.net/cache/ba1/d5/84/72778fc541502325d17fbb1f7f07", + "assets/build/windows/Win32/Lib/subprocess.py": "https://files.ballistica.net/cache/ba1/8c/3d/26e2e0cc5e1b4d1ee55cae7ee354", + "assets/build/windows/Win32/Lib/sunau.py": "https://files.ballistica.net/cache/ba1/c5/ea/8efd34c174ebbf6e721eb2c4854b", + "assets/build/windows/Win32/Lib/symbol.py": "https://files.ballistica.net/cache/ba1/6e/6e/4fd99765d7e29749d2f192f06080", + "assets/build/windows/Win32/Lib/symtable.py": "https://files.ballistica.net/cache/ba1/9b/da/da5402613a6207fbc1d7ebf596d1", + "assets/build/windows/Win32/Lib/sysconfig.py": "https://files.ballistica.net/cache/ba1/a5/ba/97a70e33602056e924ba8883c88f", "assets/build/windows/Win32/Lib/tabnanny.py": "https://files.ballistica.net/cache/ba1/f0/6a/00c300ad5404f3bbbe4fe723a466", - "assets/build/windows/Win32/Lib/tarfile.py": "https://files.ballistica.net/cache/ba1/01/d4/bddbb7c9d8fe0d28a5f11aa4da6b", + "assets/build/windows/Win32/Lib/tarfile.py": "https://files.ballistica.net/cache/ba1/8f/c8/354a7969bc41efdaebc71bba2217", "assets/build/windows/Win32/Lib/telnetlib.py": "https://files.ballistica.net/cache/ba1/29/35/bdff1814c1cdba6b4ae5cb2f8675", - "assets/build/windows/Win32/Lib/tempfile.py": "https://files.ballistica.net/cache/ba1/b8/f2/59d8cc47a08868c5467a00c1d85c", + "assets/build/windows/Win32/Lib/tempfile.py": "https://files.ballistica.net/cache/ba1/29/72/75cb6dcbdd31bf1553a07b4dabb5", "assets/build/windows/Win32/Lib/textwrap.py": "https://files.ballistica.net/cache/ba1/c0/4a/3c5af4ba3f0440874cdb4dc61ecd", "assets/build/windows/Win32/Lib/this.py": "https://files.ballistica.net/cache/ba1/b0/f9/1eb227ba1d4d069da408b12e8312", - "assets/build/windows/Win32/Lib/threading.py": "https://files.ballistica.net/cache/ba1/5b/a8/61c3511e8e103bdfd7825958b540", + "assets/build/windows/Win32/Lib/threading.py": "https://files.ballistica.net/cache/ba1/44/94/ff6041fa68af794cbc6afab2e4ff", "assets/build/windows/Win32/Lib/timeit.py": "https://files.ballistica.net/cache/ba1/10/08/1e351bf532a328eb7e2e23a25b44", "assets/build/windows/Win32/Lib/token.py": "https://files.ballistica.net/cache/ba1/64/7c/121b22af2f56ace6019d0e2b3819", - "assets/build/windows/Win32/Lib/tokenize.py": "https://files.ballistica.net/cache/ba1/9d/01/b7ddea4fbc9401b71734d68e7500", - "assets/build/windows/Win32/Lib/trace.py": "https://files.ballistica.net/cache/ba1/61/e2/4f8a48fa03a1f49dd363204db6ed", - "assets/build/windows/Win32/Lib/traceback.py": "https://files.ballistica.net/cache/ba1/58/fe/040d4b32aab47ce1bd5920739394", - "assets/build/windows/Win32/Lib/tracemalloc.py": "https://files.ballistica.net/cache/ba1/91/0a/fcb0e16864c9ffe49e4eb9cc122c", + "assets/build/windows/Win32/Lib/tokenize.py": "https://files.ballistica.net/cache/ba1/de/b5/e9a154cd250aafb928b498a9b43e", + "assets/build/windows/Win32/Lib/trace.py": "https://files.ballistica.net/cache/ba1/a5/a9/6db347dcb89c09b8a8c6c2203f97", + "assets/build/windows/Win32/Lib/traceback.py": "https://files.ballistica.net/cache/ba1/8d/78/94708c92ece3d42f76c20ed38b9d", + "assets/build/windows/Win32/Lib/tracemalloc.py": "https://files.ballistica.net/cache/ba1/18/0d/5faf4c360c505d08b7613f5417d7", "assets/build/windows/Win32/Lib/tty.py": "https://files.ballistica.net/cache/ba1/66/b3/bb1684cec763502fdf418909eedc", - "assets/build/windows/Win32/Lib/types.py": "https://files.ballistica.net/cache/ba1/e0/c8/31f459e0c2f7bac2d0ebbfa00a59", - "assets/build/windows/Win32/Lib/typing.py": "https://files.ballistica.net/cache/ba1/b6/e4/03cad30b8be21630d987122692a4", + "assets/build/windows/Win32/Lib/types.py": "https://files.ballistica.net/cache/ba1/ed/48/072f2eb7e4e25fcd60a2081648a3", + "assets/build/windows/Win32/Lib/typing.py": "https://files.ballistica.net/cache/ba1/fc/94/e7bea2c7035490d1f88157ad13ac", "assets/build/windows/Win32/Lib/urllib/__init__.py": "https://files.ballistica.net/cache/ba1/48/ca/f840c02dd0e7222236a872a7f278", "assets/build/windows/Win32/Lib/urllib/error.py": "https://files.ballistica.net/cache/ba1/c9/c8/9d133fc217803023dff6faed8681", - "assets/build/windows/Win32/Lib/urllib/parse.py": "https://files.ballistica.net/cache/ba1/d7/fc/813689937d353eb8274116634140", - "assets/build/windows/Win32/Lib/urllib/request.py": "https://files.ballistica.net/cache/ba1/18/bf/a212326081a46262ca47520401bd", - "assets/build/windows/Win32/Lib/urllib/response.py": "https://files.ballistica.net/cache/ba1/bb/87/38040a39e87e422ad8afe64bf2a7", + "assets/build/windows/Win32/Lib/urllib/parse.py": "https://files.ballistica.net/cache/ba1/9d/e2/353bc23d88dac888052fb73f654c", + "assets/build/windows/Win32/Lib/urllib/request.py": "https://files.ballistica.net/cache/ba1/a9/75/0e6096cd359e3732ffefb4f69c0c", + "assets/build/windows/Win32/Lib/urllib/response.py": "https://files.ballistica.net/cache/ba1/30/32/b589f1002cf402e632315e473447", "assets/build/windows/Win32/Lib/urllib/robotparser.py": "https://files.ballistica.net/cache/ba1/ef/f6/c7fd5ad82a88e56463f9d1c1b8d1", "assets/build/windows/Win32/Lib/uu.py": "https://files.ballistica.net/cache/ba1/40/20/7ae03397a7bf1f182a9e5463047f", - "assets/build/windows/Win32/Lib/uuid.py": "https://files.ballistica.net/cache/ba1/80/65/da9c089c4ccf0cc172827fcd024d", + "assets/build/windows/Win32/Lib/uuid.py": "https://files.ballistica.net/cache/ba1/15/d4/3cbe0a49dbc49c4579f174635806", "assets/build/windows/Win32/Lib/warnings.py": "https://files.ballistica.net/cache/ba1/4f/c2/55e364e63a35cfada42a1c0b9504", - "assets/build/windows/Win32/Lib/wave.py": "https://files.ballistica.net/cache/ba1/95/6b/02b4ea1ee3a929a5c3e706b59e2f", - "assets/build/windows/Win32/Lib/weakref.py": "https://files.ballistica.net/cache/ba1/71/b9/26e68828f98cf71c5e9802a24709", - "assets/build/windows/Win32/Lib/webbrowser.py": "https://files.ballistica.net/cache/ba1/9b/7d/4c8e1c024746aaa32427db9d3e08", + "assets/build/windows/Win32/Lib/wave.py": "https://files.ballistica.net/cache/ba1/86/67/3fc7f739b871c1d3f9e479a8c4f5", + "assets/build/windows/Win32/Lib/weakref.py": "https://files.ballistica.net/cache/ba1/ea/d2/894a2e873428b59c4fba411773e4", + "assets/build/windows/Win32/Lib/webbrowser.py": "https://files.ballistica.net/cache/ba1/6d/e0/67a3eefd03d673ebc207738efb7e", "assets/build/windows/Win32/Lib/xdrlib.py": "https://files.ballistica.net/cache/ba1/35/a6/f6e14e4fb6beae1f68ec2a4be852", "assets/build/windows/Win32/Lib/xml/__init__.py": "https://files.ballistica.net/cache/ba1/02/9f/a002b4cb540d2e1c2b68edb44b3c", "assets/build/windows/Win32/Lib/xml/dom/NodeFilter.py": "https://files.ballistica.net/cache/ba1/70/fb/e0e98f50e21c494e53869d4d7d32", "assets/build/windows/Win32/Lib/xml/dom/__init__.py": "https://files.ballistica.net/cache/ba1/da/c6/e03fc8651c8453f97f28b59c39e6", "assets/build/windows/Win32/Lib/xml/dom/domreg.py": "https://files.ballistica.net/cache/ba1/24/0b/7c0c234f022ab835c9de2ebeae0b", - "assets/build/windows/Win32/Lib/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/00/f0/624de9ff458a0086a9287a4eca60", + "assets/build/windows/Win32/Lib/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/b7/72/a2efe64e9d3d6d69be97b30e7bff", "assets/build/windows/Win32/Lib/xml/dom/minicompat.py": "https://files.ballistica.net/cache/ba1/00/0c/03191b6f36ce83e51030448fae74", - "assets/build/windows/Win32/Lib/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/85/60/e39fb6f48bb279485b37e5174ef0", + "assets/build/windows/Win32/Lib/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/c3/90/41746421ae51e1a26eb6c6baac49", "assets/build/windows/Win32/Lib/xml/dom/pulldom.py": "https://files.ballistica.net/cache/ba1/de/17/036dd0486e71bd9257e4d083b21b", - "assets/build/windows/Win32/Lib/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/b6/5f/e121c4c15d59af737b1040acc649", - "assets/build/windows/Win32/Lib/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/b5/91/29e1f927a81c897f265ba6f4d070", - "assets/build/windows/Win32/Lib/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/e9/75/85145b2539056a6b666cf091339e", - "assets/build/windows/Win32/Lib/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/d1/3b/0b4abfc25ad2245f7409b716570e", - "assets/build/windows/Win32/Lib/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/ad/6d/fa6c976589d990e355cce61c4c96", + "assets/build/windows/Win32/Lib/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/ec/9e/09de652d2787b926de856d50485e", + "assets/build/windows/Win32/Lib/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/f7/70/75a58d2a3125230578bc521d3994", + "assets/build/windows/Win32/Lib/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/6e/0b/69e9a05eb2a06140b122e5ccae4a", + "assets/build/windows/Win32/Lib/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/ae/44/69859f1e835d4025b63b131b1c6b", + "assets/build/windows/Win32/Lib/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/27/f3/261a335507cb7fee52f2afb65af3", "assets/build/windows/Win32/Lib/xml/etree/cElementTree.py": "https://files.ballistica.net/cache/ba1/50/3c/23d2072448e974423bb11e396ab6", "assets/build/windows/Win32/Lib/xml/parsers/__init__.py": "https://files.ballistica.net/cache/ba1/19/bf/5493270c481d02ed233d2119653c", "assets/build/windows/Win32/Lib/xml/parsers/expat.py": "https://files.ballistica.net/cache/ba1/6e/f1/a6aad9b9297dd20b5c24a224eb87", - "assets/build/windows/Win32/Lib/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/12/eb/ce78b2effa256a82dcd1192db74f", + "assets/build/windows/Win32/Lib/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/5d/e2/7b4012ae334633fd73e6f15735a8", "assets/build/windows/Win32/Lib/xml/sax/_exceptions.py": "https://files.ballistica.net/cache/ba1/47/64/9b8c6da80774cf676c116c42c779", - "assets/build/windows/Win32/Lib/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/c7/16/42cb40d7afcde4ce825abf5bfbf3", + "assets/build/windows/Win32/Lib/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/75/23/e1f38824e9a56ce646de9ccc92a2", "assets/build/windows/Win32/Lib/xml/sax/handler.py": "https://files.ballistica.net/cache/ba1/84/cb/83d1e4735c125aee0b686c26f9d0", "assets/build/windows/Win32/Lib/xml/sax/saxutils.py": "https://files.ballistica.net/cache/ba1/b8/1c/2ca4b0f80078729b5e76b6d0250b", "assets/build/windows/Win32/Lib/xml/sax/xmlreader.py": "https://files.ballistica.net/cache/ba1/05/f9/eeb1c32818d63991e806451dad45", "assets/build/windows/Win32/Lib/xmlrpc/__init__.py": "https://files.ballistica.net/cache/ba1/84/79/19c277eda21caa83389ff1c2258f", - "assets/build/windows/Win32/Lib/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/1c/07/4679e4429a5da03ebb39b3c219cd", - "assets/build/windows/Win32/Lib/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/1f/03/3ec486442d39392933c7bab3d00d", + "assets/build/windows/Win32/Lib/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/36/81/6e1abfb7940c5580d2835f904c95", + "assets/build/windows/Win32/Lib/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/25/9c/bb429d6083ec5e53cfe18d7eb955", "assets/build/windows/Win32/Lib/zipapp.py": "https://files.ballistica.net/cache/ba1/92/65/287c3d27f14ea2956622e136f71b", - "assets/build/windows/Win32/Lib/zipfile.py": "https://files.ballistica.net/cache/ba1/a4/5d/baf60589ec6877de04ded39e9993", + "assets/build/windows/Win32/Lib/zipfile.py": "https://files.ballistica.net/cache/ba1/4c/c2/fc4526c5fff3ecbb2283d8a206a9", "assets/build/windows/Win32/Lib/zipimport.py": "https://files.ballistica.net/cache/ba1/73/9f/d089ac24f8277925d6938ab1fe1f", + "assets/build/windows/Win32/Lib/zoneinfo/__init__.py": "https://files.ballistica.net/cache/ba1/2d/ff/48364d3203172aef5248f5645e6f", + "assets/build/windows/Win32/Lib/zoneinfo/_common.py": "https://files.ballistica.net/cache/ba1/87/11/2b839574860329712c70bd11e8f3", + "assets/build/windows/Win32/Lib/zoneinfo/_tzpath.py": "https://files.ballistica.net/cache/ba1/d3/be/2eed03b48558c92499af86cd48a8", + "assets/build/windows/Win32/Lib/zoneinfo/_zoneinfo.py": "https://files.ballistica.net/cache/ba1/10/ed/a6ce9682c54a329853f6f79567a1", "assets/build/windows/Win32/OpenAL32.dll": "https://files.ballistica.net/cache/ba1/7b/0f/4349781f2e7ea0ced321fd0b9c45", "assets/build/windows/Win32/SDL2.dll": "https://files.ballistica.net/cache/ba1/c5/7d/e8943b5eda2472a308b63f938b1c", "assets/build/windows/Win32/libvorbis.dll": "https://files.ballistica.net/cache/ba1/1b/d1/75cc9eb21373659c8baacbdeb080", "assets/build/windows/Win32/libvorbisfile.dll": "https://files.ballistica.net/cache/ba1/c6/e1/f52f5d6c78f0ba497f0c8cd1c630", "assets/build/windows/Win32/msvcp140d.dll": "https://files.ballistica.net/cache/ba1/4e/48/54d72587b4bd07abcad311523685", "assets/build/windows/Win32/ogg.dll": "https://files.ballistica.net/cache/ba1/f2/0c/469bdc2148ad7d94232023da2cc6", - "assets/build/windows/Win32/python.exe": "https://files.ballistica.net/cache/ba1/61/1e/8b300ef4a3c46652ac1f7d01ed53", - "assets/build/windows/Win32/python38.dll": "https://files.ballistica.net/cache/ba1/1f/39/e314c3e7846ecddbd946c08aac04", - "assets/build/windows/Win32/python38_d.dll": "https://files.ballistica.net/cache/ba1/e1/1e/9dd3909f6a7d14ef3f5c95bceb73", - "assets/build/windows/Win32/python_d.exe": "https://files.ballistica.net/cache/ba1/57/2f/7cda5f442a832f8f92fc76e8370d", - "assets/build/windows/Win32/pythonw.exe": "https://files.ballistica.net/cache/ba1/3b/01/7819c084c81c84562a2dab70033e", - "assets/build/windows/Win32/pythonw_d.exe": "https://files.ballistica.net/cache/ba1/4b/df/7ebb1be3e018abc04660d932a7b2", + "assets/build/windows/Win32/python.exe": "https://files.ballistica.net/cache/ba1/bc/a9/370cfdb8a868380c0588453bd24e", + "assets/build/windows/Win32/python39.dll": "https://files.ballistica.net/cache/ba1/31/af/fd6a1905ec58a7000558c00d0c9c", + "assets/build/windows/Win32/python39_d.dll": "https://files.ballistica.net/cache/ba1/b8/ab/f7b684f6e58d09028941ca67f2cf", + "assets/build/windows/Win32/python_d.exe": "https://files.ballistica.net/cache/ba1/aa/47/11ca3dcba15bcdc71ca99a8ca526", + "assets/build/windows/Win32/pythonw.exe": "https://files.ballistica.net/cache/ba1/ea/9a/73a64c5bbf95bbb198c9da833f26", + "assets/build/windows/Win32/pythonw_d.exe": "https://files.ballistica.net/cache/ba1/b0/bc/470220ed546759f105442c48315a", "assets/build/windows/Win32/ucrtbased.dll": "https://files.ballistica.net/cache/ba1/f5/8b/14895df9caf46f326a3c939b34a4", "assets/build/windows/Win32/vc_redist.x86.exe": "https://files.ballistica.net/cache/ba1/1c/e1/4a1a2eddda2f4aebd5f8b64ab08e", "assets/build/windows/Win32/vcruntime140d.dll": "https://files.ballistica.net/cache/ba1/50/8d/bc2600ac9491f1b14d659709451f", "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/72/82/86956fae909ac2fe2a1abd84a361", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/70/e0/d1f6e02c19b18f3d02b474e9d9c0", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ad/1b/13d2e47149d4804419bbc2d97145", "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/19/f5/83c7bb76dc79020ded2e53f25e09", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6d/fb/51437a1f97e5cf466595e9b433c5", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/af/a4/09ce2c2cd53f46338e838958c58d", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/40/83/5514e4fc477d23dd035e4dbf441a", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4b/de/c54388a6e7c64c917c8b4a7c2ba5", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/28/e9/19563067a48a3a779d66bf19b606", "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/9c/4f/9b9276e8e2bf0d222ad1ee63a181", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f5/80/5c0ddcd973674081a7d7abf71069", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/0c/6e/5910f4a9fd3cfab4464ddcc88557", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/c6/6f/d83b7dccd42e270e4e5cca582906", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b7/19/c2ac8cc74bbde244b762f6390757", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/14/64/3009cfea9985b63982bee437144b", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/bd/bf/d299472cdbe1778fc6bc6f6ca3cf", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/86/ec/8b92f4db81024cc3ba44ef6b8070", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/01/a3/7dd46627ff5606234eafa4cb37b8", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/85/73/eba334a349abc12cb873e1a45909", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/f2/92/d170f89127ce918ba89a8dfcde22", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/f5/f3/bc57353da277776fc7a923b27ae5", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/b7/c5/8e0d736ecd4eb1ca6a18e2b5bff4", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/84/de/d90837982093b0b5b2dd5a71e304", - "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/50/ae/d0dac8641dd0cddaf7eeb0c6d6bb", - "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8c/e9/31e77a3d8ccf147372b30ca2005c", - "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8c/86/edc44ed5f9206a9d538eaa39bb5e", - "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ba/ca/4726eca2dc89e1f1faf08f34b635", - "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6d/46/1860beb33402ee3463e5870ffc6d", - "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7a/17/1d6af884c0a77e339a888015fccd", - "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fb/5e/f71252314b595fa089a70e84ae7d", - "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5f/af/4029a33987647c355e8ea16ac327", - "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0f/bf/7feceed4f45860593f5abd547ef5", - "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a4/ac/c9ab19889af2af351c35bbcc2ca6", - "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/bb/6d/3f795483eecf3b02b175d4e3ae95", - "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/59/5d/6c2a2faf66ce5cd37efbbd4ee531", - "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3b/73/083f29cf270f3701aee5d27fea70", - "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/51/21/ec73bfd77df70ff4d06ca2892505", - "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/dd/c4/76f367fa1cea9c720e79056afd20", - "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/58/90/dedfb364379229d8c64848b9435c", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/2b/50/7719ce17c926c2e77cfd86227b8f", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/4d/6e/07d81f2ecd4c6681d12f02bc4260", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/d5/dc/2b96b0f2dfaba1d9ff028105c2d6", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/6d/1c/b0965cabbdd209b35d24ceef4a31", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/37/86/b69055de8eb73e66505869ceec01", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/d6/07/430dbb5c7138fd972923bd495ae4", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/81/ba/ab192931bda7f54f09d4c4ab5ca1", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/65/d4/2ee62ace0f8b6b362fb1f4570af8", - "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/6c/63/2b8cbb65a0e1daa45d59e9f87e9a", - "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/c0/2f/a8b50faad086fba4fe936e863c20" + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/10/2f/8b02f5434fd232a7cdfeab2701d4", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e5/78/b289ab113be66c697ce64795193a", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/17/54/7efe5b99d8588162ee757dea3348", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/23/17/f1d541a3c9c3b5790e96828b7598", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/57/9f/d1bf09f5e0a2a15d730d9bb3c5cb", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d4/65/7a5e2941745c3036d89dbe3872de", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/5b/d6/d740cfe4e8bbe21a5345df389454", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/b1/ee/ea946bcdb77305710c59e9c6d128", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/70/f3/c4b89730342623be82e38f5f6ded", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ac/f5/7ab6560338d20424f553ee33a940", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/26/59/dfde2e6ce41ddfd89fa2e853db5c", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/60/51/71851a9986828e22489227aee1ec", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/d8/b5/4bb7dfc057da66009868677f4131", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/5b/57/1d23e447aa72ee3e812171baa8df", + "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e2/a9/6a5da77052000da6b35560120cd8", + "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/98/e4/199222439f5c1a9f4926aba0241b", + "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/69/bb/aabd8fa544c44831574d5b017ae7", + "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f1/de/15cedd9462ef271415e9abccd06b", + "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/73/ee/290a65b39125abbb015415dc8b59", + "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e8/0f/a6993b7e38a2d48e2a4938f4c4fd", + "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0b/93/5db13716ee4610ec88d409e3379d", + "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7a/34/1cda12f81c46067e7d6f9b74806e", + "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4e/1e/a67f47468493a564f95f3218b999", + "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d7/f0/41c098f285a9e5c76907c9547983", + "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/11/6e/e29738131f523b42168293c68d0d", + "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7c/89/4af8bd76d718c306fd4cabe9b0b6", + "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d8/62/c739869c92c06e35b8fd782a4fbc", + "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/90/53/c85bbfe89b765829b27c0d28617a", + "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f9/09/5a4922d34e314ef9ca8d4c90329d", + "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8d/de/025bb526c5a126636dffb011d5f4", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/b8/e0/2277efb063810deba2967cb7c7e5", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/98/32/72471c2f70116898b0dd01469951", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/8f/24/8ca657c6df34919463278294fdcf", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/31/ba/ceb77656d6670d6fa10ea45803f4", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/e3/72/e5b82a0d6fafa4726784d0b4e950", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/14/52/4c4d8e05d55133d6f144372fbb4c", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/ef/ad/f9cda01f91ad9920324054cff7e7", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/ce/a7/1ade386c868f6ef453eecbebacb7", + "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/f2/6c/5a0a4695dcc2a11e7941b8777e80", + "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/65/ac/d5c4162a71028c1bfa73ebc1f881" } \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e8c690e1..720ecf12 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v1 with: - python-version: 3.8 + python-version: 3.9 - name: Install dependencies run: tools/pcommand install_pip_reqs - name: Run checks and tests @@ -35,7 +35,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v1 with: - python-version: 3.8 + python-version: 3.9 - name: Compile binary run: make _cmake-simple-ci-server-build @@ -51,7 +51,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v1 with: - python-version: 3.8 + python-version: 3.9 - name: Install dependencies run: | python -m pip install --upgrade pip diff --git a/.idea/ballisticacore.iml b/.idea/ballisticacore.iml index a385081f..096ed03a 100644 --- a/.idea/ballisticacore.iml +++ b/.idea/ballisticacore.iml @@ -64,7 +64,7 @@ - + \ No newline at end of file diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml index b388fb62..9a416d60 100644 --- a/.idea/dictionaries/ericf.xml +++ b/.idea/dictionaries/ericf.xml @@ -14,6 +14,7 @@ aaak aarch abcdefghijklmnopqrstuvwxyz + abcdefghjkmnpqrtuvwxy abeb abishort abot @@ -81,6 +82,7 @@ apichanges apis apks + apost appath appathout appcfg @@ -235,6 +237,7 @@ bombsquadgame bools bootlocale + bootsubprocess borhani bot's botdist @@ -394,10 +397,12 @@ clrred cmakelists cmakeserver + cmath cmathmodule cmds cmembers cmodel + cmodules cmpf cnode codecsmodule @@ -564,6 +569,7 @@ distroot distros dline + dliwk dlldir dlls dmake @@ -710,6 +716,7 @@ eventid ewww ewwww + exargs excludepowerups excludetypes excstr @@ -745,6 +752,7 @@ fbase fclose fcmd + fcntl fcntlmodule fcode fcontents @@ -977,6 +985,7 @@ gpsui gradlepath gradlew + graphlib gravis grpentry grpkey @@ -1202,6 +1211,7 @@ lbits lbld lbval + lbzip lcfg lcolor lcrypto @@ -1217,6 +1227,8 @@ lfull lfval libballisticacore + libbz + libbzip libcrypto libdir libegl @@ -1235,6 +1247,7 @@ libsdl libsqlite libssl + libuuid libvorbi libvorbis libvorbisfile @@ -1313,6 +1326,7 @@ ltex ltypes lubyte + luuid lzma lzmamodule macappstore @@ -1580,6 +1594,7 @@ ortho osascript osmusic + ossaudiodev ostype osval otherplayer @@ -1695,6 +1710,7 @@ pogotron pointpos policybase + popd popen poplib popupcolor @@ -2294,6 +2310,7 @@ testfull testhelpers testimportmultiple + testinternalcapi testm testmagicmethods testmock @@ -2405,6 +2422,7 @@ typestr tzdiff tzinfos + tzpath uadfc uber ucrtbased @@ -2463,6 +2481,7 @@ userfunctions utcnow utimensat + uuidmodule uval valanntype validpgpkeys @@ -2521,6 +2540,7 @@ webbrowser webpage webpages + weeeird whatevs wheee whos @@ -2593,7 +2613,10 @@ xval xxdiff xxhdpi + xxlimited + xxsubinterpreters xxsubtype + xxtestfuzz xxxhdpi yach yapf @@ -2610,6 +2633,7 @@ zipapp zlib zlibmodule + zoneinfo zoomtext zpos zval diff --git a/.idea/misc.xml b/.idea/misc.xml index 2a75f480..bfd101b1 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e5b7d87..ae1cf302 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ -### 1.6.5 (20388) +### 1.6.5 (20394) - Added co-op support to server builds (thanks Dliwk!) +- Updated everything from Python 3.8 to Python 3.9. The biggest immediate impact to our code is that basic types such as list, dict, and tuple can be used in annotations, eliminating the need to import typing.Dict, typing.List, etc. See python.org for more changes. +- Note: accessing mods on external storage on Android will not work in this release. This functionality has not been working in recent versions of Android due to increased security features anyway and I am in the process of replacing it with a cloud based system for installing mods. More on this soon. ### 1.6.4 (20382) - Some cleanups in the Favorites tab of the gather window. diff --git a/assets/.asset_manifest_private.json b/assets/.asset_manifest_private.json index f0f2231f..5c0ccf46 100644 --- a/assets/.asset_manifest_private.json +++ b/assets/.asset_manifest_private.json @@ -941,28 +941,28 @@ "ba_data/models/zoeTorso.bob", "ba_data/models/zoeUpperArm.bob", "ba_data/models/zoeUpperLeg.bob", - "ba_data/python-site-packages/__pycache__/typing_extensions.cpython-38.opt-1.pyc", + "ba_data/python-site-packages/__pycache__/typing_extensions.cpython-39.opt-1.pyc", "ba_data/python-site-packages/_yaml/__init__.py", - "ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-38.opt-1.pyc", + "ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-39.opt-1.pyc", "ba_data/python-site-packages/typing_extensions.py", "ba_data/python-site-packages/yaml/__init__.py", - "ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/composer.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/constructor.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/cyaml.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/dumper.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/emitter.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/error.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/events.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/loader.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/nodes.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/parser.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/reader.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/representer.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/resolver.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/scanner.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/serializer.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/tokens.cpython-38.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/composer.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/constructor.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/cyaml.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/dumper.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/emitter.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/error.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/events.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/loader.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/nodes.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/parser.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/reader.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/representer.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/resolver.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/scanner.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/serializer.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/tokens.cpython-39.opt-1.pyc", "ba_data/python-site-packages/yaml/composer.py", "ba_data/python-site-packages/yaml/constructor.py", "ba_data/python-site-packages/yaml/cyaml.py", @@ -2585,180 +2585,182 @@ "ba_data/textures/zoeIcon_preview.png", "pylib-android/__future__.py", "pylib-android/__phello__.foo.py", - "pylib-android/__pycache__/__future__.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/__phello__.foo.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_bootlocale.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_collections_abc.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_compat_pickle.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_compression.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_dummy_thread.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_markupbase.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_osx_support.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_py_abc.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_pydecimal.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_pyio.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_strptime.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_threading_local.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_weakrefset.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/abc.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/aifc.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/antigravity.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/argparse.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/ast.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/asynchat.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/asyncore.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/base64.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/bdb.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/binhex.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/bisect.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/bz2.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/cProfile.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/calendar.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/cgi.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/cgitb.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/chunk.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/cmd.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/code.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/codecs.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/codeop.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/colorsys.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/compileall.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/configparser.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/contextlib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/contextvars.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/copy.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/copyreg.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/crypt.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/csv.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/dataclasses.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/datetime.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/decimal.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/difflib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/dis.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/doctest.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/dummy_threading.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/enum.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/filecmp.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/fileinput.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/fnmatch.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/formatter.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/fractions.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/ftplib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/functools.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/genericpath.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/getopt.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/getpass.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/gettext.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/glob.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/gzip.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/hashlib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/heapq.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/hmac.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/imghdr.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/imp.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/inspect.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/io.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/ipaddress.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/keyword.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/linecache.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/locale.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/lzma.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/mailbox.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/mailcap.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/mimetypes.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/modulefinder.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/netrc.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/nntplib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/ntpath.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/nturl2path.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/numbers.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/opcode.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/operator.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/optparse.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/os.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pathlib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pdb.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pickle.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pickletools.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pipes.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pkgutil.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/platform.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/plistlib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/poplib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/posixpath.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pprint.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/profile.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pstats.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pty.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/py_compile.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pyclbr.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pydoc.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/queue.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/quopri.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/random.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/re.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/reprlib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/rlcompleter.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/runpy.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/sched.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/secrets.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/selectors.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/shelve.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/shlex.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/shutil.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/signal.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/site.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/smtpd.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/smtplib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/sndhdr.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/socket.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/socketserver.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/sre_compile.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/sre_constants.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/sre_parse.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/ssl.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/stat.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/statistics.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/string.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/stringprep.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/struct.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/subprocess.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/sunau.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/symbol.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/symtable.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/sysconfig.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/tabnanny.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/tarfile.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/telnetlib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/tempfile.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/textwrap.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/this.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/threading.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/timeit.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/token.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/tokenize.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/trace.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/traceback.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/tracemalloc.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/tty.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/types.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/typing.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/uu.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/uuid.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/warnings.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/wave.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/weakref.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/webbrowser.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/xdrlib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/zipapp.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/zipfile.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/zipimport.cpython-38.opt-1.pyc", + "pylib-android/__pycache__/__future__.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/__phello__.foo.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_aix_support.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_bootlocale.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_collections_abc.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_compat_pickle.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_compression.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_markupbase.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_osx_support.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_py_abc.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_pydecimal.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_pyio.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_strptime.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_threading_local.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_weakrefset.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/abc.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/aifc.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/antigravity.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/argparse.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/ast.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/asynchat.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/asyncore.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/base64.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/bdb.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/binhex.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/bisect.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/bz2.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/cProfile.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/calendar.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/cgi.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/cgitb.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/chunk.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/cmd.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/code.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/codecs.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/codeop.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/colorsys.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/compileall.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/configparser.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/contextlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/contextvars.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/copy.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/copyreg.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/crypt.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/csv.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/dataclasses.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/datetime.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/decimal.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/difflib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/dis.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/doctest.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/enum.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/filecmp.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/fileinput.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/fnmatch.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/formatter.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/fractions.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/ftplib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/functools.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/genericpath.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/getopt.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/getpass.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/gettext.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/glob.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/graphlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/gzip.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/hashlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/heapq.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/hmac.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/imghdr.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/imp.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/inspect.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/io.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/ipaddress.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/keyword.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/linecache.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/locale.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/lzma.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/mailbox.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/mailcap.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/mimetypes.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/modulefinder.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/netrc.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/nntplib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/ntpath.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/nturl2path.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/numbers.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/opcode.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/operator.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/optparse.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/os.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pathlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pdb.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pickle.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pickletools.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pipes.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pkgutil.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/platform.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/plistlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/poplib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/posixpath.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pprint.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/profile.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pstats.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pty.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/py_compile.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pyclbr.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pydoc.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/queue.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/quopri.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/random.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/re.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/reprlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/rlcompleter.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/runpy.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/sched.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/secrets.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/selectors.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/shelve.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/shlex.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/shutil.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/signal.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/site.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/smtpd.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/smtplib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/sndhdr.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/socket.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/socketserver.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/sre_compile.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/sre_constants.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/sre_parse.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/ssl.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/stat.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/statistics.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/string.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/stringprep.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/struct.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/subprocess.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/sunau.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/symbol.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/symtable.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/sysconfig.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/tabnanny.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/tarfile.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/telnetlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/tempfile.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/textwrap.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/this.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/threading.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/timeit.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/token.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/tokenize.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/trace.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/traceback.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/tracemalloc.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/tty.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/types.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/typing.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/uu.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/uuid.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/warnings.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/wave.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/weakref.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/webbrowser.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/xdrlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/zipapp.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/zipfile.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/zipimport.cpython-39.opt-1.pyc", + "pylib-android/_aix_support.py", "pylib-android/_bootlocale.py", + "pylib-android/_bootsubprocess.py", "pylib-android/_collections_abc.py", "pylib-android/_compat_pickle.py", "pylib-android/_compression.py", - "pylib-android/_dummy_thread.py", "pylib-android/_markupbase.py", "pylib-android/_osx_support.py", "pylib-android/_py_abc.py", @@ -2776,35 +2778,36 @@ "pylib-android/asynchat.py", "pylib-android/asyncio/__init__.py", "pylib-android/asyncio/__main__.py", - "pylib-android/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/constants.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/events.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/futures.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/locks.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/log.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/queues.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/runners.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/streams.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/transports.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc", + "pylib-android/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/constants.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/events.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/futures.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/locks.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/log.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/queues.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/runners.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/streams.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/threads.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/transports.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc", "pylib-android/asyncio/base_events.py", "pylib-android/asyncio/base_futures.py", "pylib-android/asyncio/base_subprocess.py", @@ -2827,6 +2830,7 @@ "pylib-android/asyncio/streams.py", "pylib-android/asyncio/subprocess.py", "pylib-android/asyncio/tasks.py", + "pylib-android/asyncio/threads.py", "pylib-android/asyncio/transports.py", "pylib-android/asyncio/trsock.py", "pylib-android/asyncio/unix_events.py", @@ -2848,18 +2852,18 @@ "pylib-android/codecs.py", "pylib-android/codeop.py", "pylib-android/collections/__init__.py", - "pylib-android/collections/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/collections/__pycache__/abc.cpython-38.opt-1.pyc", + "pylib-android/collections/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/collections/__pycache__/abc.cpython-39.opt-1.pyc", "pylib-android/collections/abc.py", "pylib-android/colorsys.py", "pylib-android/compileall.py", "pylib-android/concurrent/__init__.py", - "pylib-android/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc", + "pylib-android/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc", "pylib-android/concurrent/futures/__init__.py", - "pylib-android/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc", - "pylib-android/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc", - "pylib-android/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc", + "pylib-android/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc", + "pylib-android/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc", + "pylib-android/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc", "pylib-android/concurrent/futures/_base.py", "pylib-android/concurrent/futures/process.py", "pylib-android/concurrent/futures/thread.py", @@ -2871,29 +2875,29 @@ "pylib-android/crypt.py", "pylib-android/csv.py", "pylib-android/ctypes/__init__.py", - "pylib-android/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc", - "pylib-android/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc", - "pylib-android/ctypes/__pycache__/util.cpython-38.opt-1.pyc", - "pylib-android/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc", + "pylib-android/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc", + "pylib-android/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc", + "pylib-android/ctypes/__pycache__/util.cpython-39.opt-1.pyc", + "pylib-android/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc", "pylib-android/ctypes/_aix.py", "pylib-android/ctypes/_endian.py", "pylib-android/ctypes/macholib/__init__.py", - "pylib-android/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc", - "pylib-android/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc", - "pylib-android/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc", + "pylib-android/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc", + "pylib-android/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc", + "pylib-android/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc", "pylib-android/ctypes/macholib/dyld.py", "pylib-android/ctypes/macholib/dylib.py", "pylib-android/ctypes/macholib/framework.py", "pylib-android/ctypes/util.py", "pylib-android/ctypes/wintypes.py", "pylib-android/curses/__init__.py", - "pylib-android/curses/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/curses/__pycache__/ascii.cpython-38.opt-1.pyc", - "pylib-android/curses/__pycache__/has_key.cpython-38.opt-1.pyc", - "pylib-android/curses/__pycache__/panel.cpython-38.opt-1.pyc", - "pylib-android/curses/__pycache__/textpad.cpython-38.opt-1.pyc", + "pylib-android/curses/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/curses/__pycache__/ascii.cpython-39.opt-1.pyc", + "pylib-android/curses/__pycache__/has_key.cpython-39.opt-1.pyc", + "pylib-android/curses/__pycache__/panel.cpython-39.opt-1.pyc", + "pylib-android/curses/__pycache__/textpad.cpython-39.opt-1.pyc", "pylib-android/curses/ascii.py", "pylib-android/curses/has_key.py", "pylib-android/curses/panel.py", @@ -2904,28 +2908,27 @@ "pylib-android/difflib.py", "pylib-android/dis.py", "pylib-android/doctest.py", - "pylib-android/dummy_threading.py", "pylib-android/email/__init__.py", - "pylib-android/email/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/_policybase.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/base64mime.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/charset.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/contentmanager.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/encoders.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/errors.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/feedparser.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/generator.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/header.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/headerregistry.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/iterators.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/message.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/parser.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/policy.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/quoprimime.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/utils.cpython-38.opt-1.pyc", + "pylib-android/email/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/_policybase.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/base64mime.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/charset.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/contentmanager.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/encoders.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/errors.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/feedparser.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/generator.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/header.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/headerregistry.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/iterators.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/message.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/parser.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/policy.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/quoprimime.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/utils.cpython-39.opt-1.pyc", "pylib-android/email/_encoded_words.py", "pylib-android/email/_header_value_parser.py", "pylib-android/email/_parseaddr.py", @@ -2942,15 +2945,15 @@ "pylib-android/email/iterators.py", "pylib-android/email/message.py", "pylib-android/email/mime/__init__.py", - "pylib-android/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/application.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/audio.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/base.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/image.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/message.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/text.cpython-38.opt-1.pyc", + "pylib-android/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/application.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/audio.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/base.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/image.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/message.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/text.cpython-39.opt-1.pyc", "pylib-android/email/mime/application.py", "pylib-android/email/mime/audio.py", "pylib-android/email/mime/base.py", @@ -2964,129 +2967,128 @@ "pylib-android/email/quoprimime.py", "pylib-android/email/utils.py", "pylib-android/encodings/__init__.py", - "pylib-android/encodings/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/aliases.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/ascii.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/big5.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/charmap.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp037.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp273.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp424.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp437.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp500.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp720.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp737.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp775.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp850.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp852.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp855.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp856.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp857.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp858.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp860.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp861.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp862.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp863.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp864.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp865.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp866.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp869.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp874.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp875.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp932.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp949.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp950.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/gbk.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/hz.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/idna.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/johab.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/oem.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/palmos.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/punycode.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/undefined.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc", + "pylib-android/encodings/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/aliases.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/ascii.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/big5.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/charmap.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp037.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp273.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp424.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp437.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp500.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp720.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp737.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp775.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp850.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp852.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp855.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp856.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp857.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp858.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp860.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp861.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp862.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp863.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp864.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp865.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp866.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp869.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp874.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp875.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp932.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp949.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp950.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/gbk.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/hz.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/idna.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/johab.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/oem.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/palmos.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/punycode.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/undefined.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc", "pylib-android/encodings/aliases.py", "pylib-android/encodings/ascii.py", "pylib-android/encodings/base64_codec.py", @@ -3174,7 +3176,6 @@ "pylib-android/encodings/kz1048.py", "pylib-android/encodings/latin_1.py", "pylib-android/encodings/mac_arabic.py", - "pylib-android/encodings/mac_centeuro.py", "pylib-android/encodings/mac_croatian.py", "pylib-android/encodings/mac_cyrillic.py", "pylib-android/encodings/mac_farsi.py", @@ -3222,22 +3223,23 @@ "pylib-android/getpass.py", "pylib-android/gettext.py", "pylib-android/glob.py", + "pylib-android/graphlib.py", "pylib-android/gzip.py", "pylib-android/hashlib.py", "pylib-android/heapq.py", "pylib-android/hmac.py", "pylib-android/html/__init__.py", - "pylib-android/html/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/html/__pycache__/entities.cpython-38.opt-1.pyc", - "pylib-android/html/__pycache__/parser.cpython-38.opt-1.pyc", + "pylib-android/html/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/html/__pycache__/entities.cpython-39.opt-1.pyc", + "pylib-android/html/__pycache__/parser.cpython-39.opt-1.pyc", "pylib-android/html/entities.py", "pylib-android/html/parser.py", "pylib-android/http/__init__.py", - "pylib-android/http/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/http/__pycache__/client.cpython-38.opt-1.pyc", - "pylib-android/http/__pycache__/cookiejar.cpython-38.opt-1.pyc", - "pylib-android/http/__pycache__/cookies.cpython-38.opt-1.pyc", - "pylib-android/http/__pycache__/server.cpython-38.opt-1.pyc", + "pylib-android/http/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/http/__pycache__/client.cpython-39.opt-1.pyc", + "pylib-android/http/__pycache__/cookiejar.cpython-39.opt-1.pyc", + "pylib-android/http/__pycache__/cookies.cpython-39.opt-1.pyc", + "pylib-android/http/__pycache__/server.cpython-39.opt-1.pyc", "pylib-android/http/client.py", "pylib-android/http/cookiejar.py", "pylib-android/http/cookies.py", @@ -3245,16 +3247,18 @@ "pylib-android/imghdr.py", "pylib-android/imp.py", "pylib-android/importlib/__init__.py", - "pylib-android/importlib/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc", - "pylib-android/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc", - "pylib-android/importlib/__pycache__/abc.cpython-38.opt-1.pyc", - "pylib-android/importlib/__pycache__/machinery.cpython-38.opt-1.pyc", - "pylib-android/importlib/__pycache__/metadata.cpython-38.opt-1.pyc", - "pylib-android/importlib/__pycache__/resources.cpython-38.opt-1.pyc", - "pylib-android/importlib/__pycache__/util.cpython-38.opt-1.pyc", + "pylib-android/importlib/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/_common.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/abc.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/machinery.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/metadata.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/resources.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/util.cpython-39.opt-1.pyc", "pylib-android/importlib/_bootstrap.py", "pylib-android/importlib/_bootstrap_external.py", + "pylib-android/importlib/_common.py", "pylib-android/importlib/abc.py", "pylib-android/importlib/machinery.py", "pylib-android/importlib/metadata.py", @@ -3264,11 +3268,11 @@ "pylib-android/io.py", "pylib-android/ipaddress.py", "pylib-android/json/__init__.py", - "pylib-android/json/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/json/__pycache__/decoder.cpython-38.opt-1.pyc", - "pylib-android/json/__pycache__/encoder.cpython-38.opt-1.pyc", - "pylib-android/json/__pycache__/scanner.cpython-38.opt-1.pyc", - "pylib-android/json/__pycache__/tool.cpython-38.opt-1.pyc", + "pylib-android/json/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/json/__pycache__/decoder.cpython-39.opt-1.pyc", + "pylib-android/json/__pycache__/encoder.cpython-39.opt-1.pyc", + "pylib-android/json/__pycache__/scanner.cpython-39.opt-1.pyc", + "pylib-android/json/__pycache__/tool.cpython-39.opt-1.pyc", "pylib-android/json/decoder.py", "pylib-android/json/encoder.py", "pylib-android/json/scanner.py", @@ -3277,9 +3281,9 @@ "pylib-android/linecache.py", "pylib-android/locale.py", "pylib-android/logging/__init__.py", - "pylib-android/logging/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/logging/__pycache__/config.cpython-38.opt-1.pyc", - "pylib-android/logging/__pycache__/handlers.cpython-38.opt-1.pyc", + "pylib-android/logging/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/logging/__pycache__/config.cpython-39.opt-1.pyc", + "pylib-android/logging/__pycache__/handlers.cpython-39.opt-1.pyc", "pylib-android/logging/config.py", "pylib-android/logging/handlers.py", "pylib-android/lzma.py", @@ -3334,9 +3338,9 @@ "pylib-android/socket.py", "pylib-android/socketserver.py", "pylib-android/sqlite3/__init__.py", - "pylib-android/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc", - "pylib-android/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc", + "pylib-android/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc", + "pylib-android/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc", "pylib-android/sqlite3/dbapi2.py", "pylib-android/sqlite3/dump.py", "pylib-android/sre_compile.py", @@ -3370,12 +3374,12 @@ "pylib-android/types.py", "pylib-android/typing.py", "pylib-android/urllib/__init__.py", - "pylib-android/urllib/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/urllib/__pycache__/error.cpython-38.opt-1.pyc", - "pylib-android/urllib/__pycache__/parse.cpython-38.opt-1.pyc", - "pylib-android/urllib/__pycache__/request.cpython-38.opt-1.pyc", - "pylib-android/urllib/__pycache__/response.cpython-38.opt-1.pyc", - "pylib-android/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc", + "pylib-android/urllib/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/urllib/__pycache__/error.cpython-39.opt-1.pyc", + "pylib-android/urllib/__pycache__/parse.cpython-39.opt-1.pyc", + "pylib-android/urllib/__pycache__/request.cpython-39.opt-1.pyc", + "pylib-android/urllib/__pycache__/response.cpython-39.opt-1.pyc", + "pylib-android/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc", "pylib-android/urllib/error.py", "pylib-android/urllib/parse.py", "pylib-android/urllib/request.py", @@ -3389,17 +3393,17 @@ "pylib-android/webbrowser.py", "pylib-android/xdrlib.py", "pylib-android/xml/__init__.py", - "pylib-android/xml/__pycache__/__init__.cpython-38.opt-1.pyc", + "pylib-android/xml/__pycache__/__init__.cpython-39.opt-1.pyc", "pylib-android/xml/dom/NodeFilter.py", "pylib-android/xml/dom/__init__.py", - "pylib-android/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc", - "pylib-android/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc", - "pylib-android/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc", - "pylib-android/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc", - "pylib-android/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc", - "pylib-android/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc", - "pylib-android/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc", "pylib-android/xml/dom/domreg.py", "pylib-android/xml/dom/expatbuilder.py", "pylib-android/xml/dom/minicompat.py", @@ -3410,213 +3414,223 @@ "pylib-android/xml/etree/ElementPath.py", "pylib-android/xml/etree/ElementTree.py", "pylib-android/xml/etree/__init__.py", - "pylib-android/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc", - "pylib-android/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc", - "pylib-android/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc", - "pylib-android/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc", + "pylib-android/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc", + "pylib-android/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc", + "pylib-android/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc", + "pylib-android/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc", "pylib-android/xml/etree/cElementTree.py", "pylib-android/xml/parsers/__init__.py", - "pylib-android/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc", + "pylib-android/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc", "pylib-android/xml/parsers/expat.py", "pylib-android/xml/sax/__init__.py", - "pylib-android/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc", - "pylib-android/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc", - "pylib-android/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc", - "pylib-android/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc", - "pylib-android/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc", + "pylib-android/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc", + "pylib-android/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc", + "pylib-android/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc", + "pylib-android/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc", + "pylib-android/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc", "pylib-android/xml/sax/_exceptions.py", "pylib-android/xml/sax/expatreader.py", "pylib-android/xml/sax/handler.py", "pylib-android/xml/sax/saxutils.py", "pylib-android/xml/sax/xmlreader.py", "pylib-android/xmlrpc/__init__.py", - "pylib-android/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc", - "pylib-android/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc", + "pylib-android/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc", + "pylib-android/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc", "pylib-android/xmlrpc/client.py", "pylib-android/xmlrpc/server.py", "pylib-android/zipapp.py", "pylib-android/zipfile.py", "pylib-android/zipimport.py", + "pylib-android/zoneinfo/__init__.py", + "pylib-android/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc", + "pylib-android/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc", + "pylib-android/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc", + "pylib-android/zoneinfo/_common.py", + "pylib-android/zoneinfo/_tzpath.py", + "pylib-android/zoneinfo/_zoneinfo.py", "pylib-apple/__future__.py", "pylib-apple/__phello__.foo.py", - "pylib-apple/__pycache__/__future__.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/__phello__.foo.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_bootlocale.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_collections_abc.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_compat_pickle.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_compression.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_dummy_thread.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_markupbase.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_osx_support.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_py_abc.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_pydecimal.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_pyio.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_strptime.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_threading_local.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_weakrefset.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/abc.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/aifc.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/antigravity.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/argparse.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/ast.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/asynchat.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/asyncore.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/base64.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/bdb.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/binhex.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/bisect.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/bz2.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/cProfile.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/calendar.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/cgi.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/cgitb.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/chunk.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/cmd.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/code.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/codecs.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/codeop.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/colorsys.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/compileall.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/configparser.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/contextlib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/contextvars.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/copy.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/copyreg.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/crypt.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/csv.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/dataclasses.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/datetime.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/decimal.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/difflib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/dis.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/doctest.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/dummy_threading.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/enum.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/filecmp.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/fileinput.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/fnmatch.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/formatter.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/fractions.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/ftplib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/functools.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/genericpath.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/getopt.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/getpass.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/gettext.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/glob.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/gzip.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/hashlib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/heapq.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/hmac.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/imghdr.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/imp.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/inspect.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/io.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/ipaddress.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/keyword.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/linecache.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/locale.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/lzma.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/mailbox.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/mailcap.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/mimetypes.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/modulefinder.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/netrc.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/nntplib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/ntpath.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/nturl2path.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/numbers.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/opcode.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/operator.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/optparse.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/os.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pathlib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pdb.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pickle.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pickletools.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pipes.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pkgutil.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/platform.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/plistlib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/poplib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/posixpath.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pprint.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/profile.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pstats.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pty.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/py_compile.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pyclbr.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pydoc.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/queue.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/quopri.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/random.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/re.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/reprlib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/rlcompleter.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/runpy.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/sched.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/secrets.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/selectors.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/shelve.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/shlex.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/shutil.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/signal.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/site.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/smtpd.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/smtplib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/sndhdr.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/socket.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/socketserver.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/sre_compile.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/sre_constants.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/sre_parse.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/ssl.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/stat.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/statistics.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/string.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/stringprep.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/struct.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/subprocess.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/sunau.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/symbol.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/symtable.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/sysconfig.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/tabnanny.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/tarfile.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/telnetlib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/tempfile.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/textwrap.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/this.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/threading.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/timeit.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/token.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/tokenize.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/trace.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/traceback.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/tracemalloc.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/tty.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/types.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/typing.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/uu.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/uuid.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/warnings.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/wave.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/weakref.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/webbrowser.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/xdrlib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/zipapp.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/zipfile.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/zipimport.cpython-38.opt-1.pyc", + "pylib-apple/__pycache__/__future__.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/__phello__.foo.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_aix_support.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_bootlocale.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_collections_abc.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_compat_pickle.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_compression.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_markupbase.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_osx_support.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_py_abc.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_pydecimal.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_pyio.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_strptime.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_threading_local.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_weakrefset.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/abc.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/aifc.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/antigravity.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/argparse.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/ast.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/asynchat.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/asyncore.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/base64.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/bdb.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/binhex.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/bisect.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/bz2.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/cProfile.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/calendar.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/cgi.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/cgitb.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/chunk.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/cmd.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/code.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/codecs.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/codeop.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/colorsys.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/compileall.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/configparser.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/contextlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/contextvars.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/copy.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/copyreg.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/crypt.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/csv.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/dataclasses.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/datetime.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/decimal.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/difflib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/dis.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/doctest.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/enum.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/filecmp.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/fileinput.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/fnmatch.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/formatter.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/fractions.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/ftplib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/functools.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/genericpath.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/getopt.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/getpass.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/gettext.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/glob.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/graphlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/gzip.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/hashlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/heapq.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/hmac.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/imghdr.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/imp.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/inspect.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/io.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/ipaddress.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/keyword.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/linecache.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/locale.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/lzma.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/mailbox.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/mailcap.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/mimetypes.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/modulefinder.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/netrc.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/nntplib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/ntpath.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/nturl2path.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/numbers.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/opcode.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/operator.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/optparse.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/os.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pathlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pdb.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pickle.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pickletools.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pipes.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pkgutil.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/platform.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/plistlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/poplib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/posixpath.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pprint.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/profile.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pstats.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pty.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/py_compile.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pyclbr.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pydoc.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/queue.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/quopri.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/random.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/re.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/reprlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/rlcompleter.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/runpy.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/sched.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/secrets.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/selectors.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/shelve.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/shlex.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/shutil.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/signal.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/site.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/smtpd.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/smtplib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/sndhdr.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/socket.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/socketserver.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/sre_compile.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/sre_constants.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/sre_parse.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/ssl.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/stat.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/statistics.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/string.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/stringprep.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/struct.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/subprocess.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/sunau.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/symbol.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/symtable.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/sysconfig.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/tabnanny.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/tarfile.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/telnetlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/tempfile.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/textwrap.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/this.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/threading.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/timeit.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/token.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/tokenize.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/trace.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/traceback.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/tracemalloc.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/tty.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/types.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/typing.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/uu.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/uuid.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/warnings.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/wave.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/weakref.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/webbrowser.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/xdrlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/zipapp.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/zipfile.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/zipimport.cpython-39.opt-1.pyc", + "pylib-apple/_aix_support.py", "pylib-apple/_bootlocale.py", + "pylib-apple/_bootsubprocess.py", "pylib-apple/_collections_abc.py", "pylib-apple/_compat_pickle.py", "pylib-apple/_compression.py", - "pylib-apple/_dummy_thread.py", "pylib-apple/_markupbase.py", "pylib-apple/_osx_support.py", "pylib-apple/_py_abc.py", @@ -3634,35 +3648,36 @@ "pylib-apple/asynchat.py", "pylib-apple/asyncio/__init__.py", "pylib-apple/asyncio/__main__.py", - "pylib-apple/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/constants.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/events.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/futures.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/locks.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/log.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/queues.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/runners.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/streams.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/transports.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/constants.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/events.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/futures.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/locks.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/log.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/queues.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/runners.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/streams.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/threads.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/transports.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc", "pylib-apple/asyncio/base_events.py", "pylib-apple/asyncio/base_futures.py", "pylib-apple/asyncio/base_subprocess.py", @@ -3685,6 +3700,7 @@ "pylib-apple/asyncio/streams.py", "pylib-apple/asyncio/subprocess.py", "pylib-apple/asyncio/tasks.py", + "pylib-apple/asyncio/threads.py", "pylib-apple/asyncio/transports.py", "pylib-apple/asyncio/trsock.py", "pylib-apple/asyncio/unix_events.py", @@ -3706,18 +3722,18 @@ "pylib-apple/codecs.py", "pylib-apple/codeop.py", "pylib-apple/collections/__init__.py", - "pylib-apple/collections/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/collections/__pycache__/abc.cpython-38.opt-1.pyc", + "pylib-apple/collections/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/collections/__pycache__/abc.cpython-39.opt-1.pyc", "pylib-apple/collections/abc.py", "pylib-apple/colorsys.py", "pylib-apple/compileall.py", "pylib-apple/concurrent/__init__.py", - "pylib-apple/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc", + "pylib-apple/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc", "pylib-apple/concurrent/futures/__init__.py", - "pylib-apple/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc", - "pylib-apple/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc", - "pylib-apple/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc", + "pylib-apple/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc", + "pylib-apple/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc", + "pylib-apple/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc", "pylib-apple/concurrent/futures/_base.py", "pylib-apple/concurrent/futures/process.py", "pylib-apple/concurrent/futures/thread.py", @@ -3729,29 +3745,29 @@ "pylib-apple/crypt.py", "pylib-apple/csv.py", "pylib-apple/ctypes/__init__.py", - "pylib-apple/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc", - "pylib-apple/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc", - "pylib-apple/ctypes/__pycache__/util.cpython-38.opt-1.pyc", - "pylib-apple/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc", + "pylib-apple/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc", + "pylib-apple/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc", + "pylib-apple/ctypes/__pycache__/util.cpython-39.opt-1.pyc", + "pylib-apple/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc", "pylib-apple/ctypes/_aix.py", "pylib-apple/ctypes/_endian.py", "pylib-apple/ctypes/macholib/__init__.py", - "pylib-apple/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc", - "pylib-apple/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc", - "pylib-apple/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc", + "pylib-apple/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc", + "pylib-apple/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc", + "pylib-apple/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc", "pylib-apple/ctypes/macholib/dyld.py", "pylib-apple/ctypes/macholib/dylib.py", "pylib-apple/ctypes/macholib/framework.py", "pylib-apple/ctypes/util.py", "pylib-apple/ctypes/wintypes.py", "pylib-apple/curses/__init__.py", - "pylib-apple/curses/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/curses/__pycache__/ascii.cpython-38.opt-1.pyc", - "pylib-apple/curses/__pycache__/has_key.cpython-38.opt-1.pyc", - "pylib-apple/curses/__pycache__/panel.cpython-38.opt-1.pyc", - "pylib-apple/curses/__pycache__/textpad.cpython-38.opt-1.pyc", + "pylib-apple/curses/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/curses/__pycache__/ascii.cpython-39.opt-1.pyc", + "pylib-apple/curses/__pycache__/has_key.cpython-39.opt-1.pyc", + "pylib-apple/curses/__pycache__/panel.cpython-39.opt-1.pyc", + "pylib-apple/curses/__pycache__/textpad.cpython-39.opt-1.pyc", "pylib-apple/curses/ascii.py", "pylib-apple/curses/has_key.py", "pylib-apple/curses/panel.py", @@ -3762,28 +3778,27 @@ "pylib-apple/difflib.py", "pylib-apple/dis.py", "pylib-apple/doctest.py", - "pylib-apple/dummy_threading.py", "pylib-apple/email/__init__.py", - "pylib-apple/email/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/_policybase.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/base64mime.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/charset.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/contentmanager.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/encoders.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/errors.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/feedparser.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/generator.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/header.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/headerregistry.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/iterators.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/message.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/parser.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/policy.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/quoprimime.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/utils.cpython-38.opt-1.pyc", + "pylib-apple/email/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/_policybase.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/base64mime.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/charset.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/contentmanager.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/encoders.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/errors.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/feedparser.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/generator.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/header.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/headerregistry.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/iterators.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/message.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/parser.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/policy.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/quoprimime.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/utils.cpython-39.opt-1.pyc", "pylib-apple/email/_encoded_words.py", "pylib-apple/email/_header_value_parser.py", "pylib-apple/email/_parseaddr.py", @@ -3800,15 +3815,15 @@ "pylib-apple/email/iterators.py", "pylib-apple/email/message.py", "pylib-apple/email/mime/__init__.py", - "pylib-apple/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/application.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/audio.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/base.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/image.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/message.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/text.cpython-38.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/application.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/audio.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/base.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/image.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/message.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/text.cpython-39.opt-1.pyc", "pylib-apple/email/mime/application.py", "pylib-apple/email/mime/audio.py", "pylib-apple/email/mime/base.py", @@ -3822,129 +3837,128 @@ "pylib-apple/email/quoprimime.py", "pylib-apple/email/utils.py", "pylib-apple/encodings/__init__.py", - "pylib-apple/encodings/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/aliases.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/ascii.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/big5.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/charmap.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp037.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp273.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp424.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp437.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp500.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp720.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp737.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp775.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp850.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp852.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp855.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp856.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp857.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp858.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp860.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp861.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp862.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp863.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp864.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp865.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp866.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp869.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp874.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp875.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp932.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp949.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp950.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/gbk.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/hz.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/idna.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/johab.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/oem.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/palmos.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/punycode.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/undefined.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc", + "pylib-apple/encodings/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/aliases.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/ascii.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/big5.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/charmap.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp037.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp273.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp424.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp437.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp500.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp720.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp737.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp775.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp850.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp852.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp855.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp856.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp857.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp858.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp860.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp861.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp862.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp863.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp864.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp865.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp866.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp869.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp874.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp875.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp932.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp949.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp950.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/gbk.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/hz.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/idna.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/johab.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/oem.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/palmos.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/punycode.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/undefined.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc", "pylib-apple/encodings/aliases.py", "pylib-apple/encodings/ascii.py", "pylib-apple/encodings/base64_codec.py", @@ -4032,7 +4046,6 @@ "pylib-apple/encodings/kz1048.py", "pylib-apple/encodings/latin_1.py", "pylib-apple/encodings/mac_arabic.py", - "pylib-apple/encodings/mac_centeuro.py", "pylib-apple/encodings/mac_croatian.py", "pylib-apple/encodings/mac_cyrillic.py", "pylib-apple/encodings/mac_farsi.py", @@ -4080,22 +4093,23 @@ "pylib-apple/getpass.py", "pylib-apple/gettext.py", "pylib-apple/glob.py", + "pylib-apple/graphlib.py", "pylib-apple/gzip.py", "pylib-apple/hashlib.py", "pylib-apple/heapq.py", "pylib-apple/hmac.py", "pylib-apple/html/__init__.py", - "pylib-apple/html/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/html/__pycache__/entities.cpython-38.opt-1.pyc", - "pylib-apple/html/__pycache__/parser.cpython-38.opt-1.pyc", + "pylib-apple/html/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/html/__pycache__/entities.cpython-39.opt-1.pyc", + "pylib-apple/html/__pycache__/parser.cpython-39.opt-1.pyc", "pylib-apple/html/entities.py", "pylib-apple/html/parser.py", "pylib-apple/http/__init__.py", - "pylib-apple/http/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/http/__pycache__/client.cpython-38.opt-1.pyc", - "pylib-apple/http/__pycache__/cookiejar.cpython-38.opt-1.pyc", - "pylib-apple/http/__pycache__/cookies.cpython-38.opt-1.pyc", - "pylib-apple/http/__pycache__/server.cpython-38.opt-1.pyc", + "pylib-apple/http/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/http/__pycache__/client.cpython-39.opt-1.pyc", + "pylib-apple/http/__pycache__/cookiejar.cpython-39.opt-1.pyc", + "pylib-apple/http/__pycache__/cookies.cpython-39.opt-1.pyc", + "pylib-apple/http/__pycache__/server.cpython-39.opt-1.pyc", "pylib-apple/http/client.py", "pylib-apple/http/cookiejar.py", "pylib-apple/http/cookies.py", @@ -4103,16 +4117,18 @@ "pylib-apple/imghdr.py", "pylib-apple/imp.py", "pylib-apple/importlib/__init__.py", - "pylib-apple/importlib/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc", - "pylib-apple/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc", - "pylib-apple/importlib/__pycache__/abc.cpython-38.opt-1.pyc", - "pylib-apple/importlib/__pycache__/machinery.cpython-38.opt-1.pyc", - "pylib-apple/importlib/__pycache__/metadata.cpython-38.opt-1.pyc", - "pylib-apple/importlib/__pycache__/resources.cpython-38.opt-1.pyc", - "pylib-apple/importlib/__pycache__/util.cpython-38.opt-1.pyc", + "pylib-apple/importlib/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/_common.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/abc.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/machinery.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/metadata.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/resources.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/util.cpython-39.opt-1.pyc", "pylib-apple/importlib/_bootstrap.py", "pylib-apple/importlib/_bootstrap_external.py", + "pylib-apple/importlib/_common.py", "pylib-apple/importlib/abc.py", "pylib-apple/importlib/machinery.py", "pylib-apple/importlib/metadata.py", @@ -4122,11 +4138,11 @@ "pylib-apple/io.py", "pylib-apple/ipaddress.py", "pylib-apple/json/__init__.py", - "pylib-apple/json/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/json/__pycache__/decoder.cpython-38.opt-1.pyc", - "pylib-apple/json/__pycache__/encoder.cpython-38.opt-1.pyc", - "pylib-apple/json/__pycache__/scanner.cpython-38.opt-1.pyc", - "pylib-apple/json/__pycache__/tool.cpython-38.opt-1.pyc", + "pylib-apple/json/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/json/__pycache__/decoder.cpython-39.opt-1.pyc", + "pylib-apple/json/__pycache__/encoder.cpython-39.opt-1.pyc", + "pylib-apple/json/__pycache__/scanner.cpython-39.opt-1.pyc", + "pylib-apple/json/__pycache__/tool.cpython-39.opt-1.pyc", "pylib-apple/json/decoder.py", "pylib-apple/json/encoder.py", "pylib-apple/json/scanner.py", @@ -4135,9 +4151,9 @@ "pylib-apple/linecache.py", "pylib-apple/locale.py", "pylib-apple/logging/__init__.py", - "pylib-apple/logging/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/logging/__pycache__/config.cpython-38.opt-1.pyc", - "pylib-apple/logging/__pycache__/handlers.cpython-38.opt-1.pyc", + "pylib-apple/logging/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/logging/__pycache__/config.cpython-39.opt-1.pyc", + "pylib-apple/logging/__pycache__/handlers.cpython-39.opt-1.pyc", "pylib-apple/logging/config.py", "pylib-apple/logging/handlers.py", "pylib-apple/lzma.py", @@ -4145,6 +4161,14 @@ "pylib-apple/mailcap.py", "pylib-apple/mimetypes.py", "pylib-apple/modulefinder.py", + "pylib-apple/msilib/__init__.py", + "pylib-apple/msilib/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/msilib/__pycache__/schema.cpython-39.opt-1.pyc", + "pylib-apple/msilib/__pycache__/sequence.cpython-39.opt-1.pyc", + "pylib-apple/msilib/__pycache__/text.cpython-39.opt-1.pyc", + "pylib-apple/msilib/schema.py", + "pylib-apple/msilib/sequence.py", + "pylib-apple/msilib/text.py", "pylib-apple/netrc.py", "pylib-apple/nntplib.py", "pylib-apple/ntpath.py", @@ -4192,9 +4216,9 @@ "pylib-apple/socket.py", "pylib-apple/socketserver.py", "pylib-apple/sqlite3/__init__.py", - "pylib-apple/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc", - "pylib-apple/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc", + "pylib-apple/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc", + "pylib-apple/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc", "pylib-apple/sqlite3/dbapi2.py", "pylib-apple/sqlite3/dump.py", "pylib-apple/sre_compile.py", @@ -4228,12 +4252,12 @@ "pylib-apple/types.py", "pylib-apple/typing.py", "pylib-apple/urllib/__init__.py", - "pylib-apple/urllib/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/urllib/__pycache__/error.cpython-38.opt-1.pyc", - "pylib-apple/urllib/__pycache__/parse.cpython-38.opt-1.pyc", - "pylib-apple/urllib/__pycache__/request.cpython-38.opt-1.pyc", - "pylib-apple/urllib/__pycache__/response.cpython-38.opt-1.pyc", - "pylib-apple/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc", + "pylib-apple/urllib/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/urllib/__pycache__/error.cpython-39.opt-1.pyc", + "pylib-apple/urllib/__pycache__/parse.cpython-39.opt-1.pyc", + "pylib-apple/urllib/__pycache__/request.cpython-39.opt-1.pyc", + "pylib-apple/urllib/__pycache__/response.cpython-39.opt-1.pyc", + "pylib-apple/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc", "pylib-apple/urllib/error.py", "pylib-apple/urllib/parse.py", "pylib-apple/urllib/request.py", @@ -4247,17 +4271,17 @@ "pylib-apple/webbrowser.py", "pylib-apple/xdrlib.py", "pylib-apple/xml/__init__.py", - "pylib-apple/xml/__pycache__/__init__.cpython-38.opt-1.pyc", + "pylib-apple/xml/__pycache__/__init__.cpython-39.opt-1.pyc", "pylib-apple/xml/dom/NodeFilter.py", "pylib-apple/xml/dom/__init__.py", - "pylib-apple/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc", - "pylib-apple/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc", - "pylib-apple/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc", - "pylib-apple/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc", - "pylib-apple/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc", - "pylib-apple/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc", - "pylib-apple/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc", "pylib-apple/xml/dom/domreg.py", "pylib-apple/xml/dom/expatbuilder.py", "pylib-apple/xml/dom/minicompat.py", @@ -4268,37 +4292,45 @@ "pylib-apple/xml/etree/ElementPath.py", "pylib-apple/xml/etree/ElementTree.py", "pylib-apple/xml/etree/__init__.py", - "pylib-apple/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc", - "pylib-apple/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc", - "pylib-apple/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc", - "pylib-apple/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc", + "pylib-apple/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc", + "pylib-apple/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc", + "pylib-apple/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc", + "pylib-apple/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc", "pylib-apple/xml/etree/cElementTree.py", "pylib-apple/xml/parsers/__init__.py", - "pylib-apple/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc", + "pylib-apple/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc", "pylib-apple/xml/parsers/expat.py", "pylib-apple/xml/sax/__init__.py", - "pylib-apple/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc", - "pylib-apple/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc", - "pylib-apple/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc", - "pylib-apple/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc", - "pylib-apple/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc", + "pylib-apple/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc", + "pylib-apple/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc", + "pylib-apple/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc", + "pylib-apple/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc", + "pylib-apple/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc", "pylib-apple/xml/sax/_exceptions.py", "pylib-apple/xml/sax/expatreader.py", "pylib-apple/xml/sax/handler.py", "pylib-apple/xml/sax/saxutils.py", "pylib-apple/xml/sax/xmlreader.py", "pylib-apple/xmlrpc/__init__.py", - "pylib-apple/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc", - "pylib-apple/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc", + "pylib-apple/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc", + "pylib-apple/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc", "pylib-apple/xmlrpc/client.py", "pylib-apple/xmlrpc/server.py", "pylib-apple/zipapp.py", "pylib-apple/zipfile.py", "pylib-apple/zipimport.py", + "pylib-apple/zoneinfo/__init__.py", + "pylib-apple/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc", + "pylib-apple/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc", + "pylib-apple/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc", + "pylib-apple/zoneinfo/_common.py", + "pylib-apple/zoneinfo/_tzpath.py", + "pylib-apple/zoneinfo/_zoneinfo.py", "windows/Win32/DLLs/_asyncio.pyd", "windows/Win32/DLLs/_asyncio_d.pyd", "windows/Win32/DLLs/_bz2.pyd", @@ -4337,11 +4369,17 @@ "windows/Win32/DLLs/_testconsole_d.pyd", "windows/Win32/DLLs/_testimportmultiple.pyd", "windows/Win32/DLLs/_testimportmultiple_d.pyd", + "windows/Win32/DLLs/_testinternalcapi.pyd", + "windows/Win32/DLLs/_testinternalcapi_d.pyd", "windows/Win32/DLLs/_testmultiphase.pyd", "windows/Win32/DLLs/_testmultiphase_d.pyd", "windows/Win32/DLLs/_tkinter.pyd", "windows/Win32/DLLs/_tkinter_d.lib", "windows/Win32/DLLs/_tkinter_d.pyd", + "windows/Win32/DLLs/_uuid.pyd", + "windows/Win32/DLLs/_uuid_d.pyd", + "windows/Win32/DLLs/_zoneinfo.pyd", + "windows/Win32/DLLs/_zoneinfo_d.pyd", "windows/Win32/DLLs/libcrypto-1_1.dll", "windows/Win32/DLLs/libffi-7.dll", "windows/Win32/DLLs/libssl-1_1.dll", @@ -4361,180 +4399,182 @@ "windows/Win32/DLLs/winsound_d.pyd", "windows/Win32/Lib/__future__.py", "windows/Win32/Lib/__phello__.foo.py", - "windows/Win32/Lib/__pycache__/__future__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/__phello__.foo.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_bootlocale.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_collections_abc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_compat_pickle.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_compression.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_dummy_thread.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_markupbase.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_osx_support.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_py_abc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_pydecimal.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_pyio.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_strptime.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_threading_local.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_weakrefset.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/abc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/aifc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/antigravity.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/argparse.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/ast.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/asynchat.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/asyncore.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/base64.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/bdb.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/binhex.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/bisect.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/bz2.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/cProfile.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/calendar.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/cgi.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/cgitb.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/chunk.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/cmd.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/code.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/codecs.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/codeop.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/colorsys.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/compileall.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/configparser.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/contextlib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/contextvars.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/copy.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/copyreg.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/crypt.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/csv.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/dataclasses.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/datetime.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/decimal.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/difflib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/dis.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/doctest.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/dummy_threading.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/enum.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/filecmp.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/fileinput.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/fnmatch.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/formatter.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/fractions.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/ftplib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/functools.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/genericpath.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/getopt.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/getpass.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/gettext.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/glob.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/gzip.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/hashlib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/heapq.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/hmac.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/imghdr.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/imp.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/inspect.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/io.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/ipaddress.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/keyword.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/linecache.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/locale.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/lzma.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/mailbox.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/mailcap.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/mimetypes.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/modulefinder.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/netrc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/nntplib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/ntpath.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/nturl2path.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/numbers.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/opcode.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/operator.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/optparse.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/os.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pathlib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pdb.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pickle.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pickletools.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pipes.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pkgutil.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/platform.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/plistlib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/poplib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/posixpath.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pprint.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/profile.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pstats.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pty.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/py_compile.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pyclbr.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pydoc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/queue.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/quopri.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/random.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/re.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/reprlib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/rlcompleter.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/runpy.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/sched.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/secrets.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/selectors.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/shelve.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/shlex.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/shutil.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/signal.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/site.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/smtpd.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/smtplib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/sndhdr.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/socket.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/socketserver.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/sre_compile.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/sre_constants.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/sre_parse.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/ssl.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/stat.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/statistics.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/string.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/stringprep.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/struct.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/subprocess.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/sunau.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/symbol.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/symtable.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/sysconfig.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/tabnanny.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/tarfile.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/telnetlib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/tempfile.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/textwrap.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/this.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/threading.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/timeit.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/token.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/tokenize.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/trace.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/traceback.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/tracemalloc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/tty.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/types.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/typing.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/uu.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/uuid.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/warnings.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/wave.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/weakref.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/webbrowser.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/xdrlib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/zipapp.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/zipfile.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/zipimport.cpython-38.opt-1.pyc", + "windows/Win32/Lib/__pycache__/__future__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/__phello__.foo.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_aix_support.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_bootlocale.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_collections_abc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_compat_pickle.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_compression.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_markupbase.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_osx_support.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_py_abc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_pydecimal.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_pyio.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_strptime.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_threading_local.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_weakrefset.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/abc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/aifc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/antigravity.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/argparse.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/ast.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/asynchat.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/asyncore.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/base64.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/bdb.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/binhex.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/bisect.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/bz2.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/cProfile.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/calendar.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/cgi.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/cgitb.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/chunk.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/cmd.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/code.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/codecs.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/codeop.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/colorsys.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/compileall.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/configparser.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/contextlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/contextvars.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/copy.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/copyreg.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/crypt.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/csv.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/dataclasses.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/datetime.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/decimal.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/difflib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/dis.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/doctest.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/enum.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/filecmp.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/fileinput.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/fnmatch.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/formatter.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/fractions.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/ftplib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/functools.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/genericpath.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/getopt.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/getpass.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/gettext.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/glob.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/graphlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/gzip.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/hashlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/heapq.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/hmac.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/imghdr.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/imp.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/inspect.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/io.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/ipaddress.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/keyword.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/linecache.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/locale.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/lzma.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/mailbox.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/mailcap.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/mimetypes.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/modulefinder.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/netrc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/nntplib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/ntpath.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/nturl2path.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/numbers.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/opcode.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/operator.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/optparse.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/os.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pathlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pdb.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pickle.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pickletools.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pipes.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pkgutil.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/platform.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/plistlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/poplib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/posixpath.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pprint.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/profile.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pstats.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pty.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/py_compile.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pyclbr.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pydoc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/queue.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/quopri.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/random.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/re.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/reprlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/rlcompleter.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/runpy.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/sched.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/secrets.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/selectors.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/shelve.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/shlex.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/shutil.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/signal.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/site.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/smtpd.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/smtplib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/sndhdr.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/socket.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/socketserver.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/sre_compile.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/sre_constants.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/sre_parse.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/ssl.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/stat.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/statistics.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/string.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/stringprep.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/struct.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/subprocess.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/sunau.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/symbol.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/symtable.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/sysconfig.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/tabnanny.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/tarfile.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/telnetlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/tempfile.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/textwrap.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/this.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/threading.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/timeit.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/token.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/tokenize.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/trace.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/traceback.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/tracemalloc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/tty.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/types.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/typing.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/uu.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/uuid.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/warnings.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/wave.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/weakref.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/webbrowser.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/xdrlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/zipapp.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/zipfile.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/zipimport.cpython-39.opt-1.pyc", + "windows/Win32/Lib/_aix_support.py", "windows/Win32/Lib/_bootlocale.py", + "windows/Win32/Lib/_bootsubprocess.py", "windows/Win32/Lib/_collections_abc.py", "windows/Win32/Lib/_compat_pickle.py", "windows/Win32/Lib/_compression.py", - "windows/Win32/Lib/_dummy_thread.py", "windows/Win32/Lib/_markupbase.py", "windows/Win32/Lib/_osx_support.py", "windows/Win32/Lib/_py_abc.py", @@ -4552,35 +4592,36 @@ "windows/Win32/Lib/asynchat.py", "windows/Win32/Lib/asyncio/__init__.py", "windows/Win32/Lib/asyncio/__main__.py", - "windows/Win32/Lib/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/constants.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/events.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/futures.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/locks.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/log.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/queues.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/runners.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/streams.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/transports.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/constants.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/events.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/futures.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/locks.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/log.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/queues.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/runners.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/streams.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/threads.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/transports.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc", "windows/Win32/Lib/asyncio/base_events.py", "windows/Win32/Lib/asyncio/base_futures.py", "windows/Win32/Lib/asyncio/base_subprocess.py", @@ -4603,6 +4644,7 @@ "windows/Win32/Lib/asyncio/streams.py", "windows/Win32/Lib/asyncio/subprocess.py", "windows/Win32/Lib/asyncio/tasks.py", + "windows/Win32/Lib/asyncio/threads.py", "windows/Win32/Lib/asyncio/transports.py", "windows/Win32/Lib/asyncio/trsock.py", "windows/Win32/Lib/asyncio/unix_events.py", @@ -4624,18 +4666,18 @@ "windows/Win32/Lib/codecs.py", "windows/Win32/Lib/codeop.py", "windows/Win32/Lib/collections/__init__.py", - "windows/Win32/Lib/collections/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/collections/__pycache__/abc.cpython-38.opt-1.pyc", + "windows/Win32/Lib/collections/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/collections/__pycache__/abc.cpython-39.opt-1.pyc", "windows/Win32/Lib/collections/abc.py", "windows/Win32/Lib/colorsys.py", "windows/Win32/Lib/compileall.py", "windows/Win32/Lib/concurrent/__init__.py", - "windows/Win32/Lib/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc", + "windows/Win32/Lib/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc", "windows/Win32/Lib/concurrent/futures/__init__.py", - "windows/Win32/Lib/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc", - "windows/Win32/Lib/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc", - "windows/Win32/Lib/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc", + "windows/Win32/Lib/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc", + "windows/Win32/Lib/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc", + "windows/Win32/Lib/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc", "windows/Win32/Lib/concurrent/futures/_base.py", "windows/Win32/Lib/concurrent/futures/process.py", "windows/Win32/Lib/concurrent/futures/thread.py", @@ -4647,19 +4689,19 @@ "windows/Win32/Lib/crypt.py", "windows/Win32/Lib/csv.py", "windows/Win32/Lib/ctypes/__init__.py", - "windows/Win32/Lib/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc", - "windows/Win32/Lib/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc", - "windows/Win32/Lib/ctypes/__pycache__/util.cpython-38.opt-1.pyc", - "windows/Win32/Lib/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc", + "windows/Win32/Lib/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc", + "windows/Win32/Lib/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc", + "windows/Win32/Lib/ctypes/__pycache__/util.cpython-39.opt-1.pyc", + "windows/Win32/Lib/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc", "windows/Win32/Lib/ctypes/_aix.py", "windows/Win32/Lib/ctypes/_endian.py", "windows/Win32/Lib/ctypes/macholib/README.ctypes", "windows/Win32/Lib/ctypes/macholib/__init__.py", - "windows/Win32/Lib/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc", - "windows/Win32/Lib/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc", + "windows/Win32/Lib/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc", + "windows/Win32/Lib/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc", "windows/Win32/Lib/ctypes/macholib/dyld.py", "windows/Win32/Lib/ctypes/macholib/dylib.py", "windows/Win32/Lib/ctypes/macholib/fetch_macholib", @@ -4668,11 +4710,11 @@ "windows/Win32/Lib/ctypes/util.py", "windows/Win32/Lib/ctypes/wintypes.py", "windows/Win32/Lib/curses/__init__.py", - "windows/Win32/Lib/curses/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/curses/__pycache__/ascii.cpython-38.opt-1.pyc", - "windows/Win32/Lib/curses/__pycache__/has_key.cpython-38.opt-1.pyc", - "windows/Win32/Lib/curses/__pycache__/panel.cpython-38.opt-1.pyc", - "windows/Win32/Lib/curses/__pycache__/textpad.cpython-38.opt-1.pyc", + "windows/Win32/Lib/curses/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/curses/__pycache__/ascii.cpython-39.opt-1.pyc", + "windows/Win32/Lib/curses/__pycache__/has_key.cpython-39.opt-1.pyc", + "windows/Win32/Lib/curses/__pycache__/panel.cpython-39.opt-1.pyc", + "windows/Win32/Lib/curses/__pycache__/textpad.cpython-39.opt-1.pyc", "windows/Win32/Lib/curses/ascii.py", "windows/Win32/Lib/curses/has_key.py", "windows/Win32/Lib/curses/panel.py", @@ -4683,28 +4725,27 @@ "windows/Win32/Lib/difflib.py", "windows/Win32/Lib/dis.py", "windows/Win32/Lib/doctest.py", - "windows/Win32/Lib/dummy_threading.py", "windows/Win32/Lib/email/__init__.py", - "windows/Win32/Lib/email/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/_policybase.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/base64mime.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/charset.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/contentmanager.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/encoders.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/errors.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/feedparser.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/generator.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/header.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/headerregistry.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/iterators.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/message.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/parser.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/policy.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/quoprimime.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/utils.cpython-38.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/_policybase.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/base64mime.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/charset.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/contentmanager.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/encoders.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/errors.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/feedparser.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/generator.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/header.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/headerregistry.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/iterators.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/message.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/parser.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/policy.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/quoprimime.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/utils.cpython-39.opt-1.pyc", "windows/Win32/Lib/email/_encoded_words.py", "windows/Win32/Lib/email/_header_value_parser.py", "windows/Win32/Lib/email/_parseaddr.py", @@ -4722,15 +4763,15 @@ "windows/Win32/Lib/email/iterators.py", "windows/Win32/Lib/email/message.py", "windows/Win32/Lib/email/mime/__init__.py", - "windows/Win32/Lib/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/application.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/audio.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/base.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/image.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/message.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/text.cpython-38.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/application.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/audio.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/base.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/image.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/message.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/text.cpython-39.opt-1.pyc", "windows/Win32/Lib/email/mime/application.py", "windows/Win32/Lib/email/mime/audio.py", "windows/Win32/Lib/email/mime/base.py", @@ -4744,129 +4785,128 @@ "windows/Win32/Lib/email/quoprimime.py", "windows/Win32/Lib/email/utils.py", "windows/Win32/Lib/encodings/__init__.py", - "windows/Win32/Lib/encodings/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/aliases.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/ascii.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/big5.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/charmap.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp037.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp273.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp424.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp437.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp500.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp720.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp737.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp775.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp850.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp852.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp855.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp856.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp857.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp858.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp860.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp861.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp862.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp863.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp864.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp865.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp866.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp869.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp874.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp875.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp932.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp949.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp950.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/gbk.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/hz.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/idna.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/johab.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/oem.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/palmos.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/punycode.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/undefined.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/aliases.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/ascii.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/big5.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/charmap.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp037.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp273.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp424.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp437.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp500.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp720.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp737.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp775.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp850.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp852.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp855.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp856.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp857.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp858.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp860.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp861.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp862.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp863.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp864.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp865.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp866.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp869.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp874.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp875.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp932.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp949.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp950.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/gbk.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/hz.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/idna.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/johab.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/oem.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/palmos.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/punycode.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/undefined.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc", "windows/Win32/Lib/encodings/aliases.py", "windows/Win32/Lib/encodings/ascii.py", "windows/Win32/Lib/encodings/base64_codec.py", @@ -4954,7 +4994,6 @@ "windows/Win32/Lib/encodings/kz1048.py", "windows/Win32/Lib/encodings/latin_1.py", "windows/Win32/Lib/encodings/mac_arabic.py", - "windows/Win32/Lib/encodings/mac_centeuro.py", "windows/Win32/Lib/encodings/mac_croatian.py", "windows/Win32/Lib/encodings/mac_cyrillic.py", "windows/Win32/Lib/encodings/mac_farsi.py", @@ -5002,22 +5041,23 @@ "windows/Win32/Lib/getpass.py", "windows/Win32/Lib/gettext.py", "windows/Win32/Lib/glob.py", + "windows/Win32/Lib/graphlib.py", "windows/Win32/Lib/gzip.py", "windows/Win32/Lib/hashlib.py", "windows/Win32/Lib/heapq.py", "windows/Win32/Lib/hmac.py", "windows/Win32/Lib/html/__init__.py", - "windows/Win32/Lib/html/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/html/__pycache__/entities.cpython-38.opt-1.pyc", - "windows/Win32/Lib/html/__pycache__/parser.cpython-38.opt-1.pyc", + "windows/Win32/Lib/html/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/html/__pycache__/entities.cpython-39.opt-1.pyc", + "windows/Win32/Lib/html/__pycache__/parser.cpython-39.opt-1.pyc", "windows/Win32/Lib/html/entities.py", "windows/Win32/Lib/html/parser.py", "windows/Win32/Lib/http/__init__.py", - "windows/Win32/Lib/http/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/http/__pycache__/client.cpython-38.opt-1.pyc", - "windows/Win32/Lib/http/__pycache__/cookiejar.cpython-38.opt-1.pyc", - "windows/Win32/Lib/http/__pycache__/cookies.cpython-38.opt-1.pyc", - "windows/Win32/Lib/http/__pycache__/server.cpython-38.opt-1.pyc", + "windows/Win32/Lib/http/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/http/__pycache__/client.cpython-39.opt-1.pyc", + "windows/Win32/Lib/http/__pycache__/cookiejar.cpython-39.opt-1.pyc", + "windows/Win32/Lib/http/__pycache__/cookies.cpython-39.opt-1.pyc", + "windows/Win32/Lib/http/__pycache__/server.cpython-39.opt-1.pyc", "windows/Win32/Lib/http/client.py", "windows/Win32/Lib/http/cookiejar.py", "windows/Win32/Lib/http/cookies.py", @@ -5025,16 +5065,18 @@ "windows/Win32/Lib/imghdr.py", "windows/Win32/Lib/imp.py", "windows/Win32/Lib/importlib/__init__.py", - "windows/Win32/Lib/importlib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc", - "windows/Win32/Lib/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc", - "windows/Win32/Lib/importlib/__pycache__/abc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/importlib/__pycache__/machinery.cpython-38.opt-1.pyc", - "windows/Win32/Lib/importlib/__pycache__/metadata.cpython-38.opt-1.pyc", - "windows/Win32/Lib/importlib/__pycache__/resources.cpython-38.opt-1.pyc", - "windows/Win32/Lib/importlib/__pycache__/util.cpython-38.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/_common.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/abc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/machinery.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/metadata.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/resources.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/util.cpython-39.opt-1.pyc", "windows/Win32/Lib/importlib/_bootstrap.py", "windows/Win32/Lib/importlib/_bootstrap_external.py", + "windows/Win32/Lib/importlib/_common.py", "windows/Win32/Lib/importlib/abc.py", "windows/Win32/Lib/importlib/machinery.py", "windows/Win32/Lib/importlib/metadata.py", @@ -5044,11 +5086,11 @@ "windows/Win32/Lib/io.py", "windows/Win32/Lib/ipaddress.py", "windows/Win32/Lib/json/__init__.py", - "windows/Win32/Lib/json/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/json/__pycache__/decoder.cpython-38.opt-1.pyc", - "windows/Win32/Lib/json/__pycache__/encoder.cpython-38.opt-1.pyc", - "windows/Win32/Lib/json/__pycache__/scanner.cpython-38.opt-1.pyc", - "windows/Win32/Lib/json/__pycache__/tool.cpython-38.opt-1.pyc", + "windows/Win32/Lib/json/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/json/__pycache__/decoder.cpython-39.opt-1.pyc", + "windows/Win32/Lib/json/__pycache__/encoder.cpython-39.opt-1.pyc", + "windows/Win32/Lib/json/__pycache__/scanner.cpython-39.opt-1.pyc", + "windows/Win32/Lib/json/__pycache__/tool.cpython-39.opt-1.pyc", "windows/Win32/Lib/json/decoder.py", "windows/Win32/Lib/json/encoder.py", "windows/Win32/Lib/json/scanner.py", @@ -5057,9 +5099,9 @@ "windows/Win32/Lib/linecache.py", "windows/Win32/Lib/locale.py", "windows/Win32/Lib/logging/__init__.py", - "windows/Win32/Lib/logging/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/logging/__pycache__/config.cpython-38.opt-1.pyc", - "windows/Win32/Lib/logging/__pycache__/handlers.cpython-38.opt-1.pyc", + "windows/Win32/Lib/logging/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/logging/__pycache__/config.cpython-39.opt-1.pyc", + "windows/Win32/Lib/logging/__pycache__/handlers.cpython-39.opt-1.pyc", "windows/Win32/Lib/logging/config.py", "windows/Win32/Lib/logging/handlers.py", "windows/Win32/Lib/lzma.py", @@ -5068,10 +5110,10 @@ "windows/Win32/Lib/mimetypes.py", "windows/Win32/Lib/modulefinder.py", "windows/Win32/Lib/msilib/__init__.py", - "windows/Win32/Lib/msilib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/msilib/__pycache__/schema.cpython-38.opt-1.pyc", - "windows/Win32/Lib/msilib/__pycache__/sequence.cpython-38.opt-1.pyc", - "windows/Win32/Lib/msilib/__pycache__/text.cpython-38.opt-1.pyc", + "windows/Win32/Lib/msilib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/msilib/__pycache__/schema.cpython-39.opt-1.pyc", + "windows/Win32/Lib/msilib/__pycache__/sequence.cpython-39.opt-1.pyc", + "windows/Win32/Lib/msilib/__pycache__/text.cpython-39.opt-1.pyc", "windows/Win32/Lib/msilib/schema.py", "windows/Win32/Lib/msilib/sequence.py", "windows/Win32/Lib/msilib/text.py", @@ -5122,9 +5164,9 @@ "windows/Win32/Lib/socket.py", "windows/Win32/Lib/socketserver.py", "windows/Win32/Lib/sqlite3/__init__.py", - "windows/Win32/Lib/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc", - "windows/Win32/Lib/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc", + "windows/Win32/Lib/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc", + "windows/Win32/Lib/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc", "windows/Win32/Lib/sqlite3/dbapi2.py", "windows/Win32/Lib/sqlite3/dump.py", "windows/Win32/Lib/sre_compile.py", @@ -5158,12 +5200,12 @@ "windows/Win32/Lib/types.py", "windows/Win32/Lib/typing.py", "windows/Win32/Lib/urllib/__init__.py", - "windows/Win32/Lib/urllib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/urllib/__pycache__/error.cpython-38.opt-1.pyc", - "windows/Win32/Lib/urllib/__pycache__/parse.cpython-38.opt-1.pyc", - "windows/Win32/Lib/urllib/__pycache__/request.cpython-38.opt-1.pyc", - "windows/Win32/Lib/urllib/__pycache__/response.cpython-38.opt-1.pyc", - "windows/Win32/Lib/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc", + "windows/Win32/Lib/urllib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/urllib/__pycache__/error.cpython-39.opt-1.pyc", + "windows/Win32/Lib/urllib/__pycache__/parse.cpython-39.opt-1.pyc", + "windows/Win32/Lib/urllib/__pycache__/request.cpython-39.opt-1.pyc", + "windows/Win32/Lib/urllib/__pycache__/response.cpython-39.opt-1.pyc", + "windows/Win32/Lib/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc", "windows/Win32/Lib/urllib/error.py", "windows/Win32/Lib/urllib/parse.py", "windows/Win32/Lib/urllib/request.py", @@ -5177,17 +5219,17 @@ "windows/Win32/Lib/webbrowser.py", "windows/Win32/Lib/xdrlib.py", "windows/Win32/Lib/xml/__init__.py", - "windows/Win32/Lib/xml/__pycache__/__init__.cpython-38.opt-1.pyc", + "windows/Win32/Lib/xml/__pycache__/__init__.cpython-39.opt-1.pyc", "windows/Win32/Lib/xml/dom/NodeFilter.py", "windows/Win32/Lib/xml/dom/__init__.py", - "windows/Win32/Lib/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc", "windows/Win32/Lib/xml/dom/domreg.py", "windows/Win32/Lib/xml/dom/expatbuilder.py", "windows/Win32/Lib/xml/dom/minicompat.py", @@ -5198,37 +5240,45 @@ "windows/Win32/Lib/xml/etree/ElementPath.py", "windows/Win32/Lib/xml/etree/ElementTree.py", "windows/Win32/Lib/xml/etree/__init__.py", - "windows/Win32/Lib/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc", + "windows/Win32/Lib/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc", "windows/Win32/Lib/xml/etree/cElementTree.py", "windows/Win32/Lib/xml/parsers/__init__.py", - "windows/Win32/Lib/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc", + "windows/Win32/Lib/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc", "windows/Win32/Lib/xml/parsers/expat.py", "windows/Win32/Lib/xml/sax/__init__.py", - "windows/Win32/Lib/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc", + "windows/Win32/Lib/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc", "windows/Win32/Lib/xml/sax/_exceptions.py", "windows/Win32/Lib/xml/sax/expatreader.py", "windows/Win32/Lib/xml/sax/handler.py", "windows/Win32/Lib/xml/sax/saxutils.py", "windows/Win32/Lib/xml/sax/xmlreader.py", "windows/Win32/Lib/xmlrpc/__init__.py", - "windows/Win32/Lib/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc", + "windows/Win32/Lib/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc", "windows/Win32/Lib/xmlrpc/client.py", "windows/Win32/Lib/xmlrpc/server.py", "windows/Win32/Lib/zipapp.py", "windows/Win32/Lib/zipfile.py", "windows/Win32/Lib/zipimport.py", + "windows/Win32/Lib/zoneinfo/__init__.py", + "windows/Win32/Lib/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc", + "windows/Win32/Lib/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc", + "windows/Win32/Lib/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc", + "windows/Win32/Lib/zoneinfo/_common.py", + "windows/Win32/Lib/zoneinfo/_tzpath.py", + "windows/Win32/Lib/zoneinfo/_zoneinfo.py", "windows/Win32/OpenAL32.dll", "windows/Win32/SDL2.dll", "windows/Win32/libvorbis.dll", @@ -5236,8 +5286,8 @@ "windows/Win32/msvcp140d.dll", "windows/Win32/ogg.dll", "windows/Win32/python.exe", - "windows/Win32/python38.dll", - "windows/Win32/python38_d.dll", + "windows/Win32/python39.dll", + "windows/Win32/python39_d.dll", "windows/Win32/python_d.exe", "windows/Win32/pythonw.exe", "windows/Win32/pythonw_d.exe", @@ -5282,11 +5332,17 @@ "windows/x64/DLLs/_testconsole_d.pyd", "windows/x64/DLLs/_testimportmultiple.pyd", "windows/x64/DLLs/_testimportmultiple_d.pyd", + "windows/x64/DLLs/_testinternalcapi.pyd", + "windows/x64/DLLs/_testinternalcapi_d.pyd", "windows/x64/DLLs/_testmultiphase.pyd", "windows/x64/DLLs/_testmultiphase_d.pyd", "windows/x64/DLLs/_tkinter.pyd", "windows/x64/DLLs/_tkinter_d.lib", "windows/x64/DLLs/_tkinter_d.pyd", + "windows/x64/DLLs/_uuid.pyd", + "windows/x64/DLLs/_uuid_d.pyd", + "windows/x64/DLLs/_zoneinfo.pyd", + "windows/x64/DLLs/_zoneinfo_d.pyd", "windows/x64/DLLs/libcrypto-1_1.dll", "windows/x64/DLLs/libffi-7.dll", "windows/x64/DLLs/libssl-1_1.dll", @@ -5306,180 +5362,182 @@ "windows/x64/DLLs/winsound_d.pyd", "windows/x64/Lib/__future__.py", "windows/x64/Lib/__phello__.foo.py", - "windows/x64/Lib/__pycache__/__future__.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/__phello__.foo.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_bootlocale.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_collections_abc.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_compat_pickle.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_compression.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_dummy_thread.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_markupbase.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_osx_support.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_py_abc.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_pydecimal.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_pyio.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_strptime.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_threading_local.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_weakrefset.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/abc.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/aifc.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/antigravity.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/argparse.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/ast.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/asynchat.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/asyncore.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/base64.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/bdb.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/binhex.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/bisect.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/bz2.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/cProfile.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/calendar.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/cgi.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/cgitb.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/chunk.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/cmd.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/code.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/codecs.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/codeop.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/colorsys.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/compileall.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/configparser.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/contextlib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/contextvars.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/copy.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/copyreg.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/crypt.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/csv.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/dataclasses.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/datetime.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/decimal.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/difflib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/dis.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/doctest.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/dummy_threading.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/enum.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/filecmp.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/fileinput.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/fnmatch.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/formatter.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/fractions.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/ftplib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/functools.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/genericpath.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/getopt.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/getpass.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/gettext.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/glob.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/gzip.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/hashlib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/heapq.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/hmac.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/imghdr.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/imp.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/inspect.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/io.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/ipaddress.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/keyword.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/linecache.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/locale.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/lzma.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/mailbox.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/mailcap.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/mimetypes.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/modulefinder.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/netrc.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/nntplib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/ntpath.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/nturl2path.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/numbers.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/opcode.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/operator.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/optparse.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/os.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pathlib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pdb.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pickle.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pickletools.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pipes.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pkgutil.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/platform.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/plistlib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/poplib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/posixpath.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pprint.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/profile.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pstats.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pty.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/py_compile.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pyclbr.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pydoc.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/queue.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/quopri.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/random.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/re.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/reprlib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/rlcompleter.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/runpy.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/sched.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/secrets.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/selectors.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/shelve.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/shlex.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/shutil.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/signal.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/site.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/smtpd.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/smtplib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/sndhdr.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/socket.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/socketserver.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/sre_compile.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/sre_constants.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/sre_parse.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/ssl.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/stat.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/statistics.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/string.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/stringprep.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/struct.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/subprocess.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/sunau.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/symbol.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/symtable.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/sysconfig.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/tabnanny.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/tarfile.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/telnetlib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/tempfile.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/textwrap.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/this.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/threading.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/timeit.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/token.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/tokenize.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/trace.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/traceback.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/tracemalloc.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/tty.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/types.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/typing.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/uu.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/uuid.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/warnings.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/wave.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/weakref.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/webbrowser.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/xdrlib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/zipapp.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/zipfile.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/zipimport.cpython-38.opt-1.pyc", + "windows/x64/Lib/__pycache__/__future__.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/__phello__.foo.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_aix_support.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_bootlocale.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_collections_abc.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_compat_pickle.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_compression.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_markupbase.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_osx_support.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_py_abc.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_pydecimal.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_pyio.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_strptime.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_threading_local.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_weakrefset.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/abc.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/aifc.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/antigravity.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/argparse.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/ast.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/asynchat.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/asyncore.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/base64.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/bdb.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/binhex.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/bisect.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/bz2.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/cProfile.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/calendar.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/cgi.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/cgitb.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/chunk.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/cmd.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/code.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/codecs.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/codeop.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/colorsys.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/compileall.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/configparser.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/contextlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/contextvars.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/copy.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/copyreg.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/crypt.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/csv.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/dataclasses.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/datetime.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/decimal.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/difflib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/dis.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/doctest.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/enum.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/filecmp.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/fileinput.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/fnmatch.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/formatter.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/fractions.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/ftplib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/functools.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/genericpath.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/getopt.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/getpass.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/gettext.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/glob.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/graphlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/gzip.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/hashlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/heapq.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/hmac.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/imghdr.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/imp.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/inspect.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/io.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/ipaddress.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/keyword.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/linecache.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/locale.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/lzma.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/mailbox.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/mailcap.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/mimetypes.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/modulefinder.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/netrc.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/nntplib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/ntpath.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/nturl2path.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/numbers.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/opcode.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/operator.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/optparse.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/os.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pathlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pdb.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pickle.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pickletools.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pipes.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pkgutil.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/platform.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/plistlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/poplib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/posixpath.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pprint.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/profile.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pstats.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pty.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/py_compile.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pyclbr.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pydoc.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/queue.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/quopri.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/random.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/re.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/reprlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/rlcompleter.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/runpy.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/sched.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/secrets.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/selectors.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/shelve.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/shlex.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/shutil.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/signal.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/site.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/smtpd.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/smtplib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/sndhdr.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/socket.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/socketserver.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/sre_compile.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/sre_constants.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/sre_parse.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/ssl.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/stat.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/statistics.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/string.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/stringprep.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/struct.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/subprocess.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/sunau.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/symbol.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/symtable.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/sysconfig.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/tabnanny.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/tarfile.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/telnetlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/tempfile.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/textwrap.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/this.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/threading.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/timeit.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/token.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/tokenize.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/trace.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/traceback.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/tracemalloc.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/tty.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/types.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/typing.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/uu.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/uuid.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/warnings.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/wave.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/weakref.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/webbrowser.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/xdrlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/zipapp.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/zipfile.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/zipimport.cpython-39.opt-1.pyc", + "windows/x64/Lib/_aix_support.py", "windows/x64/Lib/_bootlocale.py", + "windows/x64/Lib/_bootsubprocess.py", "windows/x64/Lib/_collections_abc.py", "windows/x64/Lib/_compat_pickle.py", "windows/x64/Lib/_compression.py", - "windows/x64/Lib/_dummy_thread.py", "windows/x64/Lib/_markupbase.py", "windows/x64/Lib/_osx_support.py", "windows/x64/Lib/_py_abc.py", @@ -5497,35 +5555,36 @@ "windows/x64/Lib/asynchat.py", "windows/x64/Lib/asyncio/__init__.py", "windows/x64/Lib/asyncio/__main__.py", - "windows/x64/Lib/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/constants.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/events.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/futures.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/locks.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/log.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/queues.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/runners.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/streams.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/transports.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/constants.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/events.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/futures.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/locks.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/log.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/queues.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/runners.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/streams.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/threads.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/transports.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc", "windows/x64/Lib/asyncio/base_events.py", "windows/x64/Lib/asyncio/base_futures.py", "windows/x64/Lib/asyncio/base_subprocess.py", @@ -5548,6 +5607,7 @@ "windows/x64/Lib/asyncio/streams.py", "windows/x64/Lib/asyncio/subprocess.py", "windows/x64/Lib/asyncio/tasks.py", + "windows/x64/Lib/asyncio/threads.py", "windows/x64/Lib/asyncio/transports.py", "windows/x64/Lib/asyncio/trsock.py", "windows/x64/Lib/asyncio/unix_events.py", @@ -5569,18 +5629,18 @@ "windows/x64/Lib/codecs.py", "windows/x64/Lib/codeop.py", "windows/x64/Lib/collections/__init__.py", - "windows/x64/Lib/collections/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/collections/__pycache__/abc.cpython-38.opt-1.pyc", + "windows/x64/Lib/collections/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/collections/__pycache__/abc.cpython-39.opt-1.pyc", "windows/x64/Lib/collections/abc.py", "windows/x64/Lib/colorsys.py", "windows/x64/Lib/compileall.py", "windows/x64/Lib/concurrent/__init__.py", - "windows/x64/Lib/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc", + "windows/x64/Lib/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc", "windows/x64/Lib/concurrent/futures/__init__.py", - "windows/x64/Lib/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc", - "windows/x64/Lib/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc", - "windows/x64/Lib/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc", + "windows/x64/Lib/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc", + "windows/x64/Lib/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc", + "windows/x64/Lib/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc", "windows/x64/Lib/concurrent/futures/_base.py", "windows/x64/Lib/concurrent/futures/process.py", "windows/x64/Lib/concurrent/futures/thread.py", @@ -5592,19 +5652,19 @@ "windows/x64/Lib/crypt.py", "windows/x64/Lib/csv.py", "windows/x64/Lib/ctypes/__init__.py", - "windows/x64/Lib/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc", - "windows/x64/Lib/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc", - "windows/x64/Lib/ctypes/__pycache__/util.cpython-38.opt-1.pyc", - "windows/x64/Lib/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc", + "windows/x64/Lib/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc", + "windows/x64/Lib/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc", + "windows/x64/Lib/ctypes/__pycache__/util.cpython-39.opt-1.pyc", + "windows/x64/Lib/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc", "windows/x64/Lib/ctypes/_aix.py", "windows/x64/Lib/ctypes/_endian.py", "windows/x64/Lib/ctypes/macholib/README.ctypes", "windows/x64/Lib/ctypes/macholib/__init__.py", - "windows/x64/Lib/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc", - "windows/x64/Lib/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc", - "windows/x64/Lib/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc", + "windows/x64/Lib/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc", + "windows/x64/Lib/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc", + "windows/x64/Lib/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc", "windows/x64/Lib/ctypes/macholib/dyld.py", "windows/x64/Lib/ctypes/macholib/dylib.py", "windows/x64/Lib/ctypes/macholib/fetch_macholib", @@ -5613,11 +5673,11 @@ "windows/x64/Lib/ctypes/util.py", "windows/x64/Lib/ctypes/wintypes.py", "windows/x64/Lib/curses/__init__.py", - "windows/x64/Lib/curses/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/curses/__pycache__/ascii.cpython-38.opt-1.pyc", - "windows/x64/Lib/curses/__pycache__/has_key.cpython-38.opt-1.pyc", - "windows/x64/Lib/curses/__pycache__/panel.cpython-38.opt-1.pyc", - "windows/x64/Lib/curses/__pycache__/textpad.cpython-38.opt-1.pyc", + "windows/x64/Lib/curses/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/curses/__pycache__/ascii.cpython-39.opt-1.pyc", + "windows/x64/Lib/curses/__pycache__/has_key.cpython-39.opt-1.pyc", + "windows/x64/Lib/curses/__pycache__/panel.cpython-39.opt-1.pyc", + "windows/x64/Lib/curses/__pycache__/textpad.cpython-39.opt-1.pyc", "windows/x64/Lib/curses/ascii.py", "windows/x64/Lib/curses/has_key.py", "windows/x64/Lib/curses/panel.py", @@ -5628,28 +5688,27 @@ "windows/x64/Lib/difflib.py", "windows/x64/Lib/dis.py", "windows/x64/Lib/doctest.py", - "windows/x64/Lib/dummy_threading.py", "windows/x64/Lib/email/__init__.py", - "windows/x64/Lib/email/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/_policybase.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/base64mime.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/charset.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/contentmanager.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/encoders.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/errors.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/feedparser.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/generator.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/header.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/headerregistry.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/iterators.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/message.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/parser.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/policy.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/quoprimime.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/utils.cpython-38.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/_policybase.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/base64mime.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/charset.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/contentmanager.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/encoders.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/errors.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/feedparser.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/generator.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/header.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/headerregistry.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/iterators.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/message.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/parser.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/policy.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/quoprimime.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/utils.cpython-39.opt-1.pyc", "windows/x64/Lib/email/_encoded_words.py", "windows/x64/Lib/email/_header_value_parser.py", "windows/x64/Lib/email/_parseaddr.py", @@ -5667,15 +5726,15 @@ "windows/x64/Lib/email/iterators.py", "windows/x64/Lib/email/message.py", "windows/x64/Lib/email/mime/__init__.py", - "windows/x64/Lib/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/application.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/audio.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/base.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/image.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/message.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/text.cpython-38.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/application.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/audio.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/base.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/image.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/message.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/text.cpython-39.opt-1.pyc", "windows/x64/Lib/email/mime/application.py", "windows/x64/Lib/email/mime/audio.py", "windows/x64/Lib/email/mime/base.py", @@ -5689,129 +5748,128 @@ "windows/x64/Lib/email/quoprimime.py", "windows/x64/Lib/email/utils.py", "windows/x64/Lib/encodings/__init__.py", - "windows/x64/Lib/encodings/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/aliases.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/ascii.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/big5.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/charmap.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp037.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp273.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp424.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp437.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp500.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp720.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp737.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp775.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp850.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp852.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp855.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp856.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp857.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp858.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp860.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp861.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp862.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp863.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp864.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp865.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp866.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp869.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp874.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp875.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp932.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp949.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp950.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/gbk.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/hz.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/idna.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/johab.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/oem.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/palmos.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/punycode.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/undefined.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/aliases.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/ascii.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/big5.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/charmap.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp037.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp273.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp424.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp437.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp500.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp720.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp737.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp775.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp850.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp852.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp855.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp856.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp857.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp858.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp860.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp861.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp862.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp863.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp864.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp865.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp866.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp869.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp874.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp875.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp932.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp949.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp950.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/gbk.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/hz.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/idna.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/johab.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/oem.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/palmos.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/punycode.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/undefined.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc", "windows/x64/Lib/encodings/aliases.py", "windows/x64/Lib/encodings/ascii.py", "windows/x64/Lib/encodings/base64_codec.py", @@ -5899,7 +5957,6 @@ "windows/x64/Lib/encodings/kz1048.py", "windows/x64/Lib/encodings/latin_1.py", "windows/x64/Lib/encodings/mac_arabic.py", - "windows/x64/Lib/encodings/mac_centeuro.py", "windows/x64/Lib/encodings/mac_croatian.py", "windows/x64/Lib/encodings/mac_cyrillic.py", "windows/x64/Lib/encodings/mac_farsi.py", @@ -5947,22 +6004,23 @@ "windows/x64/Lib/getpass.py", "windows/x64/Lib/gettext.py", "windows/x64/Lib/glob.py", + "windows/x64/Lib/graphlib.py", "windows/x64/Lib/gzip.py", "windows/x64/Lib/hashlib.py", "windows/x64/Lib/heapq.py", "windows/x64/Lib/hmac.py", "windows/x64/Lib/html/__init__.py", - "windows/x64/Lib/html/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/html/__pycache__/entities.cpython-38.opt-1.pyc", - "windows/x64/Lib/html/__pycache__/parser.cpython-38.opt-1.pyc", + "windows/x64/Lib/html/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/html/__pycache__/entities.cpython-39.opt-1.pyc", + "windows/x64/Lib/html/__pycache__/parser.cpython-39.opt-1.pyc", "windows/x64/Lib/html/entities.py", "windows/x64/Lib/html/parser.py", "windows/x64/Lib/http/__init__.py", - "windows/x64/Lib/http/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/http/__pycache__/client.cpython-38.opt-1.pyc", - "windows/x64/Lib/http/__pycache__/cookiejar.cpython-38.opt-1.pyc", - "windows/x64/Lib/http/__pycache__/cookies.cpython-38.opt-1.pyc", - "windows/x64/Lib/http/__pycache__/server.cpython-38.opt-1.pyc", + "windows/x64/Lib/http/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/http/__pycache__/client.cpython-39.opt-1.pyc", + "windows/x64/Lib/http/__pycache__/cookiejar.cpython-39.opt-1.pyc", + "windows/x64/Lib/http/__pycache__/cookies.cpython-39.opt-1.pyc", + "windows/x64/Lib/http/__pycache__/server.cpython-39.opt-1.pyc", "windows/x64/Lib/http/client.py", "windows/x64/Lib/http/cookiejar.py", "windows/x64/Lib/http/cookies.py", @@ -5970,16 +6028,18 @@ "windows/x64/Lib/imghdr.py", "windows/x64/Lib/imp.py", "windows/x64/Lib/importlib/__init__.py", - "windows/x64/Lib/importlib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc", - "windows/x64/Lib/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc", - "windows/x64/Lib/importlib/__pycache__/abc.cpython-38.opt-1.pyc", - "windows/x64/Lib/importlib/__pycache__/machinery.cpython-38.opt-1.pyc", - "windows/x64/Lib/importlib/__pycache__/metadata.cpython-38.opt-1.pyc", - "windows/x64/Lib/importlib/__pycache__/resources.cpython-38.opt-1.pyc", - "windows/x64/Lib/importlib/__pycache__/util.cpython-38.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/_common.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/abc.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/machinery.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/metadata.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/resources.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/util.cpython-39.opt-1.pyc", "windows/x64/Lib/importlib/_bootstrap.py", "windows/x64/Lib/importlib/_bootstrap_external.py", + "windows/x64/Lib/importlib/_common.py", "windows/x64/Lib/importlib/abc.py", "windows/x64/Lib/importlib/machinery.py", "windows/x64/Lib/importlib/metadata.py", @@ -5989,11 +6049,11 @@ "windows/x64/Lib/io.py", "windows/x64/Lib/ipaddress.py", "windows/x64/Lib/json/__init__.py", - "windows/x64/Lib/json/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/json/__pycache__/decoder.cpython-38.opt-1.pyc", - "windows/x64/Lib/json/__pycache__/encoder.cpython-38.opt-1.pyc", - "windows/x64/Lib/json/__pycache__/scanner.cpython-38.opt-1.pyc", - "windows/x64/Lib/json/__pycache__/tool.cpython-38.opt-1.pyc", + "windows/x64/Lib/json/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/json/__pycache__/decoder.cpython-39.opt-1.pyc", + "windows/x64/Lib/json/__pycache__/encoder.cpython-39.opt-1.pyc", + "windows/x64/Lib/json/__pycache__/scanner.cpython-39.opt-1.pyc", + "windows/x64/Lib/json/__pycache__/tool.cpython-39.opt-1.pyc", "windows/x64/Lib/json/decoder.py", "windows/x64/Lib/json/encoder.py", "windows/x64/Lib/json/scanner.py", @@ -6002,9 +6062,9 @@ "windows/x64/Lib/linecache.py", "windows/x64/Lib/locale.py", "windows/x64/Lib/logging/__init__.py", - "windows/x64/Lib/logging/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/logging/__pycache__/config.cpython-38.opt-1.pyc", - "windows/x64/Lib/logging/__pycache__/handlers.cpython-38.opt-1.pyc", + "windows/x64/Lib/logging/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/logging/__pycache__/config.cpython-39.opt-1.pyc", + "windows/x64/Lib/logging/__pycache__/handlers.cpython-39.opt-1.pyc", "windows/x64/Lib/logging/config.py", "windows/x64/Lib/logging/handlers.py", "windows/x64/Lib/lzma.py", @@ -6013,10 +6073,10 @@ "windows/x64/Lib/mimetypes.py", "windows/x64/Lib/modulefinder.py", "windows/x64/Lib/msilib/__init__.py", - "windows/x64/Lib/msilib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/msilib/__pycache__/schema.cpython-38.opt-1.pyc", - "windows/x64/Lib/msilib/__pycache__/sequence.cpython-38.opt-1.pyc", - "windows/x64/Lib/msilib/__pycache__/text.cpython-38.opt-1.pyc", + "windows/x64/Lib/msilib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/msilib/__pycache__/schema.cpython-39.opt-1.pyc", + "windows/x64/Lib/msilib/__pycache__/sequence.cpython-39.opt-1.pyc", + "windows/x64/Lib/msilib/__pycache__/text.cpython-39.opt-1.pyc", "windows/x64/Lib/msilib/schema.py", "windows/x64/Lib/msilib/sequence.py", "windows/x64/Lib/msilib/text.py", @@ -6067,9 +6127,9 @@ "windows/x64/Lib/socket.py", "windows/x64/Lib/socketserver.py", "windows/x64/Lib/sqlite3/__init__.py", - "windows/x64/Lib/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc", - "windows/x64/Lib/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc", + "windows/x64/Lib/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc", + "windows/x64/Lib/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc", "windows/x64/Lib/sqlite3/dbapi2.py", "windows/x64/Lib/sqlite3/dump.py", "windows/x64/Lib/sre_compile.py", @@ -6103,12 +6163,12 @@ "windows/x64/Lib/types.py", "windows/x64/Lib/typing.py", "windows/x64/Lib/urllib/__init__.py", - "windows/x64/Lib/urllib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/urllib/__pycache__/error.cpython-38.opt-1.pyc", - "windows/x64/Lib/urllib/__pycache__/parse.cpython-38.opt-1.pyc", - "windows/x64/Lib/urllib/__pycache__/request.cpython-38.opt-1.pyc", - "windows/x64/Lib/urllib/__pycache__/response.cpython-38.opt-1.pyc", - "windows/x64/Lib/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc", + "windows/x64/Lib/urllib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/urllib/__pycache__/error.cpython-39.opt-1.pyc", + "windows/x64/Lib/urllib/__pycache__/parse.cpython-39.opt-1.pyc", + "windows/x64/Lib/urllib/__pycache__/request.cpython-39.opt-1.pyc", + "windows/x64/Lib/urllib/__pycache__/response.cpython-39.opt-1.pyc", + "windows/x64/Lib/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc", "windows/x64/Lib/urllib/error.py", "windows/x64/Lib/urllib/parse.py", "windows/x64/Lib/urllib/request.py", @@ -6122,17 +6182,17 @@ "windows/x64/Lib/webbrowser.py", "windows/x64/Lib/xdrlib.py", "windows/x64/Lib/xml/__init__.py", - "windows/x64/Lib/xml/__pycache__/__init__.cpython-38.opt-1.pyc", + "windows/x64/Lib/xml/__pycache__/__init__.cpython-39.opt-1.pyc", "windows/x64/Lib/xml/dom/NodeFilter.py", "windows/x64/Lib/xml/dom/__init__.py", - "windows/x64/Lib/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc", "windows/x64/Lib/xml/dom/domreg.py", "windows/x64/Lib/xml/dom/expatbuilder.py", "windows/x64/Lib/xml/dom/minicompat.py", @@ -6143,37 +6203,45 @@ "windows/x64/Lib/xml/etree/ElementPath.py", "windows/x64/Lib/xml/etree/ElementTree.py", "windows/x64/Lib/xml/etree/__init__.py", - "windows/x64/Lib/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc", + "windows/x64/Lib/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc", "windows/x64/Lib/xml/etree/cElementTree.py", "windows/x64/Lib/xml/parsers/__init__.py", - "windows/x64/Lib/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc", + "windows/x64/Lib/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc", "windows/x64/Lib/xml/parsers/expat.py", "windows/x64/Lib/xml/sax/__init__.py", - "windows/x64/Lib/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc", + "windows/x64/Lib/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc", "windows/x64/Lib/xml/sax/_exceptions.py", "windows/x64/Lib/xml/sax/expatreader.py", "windows/x64/Lib/xml/sax/handler.py", "windows/x64/Lib/xml/sax/saxutils.py", "windows/x64/Lib/xml/sax/xmlreader.py", "windows/x64/Lib/xmlrpc/__init__.py", - "windows/x64/Lib/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc", - "windows/x64/Lib/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc", + "windows/x64/Lib/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc", + "windows/x64/Lib/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc", "windows/x64/Lib/xmlrpc/client.py", "windows/x64/Lib/xmlrpc/server.py", "windows/x64/Lib/zipapp.py", "windows/x64/Lib/zipfile.py", "windows/x64/Lib/zipimport.py", + "windows/x64/Lib/zoneinfo/__init__.py", + "windows/x64/Lib/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc", + "windows/x64/Lib/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc", + "windows/x64/Lib/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc", + "windows/x64/Lib/zoneinfo/_common.py", + "windows/x64/Lib/zoneinfo/_tzpath.py", + "windows/x64/Lib/zoneinfo/_zoneinfo.py", "windows/x64/OpenAL32.dll", "windows/x64/SDL2.dll", "windows/x64/libvorbis.dll", @@ -6181,8 +6249,8 @@ "windows/x64/msvcp140d.dll", "windows/x64/ogg.dll", "windows/x64/python.exe", - "windows/x64/python38.dll", - "windows/x64/python38_d.dll", + "windows/x64/python39.dll", + "windows/x64/python39_d.dll", "windows/x64/python_d.exe", "windows/x64/pythonw.exe", "windows/x64/pythonw_d.exe", diff --git a/assets/.asset_manifest_public.json b/assets/.asset_manifest_public.json index 056941fb..2fe16361 100644 --- a/assets/.asset_manifest_public.json +++ b/assets/.asset_manifest_public.json @@ -1,68 +1,68 @@ [ "ba_data/python/ba/__init__.py", - "ba_data/python/ba/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_account.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_achievement.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_activity.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_activitytypes.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_actor.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_ads.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_analytics.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_app.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_appconfig.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_appdelegate.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_appmode.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_apputils.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_assetmanager.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_asyncio.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_benchmark.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_campaign.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_collision.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_coopgame.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_coopsession.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_dependency.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_dualteamsession.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_error.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_freeforallsession.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_gameactivity.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_gameresults.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_gameutils.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_general.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_hooks.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_input.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_keyboard.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_language.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_level.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_lobby.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_map.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_math.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_messages.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_meta.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_multiteamsession.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_music.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_net.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_nodeactor.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_player.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_playlist.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_plugin.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_powerup.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_profile.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_score.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_servermode.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_session.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_settings.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_stats.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_store.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_team.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_teamgame.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_tips.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_tournament.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_ui.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/deprecated.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/internal.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/macmusicapp.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/modutils.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/osmusic.cpython-38.opt-1.pyc", + "ba_data/python/ba/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_account.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_achievement.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_activity.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_activitytypes.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_actor.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_ads.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_analytics.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_app.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_appconfig.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_appdelegate.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_appmode.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_apputils.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_assetmanager.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_asyncio.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_benchmark.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_campaign.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_collision.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_coopgame.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_coopsession.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_dependency.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_dualteamsession.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_error.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_freeforallsession.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_gameactivity.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_gameresults.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_gameutils.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_general.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_hooks.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_input.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_keyboard.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_language.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_level.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_lobby.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_map.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_math.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_messages.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_meta.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_multiteamsession.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_music.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_net.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_nodeactor.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_player.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_playlist.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_plugin.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_powerup.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_profile.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_score.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_servermode.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_session.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_settings.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_stats.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_store.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_team.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_teamgame.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_tips.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_tournament.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_ui.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/deprecated.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/internal.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/macmusicapp.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/modutils.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/osmusic.cpython-39.opt-1.pyc", "ba_data/python/ba/_account.py", "ba_data/python/ba/_achievement.py", "ba_data/python/ba/_activity.py", @@ -91,8 +91,8 @@ "ba_data/python/ba/_gameutils.py", "ba_data/python/ba/_general.py", "ba_data/python/ba/_generated/__init__.py", - "ba_data/python/ba/_generated/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/ba/_generated/__pycache__/enums.cpython-38.opt-1.pyc", + "ba_data/python/ba/_generated/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/ba/_generated/__pycache__/enums.cpython-39.opt-1.pyc", "ba_data/python/ba/_generated/enums.py", "ba_data/python/ba/_hooks.py", "ba_data/python/ba/_input.py", @@ -130,33 +130,33 @@ "ba_data/python/ba/modutils.py", "ba_data/python/ba/osmusic.py", "ba_data/python/ba/ui/__init__.py", - "ba_data/python/ba/ui/__pycache__/__init__.cpython-38.opt-1.pyc", + "ba_data/python/ba/ui/__pycache__/__init__.cpython-39.opt-1.pyc", "ba_data/python/bacommon/__init__.py", - "ba_data/python/bacommon/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bacommon/__pycache__/assets.cpython-38.opt-1.pyc", - "ba_data/python/bacommon/__pycache__/net.cpython-38.opt-1.pyc", - "ba_data/python/bacommon/__pycache__/servermanager.cpython-38.opt-1.pyc", + "ba_data/python/bacommon/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bacommon/__pycache__/assets.cpython-39.opt-1.pyc", + "ba_data/python/bacommon/__pycache__/net.cpython-39.opt-1.pyc", + "ba_data/python/bacommon/__pycache__/servermanager.cpython-39.opt-1.pyc", "ba_data/python/bacommon/assets.py", "ba_data/python/bacommon/net.py", "ba_data/python/bacommon/servermanager.py", "ba_data/python/bastd/__init__.py", - "ba_data/python/bastd/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/__pycache__/appdelegate.cpython-38.opt-1.pyc", - "ba_data/python/bastd/__pycache__/gameutils.cpython-38.opt-1.pyc", - "ba_data/python/bastd/__pycache__/mainmenu.cpython-38.opt-1.pyc", - "ba_data/python/bastd/__pycache__/maps.cpython-38.opt-1.pyc", - "ba_data/python/bastd/__pycache__/stdmap.cpython-38.opt-1.pyc", - "ba_data/python/bastd/__pycache__/tutorial.cpython-38.opt-1.pyc", + "ba_data/python/bastd/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/__pycache__/appdelegate.cpython-39.opt-1.pyc", + "ba_data/python/bastd/__pycache__/gameutils.cpython-39.opt-1.pyc", + "ba_data/python/bastd/__pycache__/mainmenu.cpython-39.opt-1.pyc", + "ba_data/python/bastd/__pycache__/maps.cpython-39.opt-1.pyc", + "ba_data/python/bastd/__pycache__/stdmap.cpython-39.opt-1.pyc", + "ba_data/python/bastd/__pycache__/tutorial.cpython-39.opt-1.pyc", "ba_data/python/bastd/activity/__init__.py", - "ba_data/python/bastd/activity/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/coopscore.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/drawscore.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-38.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/coopscore.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/drawscore.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-39.opt-1.pyc", "ba_data/python/bastd/activity/coopjoin.py", "ba_data/python/bastd/activity/coopscore.py", "ba_data/python/bastd/activity/drawscore.py", @@ -166,27 +166,27 @@ "ba_data/python/bastd/activity/multiteamscore.py", "ba_data/python/bastd/activity/multiteamvictory.py", "ba_data/python/bastd/actor/__init__.py", - "ba_data/python/bastd/actor/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/background.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/bomb.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/flag.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/image.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/popuptext.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/spawner.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/spaz.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/spazbot.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/text.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/tipstext.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-38.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/background.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/bomb.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/flag.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/image.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/popuptext.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/spawner.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/spaz.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/spazbot.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/text.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/tipstext.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-39.opt-1.pyc", "ba_data/python/bastd/actor/background.py", "ba_data/python/bastd/actor/bomb.py", "ba_data/python/bastd/actor/controlsguide.py", @@ -209,25 +209,25 @@ "ba_data/python/bastd/actor/zoomtext.py", "ba_data/python/bastd/appdelegate.py", "ba_data/python/bastd/game/__init__.py", - "ba_data/python/bastd/game/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/assault.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/chosenone.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/conquest.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/deathmatch.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/elimination.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/football.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/hockey.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/keepaway.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/meteorshower.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/ninjafight.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/onslaught.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/race.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/runaround.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/targetpractice.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/thelaststand.cpython-38.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/assault.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/chosenone.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/conquest.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/deathmatch.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/elimination.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/football.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/hockey.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/keepaway.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/meteorshower.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/ninjafight.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/onslaught.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/race.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/runaround.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/targetpractice.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/thelaststand.cpython-39.opt-1.pyc", "ba_data/python/bastd/game/assault.py", "ba_data/python/bastd/game/capturetheflag.py", "ba_data/python/bastd/game/chosenone.py", @@ -248,29 +248,29 @@ "ba_data/python/bastd/game/thelaststand.py", "ba_data/python/bastd/gameutils.py", "ba_data/python/bastd/keyboard/__init__.py", - "ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-38.opt-1.pyc", + "ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-39.opt-1.pyc", "ba_data/python/bastd/keyboard/englishkeyboard.py", "ba_data/python/bastd/mainmenu.py", "ba_data/python/bastd/mapdata/__init__.py", - "ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-38.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-39.opt-1.pyc", "ba_data/python/bastd/mapdata/big_g.py", "ba_data/python/bastd/mapdata/bridgit.py", "ba_data/python/bastd/mapdata/courtyard.py", @@ -290,57 +290,57 @@ "ba_data/python/bastd/mapdata/zig_zag.py", "ba_data/python/bastd/maps.py", "ba_data/python/bastd/session/__init__.py", - "ba_data/python/bastd/session/__pycache__/__init__.cpython-38.opt-1.pyc", + "ba_data/python/bastd/session/__pycache__/__init__.cpython-39.opt-1.pyc", "ba_data/python/bastd/stdmap.py", "ba_data/python/bastd/tutorial.py", "ba_data/python/bastd/ui/__init__.py", - "ba_data/python/bastd/ui/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/achievements.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/appinvite.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/config.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/configerror.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/confirm.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/continues.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/creditslist.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/debug.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/feedback.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/fileselector.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/getremote.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/helpui.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/kiosk.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/party.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/play.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/playoptions.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/popup.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/promocode.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/purchase.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/qrcode.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/report.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/tabs.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/telnet.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/trophies.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/url.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/watch.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/achievements.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/appinvite.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/config.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/configerror.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/confirm.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/continues.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/creditslist.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/debug.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/feedback.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/fileselector.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/getremote.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/helpui.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/kiosk.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/party.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/play.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/playoptions.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/popup.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/promocode.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/purchase.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/qrcode.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/report.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/tabs.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/telnet.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/trophies.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/url.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/watch.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/account/__init__.py", - "ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/account/__pycache__/link.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/account/__pycache__/settings.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/account/__pycache__/link.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/account/__pycache__/settings.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/account/link.py", "ba_data/python/bastd/ui/account/settings.py", "ba_data/python/bastd/ui/account/unlink.py", @@ -354,10 +354,10 @@ "ba_data/python/bastd/ui/confirm.py", "ba_data/python/bastd/ui/continues.py", "ba_data/python/bastd/ui/coop/__init__.py", - "ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/coop/__pycache__/level.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/coop/__pycache__/level.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/coop/browser.py", "ba_data/python/bastd/ui/coop/gamebutton.py", "ba_data/python/bastd/ui/coop/level.py", @@ -366,12 +366,12 @@ "ba_data/python/bastd/ui/feedback.py", "ba_data/python/bastd/ui/fileselector.py", "ba_data/python/bastd/ui/gather/__init__.py", - "ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/gather/abouttab.py", "ba_data/python/bastd/ui/gather/manualtab.py", "ba_data/python/bastd/ui/gather/nearbytab.py", @@ -383,9 +383,9 @@ "ba_data/python/bastd/ui/iconpicker.py", "ba_data/python/bastd/ui/kiosk.py", "ba_data/python/bastd/ui/league/__init__.py", - "ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/league/rankbutton.py", "ba_data/python/bastd/ui/league/rankwindow.py", "ba_data/python/bastd/ui/mainmenu.py", @@ -394,15 +394,15 @@ "ba_data/python/bastd/ui/partyqueue.py", "ba_data/python/bastd/ui/play.py", "ba_data/python/bastd/ui/playlist/__init__.py", - "ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/playlist/addgame.py", "ba_data/python/bastd/ui/playlist/browser.py", "ba_data/python/bastd/ui/playlist/customizebrowser.py", @@ -414,10 +414,10 @@ "ba_data/python/bastd/ui/playoptions.py", "ba_data/python/bastd/ui/popup.py", "ba_data/python/bastd/ui/profile/__init__.py", - "ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/profile/browser.py", "ba_data/python/bastd/ui/profile/edit.py", "ba_data/python/bastd/ui/profile/upgrade.py", @@ -429,25 +429,25 @@ "ba_data/python/bastd/ui/resourcetypeinfo.py", "ba_data/python/bastd/ui/serverdialog.py", "ba_data/python/bastd/ui/settings/__init__.py", - "ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/settings/advanced.py", "ba_data/python/bastd/ui/settings/allsettings.py", "ba_data/python/bastd/ui/settings/audio.py", @@ -467,21 +467,21 @@ "ba_data/python/bastd/ui/settings/wiimote.py", "ba_data/python/bastd/ui/settings/xbox360controller.py", "ba_data/python/bastd/ui/soundtrack/__init__.py", - "ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/soundtrack/browser.py", "ba_data/python/bastd/ui/soundtrack/edit.py", "ba_data/python/bastd/ui/soundtrack/entrytypeselect.py", "ba_data/python/bastd/ui/soundtrack/macmusicapp.py", "ba_data/python/bastd/ui/specialoffer.py", "ba_data/python/bastd/ui/store/__init__.py", - "ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/store/__pycache__/browser.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/store/__pycache__/button.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/store/__pycache__/item.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/store/__pycache__/browser.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/store/__pycache__/button.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/store/__pycache__/item.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/store/browser.py", "ba_data/python/bastd/ui/store/button.py", "ba_data/python/bastd/ui/store/item.py", @@ -494,21 +494,21 @@ "ba_data/python/bastd/ui/url.py", "ba_data/python/bastd/ui/watch.py", "ba_data/python/efro/__init__.py", - "ba_data/python/efro/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/efro/__pycache__/call.cpython-38.opt-1.pyc", - "ba_data/python/efro/__pycache__/error.cpython-38.opt-1.pyc", - "ba_data/python/efro/__pycache__/message.cpython-38.opt-1.pyc", - "ba_data/python/efro/__pycache__/terminal.cpython-38.opt-1.pyc", - "ba_data/python/efro/__pycache__/util.cpython-38.opt-1.pyc", + "ba_data/python/efro/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/efro/__pycache__/call.cpython-39.opt-1.pyc", + "ba_data/python/efro/__pycache__/error.cpython-39.opt-1.pyc", + "ba_data/python/efro/__pycache__/message.cpython-39.opt-1.pyc", + "ba_data/python/efro/__pycache__/terminal.cpython-39.opt-1.pyc", + "ba_data/python/efro/__pycache__/util.cpython-39.opt-1.pyc", "ba_data/python/efro/call.py", "ba_data/python/efro/dataclassio/__init__.py", - "ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/efro/dataclassio/__pycache__/_base.cpython-38.opt-1.pyc", - "ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-38.opt-1.pyc", - "ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-38.opt-1.pyc", - "ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-38.opt-1.pyc", - "ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-38.opt-1.pyc", - "ba_data/python/efro/dataclassio/__pycache__/extras.cpython-38.opt-1.pyc", + "ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/efro/dataclassio/__pycache__/_base.cpython-39.opt-1.pyc", + "ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-39.opt-1.pyc", + "ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-39.opt-1.pyc", + "ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-39.opt-1.pyc", + "ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-39.opt-1.pyc", + "ba_data/python/efro/dataclassio/__pycache__/extras.cpython-39.opt-1.pyc", "ba_data/python/efro/dataclassio/_base.py", "ba_data/python/efro/dataclassio/_inputter.py", "ba_data/python/efro/dataclassio/_outputter.py", @@ -519,6 +519,6 @@ "ba_data/python/efro/message.py", "ba_data/python/efro/terminal.py", "ba_data/python/efro/util.py", - "server/__pycache__/ballisticacore_server.cpython-38.opt-1.pyc", + "server/__pycache__/ballisticacore_server.cpython-39.opt-1.pyc", "server/ballisticacore_server.py" ] \ No newline at end of file diff --git a/assets/Makefile b/assets/Makefile index 6f9441cf..8ddb1a47 100644 --- a/assets/Makefile +++ b/assets/Makefile @@ -122,7 +122,7 @@ ASSET_TARGETS_WIN_WIN32 += $(EXTRAS_TARGETS_WIN_WIN32) ASSET_TARGETS_WIN_X64 += $(EXTRAS_TARGETS_WIN_X64) define make-opt-pyc-target -$1: $$(subst /__pycache__,,$$(subst .cpython-38.opt-1.pyc,.py,$1)) +$1: $$(subst /__pycache__,,$$(subst .cpython-39.opt-1.pyc,.py,$1)) @echo Compiling script: $$^ @rm -rf $$@ && PYTHONHASHSEED=1 \ $$(TOOLS_DIR)/pcommand compile_python_files $$^ && chmod 444 $$@ @@ -377,250 +377,250 @@ SCRIPT_TARGETS_PY_PUBLIC = \ build/server/ballisticacore_server.py SCRIPT_TARGETS_PYC_PUBLIC = \ - build/ba_data/python/ba/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_account.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_achievement.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_activity.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_activitytypes.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_actor.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_ads.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_analytics.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_app.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_appconfig.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_appdelegate.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_appmode.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_apputils.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_assetmanager.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_asyncio.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_benchmark.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_campaign.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_collision.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_coopgame.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_coopsession.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_dependency.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_dualteamsession.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_error.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_freeforallsession.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_gameactivity.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_gameresults.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_gameutils.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_general.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/_generated/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/_generated/__pycache__/enums.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_hooks.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_input.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_keyboard.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_language.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_level.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_lobby.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_map.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_math.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_messages.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_meta.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_multiteamsession.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_music.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_net.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_nodeactor.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_player.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_playlist.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_plugin.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_powerup.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_profile.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_score.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_servermode.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_session.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_settings.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_stats.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_store.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_team.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_teamgame.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_tips.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_tournament.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_ui.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/deprecated.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/internal.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/macmusicapp.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/modutils.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/osmusic.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/ui/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/coopscore.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/drawscore.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/background.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/bomb.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/flag.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/image.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/popuptext.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/spawner.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/spaz.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/spazbot.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/text.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/tipstext.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/__pycache__/appdelegate.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/assault.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/chosenone.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/conquest.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/deathmatch.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/elimination.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/football.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/hockey.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/keepaway.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/meteorshower.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/ninjafight.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/onslaught.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/race.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/runaround.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/targetpractice.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/thelaststand.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/__pycache__/gameutils.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/__pycache__/mainmenu.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/__pycache__/maps.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/session/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/__pycache__/stdmap.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/__pycache__/tutorial.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/account/__pycache__/link.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/account/__pycache__/settings.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/achievements.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/appinvite.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/config.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/configerror.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/confirm.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/continues.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/coop/__pycache__/level.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/creditslist.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/debug.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/feedback.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/fileselector.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/getremote.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/helpui.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/kiosk.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/party.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/play.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/playoptions.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/popup.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/promocode.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/purchase.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/qrcode.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/report.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/store/__pycache__/browser.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/store/__pycache__/button.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/store/__pycache__/item.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/tabs.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/telnet.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/trophies.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/url.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/watch.cpython-38.opt-1.pyc \ - build/server/__pycache__/ballisticacore_server.cpython-38.opt-1.pyc + build/ba_data/python/ba/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_account.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_achievement.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_activity.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_activitytypes.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_actor.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_ads.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_analytics.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_app.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_appconfig.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_appdelegate.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_appmode.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_apputils.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_assetmanager.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_asyncio.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_benchmark.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_campaign.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_collision.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_coopgame.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_coopsession.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_dependency.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_dualteamsession.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_error.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_freeforallsession.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_gameactivity.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_gameresults.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_gameutils.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_general.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/_generated/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/_generated/__pycache__/enums.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_hooks.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_input.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_keyboard.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_language.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_level.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_lobby.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_map.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_math.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_messages.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_meta.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_multiteamsession.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_music.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_net.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_nodeactor.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_player.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_playlist.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_plugin.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_powerup.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_profile.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_score.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_servermode.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_session.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_settings.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_stats.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_store.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_team.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_teamgame.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_tips.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_tournament.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_ui.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/deprecated.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/internal.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/macmusicapp.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/modutils.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/osmusic.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/ui/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/coopscore.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/drawscore.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/background.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/bomb.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/flag.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/image.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/popuptext.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/spawner.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/spaz.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/spazbot.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/text.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/tipstext.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/__pycache__/appdelegate.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/assault.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/chosenone.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/conquest.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/deathmatch.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/elimination.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/football.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/hockey.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/keepaway.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/meteorshower.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/ninjafight.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/onslaught.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/race.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/runaround.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/targetpractice.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/thelaststand.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/__pycache__/gameutils.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/__pycache__/mainmenu.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/__pycache__/maps.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/session/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/__pycache__/stdmap.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/__pycache__/tutorial.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/account/__pycache__/link.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/account/__pycache__/settings.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/achievements.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/appinvite.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/config.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/configerror.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/confirm.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/continues.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/coop/__pycache__/level.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/creditslist.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/debug.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/feedback.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/fileselector.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/getremote.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/helpui.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/kiosk.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/party.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/play.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/playoptions.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/popup.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/promocode.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/purchase.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/qrcode.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/report.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/store/__pycache__/browser.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/store/__pycache__/button.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/store/__pycache__/item.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/tabs.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/telnet.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/trophies.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/url.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/watch.cpython-39.opt-1.pyc \ + build/server/__pycache__/ballisticacore_server.cpython-39.opt-1.pyc # Rule to copy src asset scripts to dst. # (and make non-writable so I'm less likely to accidentally edit them there) @@ -656,23 +656,23 @@ SCRIPT_TARGETS_PY_PUBLIC_TOOLS = \ build/ba_data/python/efro/util.py SCRIPT_TARGETS_PYC_PUBLIC_TOOLS = \ - build/ba_data/python/bacommon/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bacommon/__pycache__/assets.cpython-38.opt-1.pyc \ - build/ba_data/python/bacommon/__pycache__/net.cpython-38.opt-1.pyc \ - build/ba_data/python/bacommon/__pycache__/servermanager.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/__pycache__/call.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/dataclassio/__pycache__/_base.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/dataclassio/__pycache__/extras.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/__pycache__/error.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/__pycache__/message.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/__pycache__/terminal.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/__pycache__/util.cpython-38.opt-1.pyc + build/ba_data/python/bacommon/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bacommon/__pycache__/assets.cpython-39.opt-1.pyc \ + build/ba_data/python/bacommon/__pycache__/net.cpython-39.opt-1.pyc \ + build/ba_data/python/bacommon/__pycache__/servermanager.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/call.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/dataclassio/__pycache__/_base.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/dataclassio/__pycache__/extras.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/error.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/message.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/terminal.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/util.cpython-39.opt-1.pyc # Rule to copy src asset scripts to dst. # (and make non-writable so I'm less likely to accidentally edit them there) @@ -694,11 +694,12 @@ $(eval $(call make-opt-pyc-target,$(element)))) SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/__future__.py \ build/pylib-apple/__phello__.foo.py \ + build/pylib-apple/_aix_support.py \ build/pylib-apple/_bootlocale.py \ + build/pylib-apple/_bootsubprocess.py \ build/pylib-apple/_collections_abc.py \ build/pylib-apple/_compat_pickle.py \ build/pylib-apple/_compression.py \ - build/pylib-apple/_dummy_thread.py \ build/pylib-apple/_markupbase.py \ build/pylib-apple/_osx_support.py \ build/pylib-apple/_py_abc.py \ @@ -738,6 +739,7 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/asyncio/streams.py \ build/pylib-apple/asyncio/subprocess.py \ build/pylib-apple/asyncio/tasks.py \ + build/pylib-apple/asyncio/threads.py \ build/pylib-apple/asyncio/transports.py \ build/pylib-apple/asyncio/trsock.py \ build/pylib-apple/asyncio/unix_events.py \ @@ -794,7 +796,6 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/difflib.py \ build/pylib-apple/dis.py \ build/pylib-apple/doctest.py \ - build/pylib-apple/dummy_threading.py \ build/pylib-apple/email/__init__.py \ build/pylib-apple/email/_encoded_words.py \ build/pylib-apple/email/_header_value_parser.py \ @@ -912,7 +913,6 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/encodings/kz1048.py \ build/pylib-apple/encodings/latin_1.py \ build/pylib-apple/encodings/mac_arabic.py \ - build/pylib-apple/encodings/mac_centeuro.py \ build/pylib-apple/encodings/mac_croatian.py \ build/pylib-apple/encodings/mac_cyrillic.py \ build/pylib-apple/encodings/mac_farsi.py \ @@ -960,6 +960,7 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/getpass.py \ build/pylib-apple/gettext.py \ build/pylib-apple/glob.py \ + build/pylib-apple/graphlib.py \ build/pylib-apple/gzip.py \ build/pylib-apple/hashlib.py \ build/pylib-apple/heapq.py \ @@ -977,6 +978,7 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/importlib/__init__.py \ build/pylib-apple/importlib/_bootstrap.py \ build/pylib-apple/importlib/_bootstrap_external.py \ + build/pylib-apple/importlib/_common.py \ build/pylib-apple/importlib/abc.py \ build/pylib-apple/importlib/machinery.py \ build/pylib-apple/importlib/metadata.py \ @@ -1001,6 +1003,10 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/mailcap.py \ build/pylib-apple/mimetypes.py \ build/pylib-apple/modulefinder.py \ + build/pylib-apple/msilib/__init__.py \ + build/pylib-apple/msilib/schema.py \ + build/pylib-apple/msilib/sequence.py \ + build/pylib-apple/msilib/text.py \ build/pylib-apple/netrc.py \ build/pylib-apple/nntplib.py \ build/pylib-apple/ntpath.py \ @@ -1120,438 +1126,452 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/xmlrpc/server.py \ build/pylib-apple/zipapp.py \ build/pylib-apple/zipfile.py \ - build/pylib-apple/zipimport.py + build/pylib-apple/zipimport.py \ + build/pylib-apple/zoneinfo/__init__.py \ + build/pylib-apple/zoneinfo/_common.py \ + build/pylib-apple/zoneinfo/_tzpath.py \ + build/pylib-apple/zoneinfo/_zoneinfo.py SCRIPT_TARGETS_PYC_PRIVATE_APPLE = \ - build/pylib-apple/__pycache__/__future__.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/__phello__.foo.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_bootlocale.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_collections_abc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_compat_pickle.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_compression.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_dummy_thread.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_markupbase.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_osx_support.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_py_abc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_pydecimal.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_pyio.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_strptime.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_threading_local.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_weakrefset.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/abc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/aifc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/antigravity.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/argparse.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/ast.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/asynchat.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/constants.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/events.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/futures.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/locks.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/log.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/queues.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/runners.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/streams.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/transports.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/asyncore.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/base64.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/bdb.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/binhex.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/bisect.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/bz2.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/cProfile.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/calendar.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/cgi.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/cgitb.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/chunk.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/cmd.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/code.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/codecs.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/codeop.cpython-38.opt-1.pyc \ - build/pylib-apple/collections/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/collections/__pycache__/abc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/colorsys.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/compileall.cpython-38.opt-1.pyc \ - build/pylib-apple/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc \ - build/pylib-apple/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc \ - build/pylib-apple/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/configparser.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/contextlib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/contextvars.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/copy.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/copyreg.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/crypt.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/csv.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/__pycache__/util.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc \ - build/pylib-apple/curses/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/curses/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/pylib-apple/curses/__pycache__/has_key.cpython-38.opt-1.pyc \ - build/pylib-apple/curses/__pycache__/panel.cpython-38.opt-1.pyc \ - build/pylib-apple/curses/__pycache__/textpad.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/dataclasses.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/datetime.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/decimal.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/difflib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/dis.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/doctest.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/dummy_threading.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/_policybase.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/base64mime.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/charset.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/contentmanager.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/encoders.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/errors.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/feedparser.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/generator.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/header.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/headerregistry.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/iterators.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/message.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/application.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/audio.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/base.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/image.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/message.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/text.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/parser.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/policy.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/quoprimime.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/utils.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/aliases.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/big5.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/charmap.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp037.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp273.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp424.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp437.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp500.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp720.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp737.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp775.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp850.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp852.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp855.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp856.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp857.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp858.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp860.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp861.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp862.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp863.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp864.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp865.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp866.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp869.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp874.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp875.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp932.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp949.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp950.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/gbk.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/hz.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/idna.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/johab.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/oem.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/palmos.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/punycode.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/undefined.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/enum.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/filecmp.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/fileinput.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/fnmatch.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/formatter.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/fractions.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/ftplib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/functools.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/genericpath.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/getopt.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/getpass.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/gettext.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/glob.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/gzip.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/hashlib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/heapq.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/hmac.cpython-38.opt-1.pyc \ - build/pylib-apple/html/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/html/__pycache__/entities.cpython-38.opt-1.pyc \ - build/pylib-apple/html/__pycache__/parser.cpython-38.opt-1.pyc \ - build/pylib-apple/http/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/http/__pycache__/client.cpython-38.opt-1.pyc \ - build/pylib-apple/http/__pycache__/cookiejar.cpython-38.opt-1.pyc \ - build/pylib-apple/http/__pycache__/cookies.cpython-38.opt-1.pyc \ - build/pylib-apple/http/__pycache__/server.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/imghdr.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/imp.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/abc.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/machinery.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/metadata.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/resources.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/util.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/inspect.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/io.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/ipaddress.cpython-38.opt-1.pyc \ - build/pylib-apple/json/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/json/__pycache__/decoder.cpython-38.opt-1.pyc \ - build/pylib-apple/json/__pycache__/encoder.cpython-38.opt-1.pyc \ - build/pylib-apple/json/__pycache__/scanner.cpython-38.opt-1.pyc \ - build/pylib-apple/json/__pycache__/tool.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/keyword.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/linecache.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/locale.cpython-38.opt-1.pyc \ - build/pylib-apple/logging/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/logging/__pycache__/config.cpython-38.opt-1.pyc \ - build/pylib-apple/logging/__pycache__/handlers.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/lzma.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/mailbox.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/mailcap.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/mimetypes.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/modulefinder.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/netrc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/nntplib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/ntpath.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/nturl2path.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/numbers.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/opcode.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/operator.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/optparse.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/os.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pathlib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pdb.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pickle.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pickletools.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pipes.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pkgutil.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/platform.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/plistlib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/poplib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/posixpath.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pprint.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/profile.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pstats.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pty.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/py_compile.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pyclbr.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pydoc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/queue.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/quopri.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/random.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/re.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/reprlib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/rlcompleter.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/runpy.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/sched.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/secrets.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/selectors.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/shelve.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/shlex.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/shutil.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/signal.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/site.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/smtpd.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/smtplib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/sndhdr.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/socket.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/socketserver.cpython-38.opt-1.pyc \ - build/pylib-apple/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc \ - build/pylib-apple/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/sre_compile.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/sre_constants.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/sre_parse.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/ssl.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/stat.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/statistics.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/string.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/stringprep.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/struct.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/sunau.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/symbol.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/symtable.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/sysconfig.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/tabnanny.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/tarfile.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/telnetlib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/tempfile.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/textwrap.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/this.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/threading.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/timeit.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/token.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/tokenize.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/trace.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/traceback.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/tracemalloc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/tty.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/types.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/typing.cpython-38.opt-1.pyc \ - build/pylib-apple/urllib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/urllib/__pycache__/error.cpython-38.opt-1.pyc \ - build/pylib-apple/urllib/__pycache__/parse.cpython-38.opt-1.pyc \ - build/pylib-apple/urllib/__pycache__/request.cpython-38.opt-1.pyc \ - build/pylib-apple/urllib/__pycache__/response.cpython-38.opt-1.pyc \ - build/pylib-apple/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/uu.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/uuid.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/warnings.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/wave.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/weakref.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/webbrowser.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/xdrlib.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc \ - build/pylib-apple/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc \ - build/pylib-apple/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/zipapp.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/zipfile.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/zipimport.cpython-38.opt-1.pyc + build/pylib-apple/__pycache__/__future__.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/__phello__.foo.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_aix_support.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_bootlocale.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_collections_abc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_compat_pickle.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_compression.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_markupbase.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_osx_support.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_py_abc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_pydecimal.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_pyio.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_strptime.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_threading_local.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_weakrefset.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/abc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/aifc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/antigravity.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/argparse.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/ast.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/asynchat.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/constants.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/events.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/futures.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/locks.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/log.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/queues.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/runners.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/streams.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/threads.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/transports.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/asyncore.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/base64.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/bdb.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/binhex.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/bisect.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/bz2.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/cProfile.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/calendar.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/cgi.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/cgitb.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/chunk.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/cmd.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/code.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/codecs.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/codeop.cpython-39.opt-1.pyc \ + build/pylib-apple/collections/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/collections/__pycache__/abc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/colorsys.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/compileall.cpython-39.opt-1.pyc \ + build/pylib-apple/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc \ + build/pylib-apple/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc \ + build/pylib-apple/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/configparser.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/contextlib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/contextvars.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/copy.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/copyreg.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/crypt.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/csv.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/__pycache__/util.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc \ + build/pylib-apple/curses/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/curses/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/pylib-apple/curses/__pycache__/has_key.cpython-39.opt-1.pyc \ + build/pylib-apple/curses/__pycache__/panel.cpython-39.opt-1.pyc \ + build/pylib-apple/curses/__pycache__/textpad.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/dataclasses.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/datetime.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/decimal.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/difflib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/dis.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/doctest.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/_policybase.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/base64mime.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/charset.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/contentmanager.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/encoders.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/errors.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/feedparser.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/generator.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/header.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/headerregistry.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/iterators.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/message.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/application.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/audio.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/base.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/image.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/message.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/text.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/parser.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/policy.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/quoprimime.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/utils.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/aliases.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/big5.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/charmap.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp037.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp273.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp424.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp437.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp500.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp720.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp737.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp775.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp850.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp852.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp855.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp856.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp857.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp858.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp860.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp861.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp862.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp863.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp864.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp865.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp866.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp869.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp874.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp875.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp932.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp949.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp950.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/gbk.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/hz.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/idna.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/johab.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/oem.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/palmos.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/punycode.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/undefined.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/enum.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/filecmp.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/fileinput.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/fnmatch.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/formatter.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/fractions.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/ftplib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/functools.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/genericpath.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/getopt.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/getpass.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/gettext.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/glob.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/graphlib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/gzip.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/hashlib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/heapq.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/hmac.cpython-39.opt-1.pyc \ + build/pylib-apple/html/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/html/__pycache__/entities.cpython-39.opt-1.pyc \ + build/pylib-apple/html/__pycache__/parser.cpython-39.opt-1.pyc \ + build/pylib-apple/http/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/http/__pycache__/client.cpython-39.opt-1.pyc \ + build/pylib-apple/http/__pycache__/cookiejar.cpython-39.opt-1.pyc \ + build/pylib-apple/http/__pycache__/cookies.cpython-39.opt-1.pyc \ + build/pylib-apple/http/__pycache__/server.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/imghdr.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/imp.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/_common.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/abc.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/machinery.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/metadata.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/resources.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/util.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/inspect.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/io.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/ipaddress.cpython-39.opt-1.pyc \ + build/pylib-apple/json/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/json/__pycache__/decoder.cpython-39.opt-1.pyc \ + build/pylib-apple/json/__pycache__/encoder.cpython-39.opt-1.pyc \ + build/pylib-apple/json/__pycache__/scanner.cpython-39.opt-1.pyc \ + build/pylib-apple/json/__pycache__/tool.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/keyword.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/linecache.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/locale.cpython-39.opt-1.pyc \ + build/pylib-apple/logging/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/logging/__pycache__/config.cpython-39.opt-1.pyc \ + build/pylib-apple/logging/__pycache__/handlers.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/lzma.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/mailbox.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/mailcap.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/mimetypes.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/modulefinder.cpython-39.opt-1.pyc \ + build/pylib-apple/msilib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/msilib/__pycache__/schema.cpython-39.opt-1.pyc \ + build/pylib-apple/msilib/__pycache__/sequence.cpython-39.opt-1.pyc \ + build/pylib-apple/msilib/__pycache__/text.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/netrc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/nntplib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/ntpath.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/nturl2path.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/numbers.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/opcode.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/operator.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/optparse.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/os.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pathlib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pdb.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pickle.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pickletools.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pipes.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pkgutil.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/platform.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/plistlib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/poplib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/posixpath.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pprint.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/profile.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pstats.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pty.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/py_compile.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pyclbr.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pydoc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/queue.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/quopri.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/random.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/re.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/reprlib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/rlcompleter.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/runpy.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/sched.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/secrets.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/selectors.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/shelve.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/shlex.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/shutil.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/signal.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/site.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/smtpd.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/smtplib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/sndhdr.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/socket.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/socketserver.cpython-39.opt-1.pyc \ + build/pylib-apple/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc \ + build/pylib-apple/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/sre_compile.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/sre_constants.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/sre_parse.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/ssl.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/stat.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/statistics.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/string.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/stringprep.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/struct.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/sunau.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/symbol.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/symtable.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/sysconfig.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/tabnanny.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/tarfile.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/telnetlib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/tempfile.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/textwrap.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/this.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/threading.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/timeit.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/token.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/tokenize.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/trace.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/traceback.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/tracemalloc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/tty.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/types.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/typing.cpython-39.opt-1.pyc \ + build/pylib-apple/urllib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/urllib/__pycache__/error.cpython-39.opt-1.pyc \ + build/pylib-apple/urllib/__pycache__/parse.cpython-39.opt-1.pyc \ + build/pylib-apple/urllib/__pycache__/request.cpython-39.opt-1.pyc \ + build/pylib-apple/urllib/__pycache__/response.cpython-39.opt-1.pyc \ + build/pylib-apple/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/uu.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/uuid.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/warnings.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/wave.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/weakref.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/webbrowser.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/xdrlib.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc \ + build/pylib-apple/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc \ + build/pylib-apple/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/zipapp.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/zipfile.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/zipimport.cpython-39.opt-1.pyc \ + build/pylib-apple/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc \ + build/pylib-apple/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc \ + build/pylib-apple/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc # Rule to copy src asset scripts to dst. # (and make non-writable so I'm less likely to accidentally edit them there) @@ -1566,11 +1586,12 @@ $(eval $(call make-opt-pyc-target,$(element)))) SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \ build/pylib-android/__future__.py \ build/pylib-android/__phello__.foo.py \ + build/pylib-android/_aix_support.py \ build/pylib-android/_bootlocale.py \ + build/pylib-android/_bootsubprocess.py \ build/pylib-android/_collections_abc.py \ build/pylib-android/_compat_pickle.py \ build/pylib-android/_compression.py \ - build/pylib-android/_dummy_thread.py \ build/pylib-android/_markupbase.py \ build/pylib-android/_osx_support.py \ build/pylib-android/_py_abc.py \ @@ -1610,6 +1631,7 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \ build/pylib-android/asyncio/streams.py \ build/pylib-android/asyncio/subprocess.py \ build/pylib-android/asyncio/tasks.py \ + build/pylib-android/asyncio/threads.py \ build/pylib-android/asyncio/transports.py \ build/pylib-android/asyncio/trsock.py \ build/pylib-android/asyncio/unix_events.py \ @@ -1666,7 +1688,6 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \ build/pylib-android/difflib.py \ build/pylib-android/dis.py \ build/pylib-android/doctest.py \ - build/pylib-android/dummy_threading.py \ build/pylib-android/email/__init__.py \ build/pylib-android/email/_encoded_words.py \ build/pylib-android/email/_header_value_parser.py \ @@ -1784,7 +1805,6 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \ build/pylib-android/encodings/kz1048.py \ build/pylib-android/encodings/latin_1.py \ build/pylib-android/encodings/mac_arabic.py \ - build/pylib-android/encodings/mac_centeuro.py \ build/pylib-android/encodings/mac_croatian.py \ build/pylib-android/encodings/mac_cyrillic.py \ build/pylib-android/encodings/mac_farsi.py \ @@ -1832,6 +1852,7 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \ build/pylib-android/getpass.py \ build/pylib-android/gettext.py \ build/pylib-android/glob.py \ + build/pylib-android/graphlib.py \ build/pylib-android/gzip.py \ build/pylib-android/hashlib.py \ build/pylib-android/heapq.py \ @@ -1849,6 +1870,7 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \ build/pylib-android/importlib/__init__.py \ build/pylib-android/importlib/_bootstrap.py \ build/pylib-android/importlib/_bootstrap_external.py \ + build/pylib-android/importlib/_common.py \ build/pylib-android/importlib/abc.py \ build/pylib-android/importlib/machinery.py \ build/pylib-android/importlib/metadata.py \ @@ -1992,438 +2014,448 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \ build/pylib-android/xmlrpc/server.py \ build/pylib-android/zipapp.py \ build/pylib-android/zipfile.py \ - build/pylib-android/zipimport.py + build/pylib-android/zipimport.py \ + build/pylib-android/zoneinfo/__init__.py \ + build/pylib-android/zoneinfo/_common.py \ + build/pylib-android/zoneinfo/_tzpath.py \ + build/pylib-android/zoneinfo/_zoneinfo.py SCRIPT_TARGETS_PYC_PRIVATE_ANDROID = \ - build/pylib-android/__pycache__/__future__.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/__phello__.foo.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_bootlocale.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_collections_abc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_compat_pickle.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_compression.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_dummy_thread.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_markupbase.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_osx_support.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_py_abc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_pydecimal.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_pyio.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_strptime.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_threading_local.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_weakrefset.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/abc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/aifc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/antigravity.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/argparse.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/ast.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/asynchat.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/constants.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/events.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/futures.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/locks.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/log.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/queues.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/runners.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/streams.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/transports.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/asyncore.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/base64.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/bdb.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/binhex.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/bisect.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/bz2.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/cProfile.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/calendar.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/cgi.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/cgitb.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/chunk.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/cmd.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/code.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/codecs.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/codeop.cpython-38.opt-1.pyc \ - build/pylib-android/collections/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/collections/__pycache__/abc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/colorsys.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/compileall.cpython-38.opt-1.pyc \ - build/pylib-android/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc \ - build/pylib-android/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc \ - build/pylib-android/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/configparser.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/contextlib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/contextvars.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/copy.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/copyreg.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/crypt.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/csv.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/__pycache__/util.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc \ - build/pylib-android/curses/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/curses/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/pylib-android/curses/__pycache__/has_key.cpython-38.opt-1.pyc \ - build/pylib-android/curses/__pycache__/panel.cpython-38.opt-1.pyc \ - build/pylib-android/curses/__pycache__/textpad.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/dataclasses.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/datetime.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/decimal.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/difflib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/dis.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/doctest.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/dummy_threading.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/_policybase.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/base64mime.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/charset.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/contentmanager.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/encoders.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/errors.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/feedparser.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/generator.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/header.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/headerregistry.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/iterators.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/message.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/application.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/audio.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/base.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/image.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/message.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/text.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/parser.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/policy.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/quoprimime.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/utils.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/aliases.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/big5.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/charmap.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp037.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp273.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp424.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp437.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp500.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp720.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp737.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp775.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp850.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp852.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp855.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp856.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp857.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp858.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp860.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp861.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp862.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp863.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp864.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp865.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp866.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp869.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp874.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp875.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp932.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp949.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp950.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/gbk.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/hz.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/idna.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/johab.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/oem.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/palmos.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/punycode.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/undefined.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/enum.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/filecmp.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/fileinput.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/fnmatch.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/formatter.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/fractions.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/ftplib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/functools.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/genericpath.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/getopt.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/getpass.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/gettext.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/glob.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/gzip.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/hashlib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/heapq.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/hmac.cpython-38.opt-1.pyc \ - build/pylib-android/html/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/html/__pycache__/entities.cpython-38.opt-1.pyc \ - build/pylib-android/html/__pycache__/parser.cpython-38.opt-1.pyc \ - build/pylib-android/http/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/http/__pycache__/client.cpython-38.opt-1.pyc \ - build/pylib-android/http/__pycache__/cookiejar.cpython-38.opt-1.pyc \ - build/pylib-android/http/__pycache__/cookies.cpython-38.opt-1.pyc \ - build/pylib-android/http/__pycache__/server.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/imghdr.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/imp.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/abc.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/machinery.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/metadata.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/resources.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/util.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/inspect.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/io.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/ipaddress.cpython-38.opt-1.pyc \ - build/pylib-android/json/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/json/__pycache__/decoder.cpython-38.opt-1.pyc \ - build/pylib-android/json/__pycache__/encoder.cpython-38.opt-1.pyc \ - build/pylib-android/json/__pycache__/scanner.cpython-38.opt-1.pyc \ - build/pylib-android/json/__pycache__/tool.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/keyword.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/linecache.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/locale.cpython-38.opt-1.pyc \ - build/pylib-android/logging/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/logging/__pycache__/config.cpython-38.opt-1.pyc \ - build/pylib-android/logging/__pycache__/handlers.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/lzma.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/mailbox.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/mailcap.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/mimetypes.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/modulefinder.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/netrc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/nntplib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/ntpath.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/nturl2path.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/numbers.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/opcode.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/operator.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/optparse.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/os.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pathlib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pdb.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pickle.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pickletools.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pipes.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pkgutil.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/platform.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/plistlib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/poplib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/posixpath.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pprint.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/profile.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pstats.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pty.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/py_compile.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pyclbr.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pydoc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/queue.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/quopri.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/random.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/re.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/reprlib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/rlcompleter.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/runpy.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/sched.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/secrets.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/selectors.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/shelve.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/shlex.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/shutil.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/signal.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/site.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/smtpd.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/smtplib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/sndhdr.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/socket.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/socketserver.cpython-38.opt-1.pyc \ - build/pylib-android/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc \ - build/pylib-android/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/sre_compile.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/sre_constants.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/sre_parse.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/ssl.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/stat.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/statistics.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/string.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/stringprep.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/struct.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/sunau.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/symbol.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/symtable.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/sysconfig.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/tabnanny.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/tarfile.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/telnetlib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/tempfile.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/textwrap.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/this.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/threading.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/timeit.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/token.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/tokenize.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/trace.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/traceback.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/tracemalloc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/tty.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/types.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/typing.cpython-38.opt-1.pyc \ - build/pylib-android/urllib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/urllib/__pycache__/error.cpython-38.opt-1.pyc \ - build/pylib-android/urllib/__pycache__/parse.cpython-38.opt-1.pyc \ - build/pylib-android/urllib/__pycache__/request.cpython-38.opt-1.pyc \ - build/pylib-android/urllib/__pycache__/response.cpython-38.opt-1.pyc \ - build/pylib-android/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/uu.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/uuid.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/warnings.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/wave.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/weakref.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/webbrowser.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/xdrlib.cpython-38.opt-1.pyc \ - build/pylib-android/xml/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc \ - build/pylib-android/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc \ - build/pylib-android/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc \ - build/pylib-android/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc \ - build/pylib-android/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc \ - build/pylib-android/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc \ - build/pylib-android/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc \ - build/pylib-android/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc \ - build/pylib-android/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc \ - build/pylib-android/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc \ - build/pylib-android/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc \ - build/pylib-android/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc \ - build/pylib-android/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/zipapp.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/zipfile.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/zipimport.cpython-38.opt-1.pyc + build/pylib-android/__pycache__/__future__.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/__phello__.foo.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_aix_support.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_bootlocale.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_collections_abc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_compat_pickle.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_compression.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_markupbase.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_osx_support.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_py_abc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_pydecimal.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_pyio.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_strptime.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_threading_local.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_weakrefset.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/abc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/aifc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/antigravity.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/argparse.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/ast.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/asynchat.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/constants.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/events.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/futures.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/locks.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/log.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/queues.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/runners.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/streams.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/threads.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/transports.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/asyncore.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/base64.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/bdb.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/binhex.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/bisect.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/bz2.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/cProfile.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/calendar.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/cgi.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/cgitb.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/chunk.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/cmd.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/code.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/codecs.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/codeop.cpython-39.opt-1.pyc \ + build/pylib-android/collections/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/collections/__pycache__/abc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/colorsys.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/compileall.cpython-39.opt-1.pyc \ + build/pylib-android/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc \ + build/pylib-android/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc \ + build/pylib-android/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/configparser.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/contextlib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/contextvars.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/copy.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/copyreg.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/crypt.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/csv.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/__pycache__/util.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc \ + build/pylib-android/curses/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/curses/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/pylib-android/curses/__pycache__/has_key.cpython-39.opt-1.pyc \ + build/pylib-android/curses/__pycache__/panel.cpython-39.opt-1.pyc \ + build/pylib-android/curses/__pycache__/textpad.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/dataclasses.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/datetime.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/decimal.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/difflib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/dis.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/doctest.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/_policybase.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/base64mime.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/charset.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/contentmanager.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/encoders.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/errors.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/feedparser.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/generator.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/header.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/headerregistry.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/iterators.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/message.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/application.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/audio.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/base.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/image.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/message.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/text.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/parser.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/policy.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/quoprimime.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/utils.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/aliases.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/big5.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/charmap.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp037.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp273.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp424.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp437.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp500.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp720.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp737.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp775.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp850.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp852.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp855.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp856.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp857.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp858.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp860.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp861.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp862.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp863.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp864.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp865.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp866.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp869.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp874.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp875.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp932.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp949.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp950.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/gbk.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/hz.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/idna.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/johab.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/oem.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/palmos.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/punycode.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/undefined.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/enum.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/filecmp.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/fileinput.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/fnmatch.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/formatter.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/fractions.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/ftplib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/functools.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/genericpath.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/getopt.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/getpass.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/gettext.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/glob.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/graphlib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/gzip.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/hashlib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/heapq.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/hmac.cpython-39.opt-1.pyc \ + build/pylib-android/html/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/html/__pycache__/entities.cpython-39.opt-1.pyc \ + build/pylib-android/html/__pycache__/parser.cpython-39.opt-1.pyc \ + build/pylib-android/http/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/http/__pycache__/client.cpython-39.opt-1.pyc \ + build/pylib-android/http/__pycache__/cookiejar.cpython-39.opt-1.pyc \ + build/pylib-android/http/__pycache__/cookies.cpython-39.opt-1.pyc \ + build/pylib-android/http/__pycache__/server.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/imghdr.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/imp.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/_common.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/abc.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/machinery.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/metadata.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/resources.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/util.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/inspect.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/io.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/ipaddress.cpython-39.opt-1.pyc \ + build/pylib-android/json/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/json/__pycache__/decoder.cpython-39.opt-1.pyc \ + build/pylib-android/json/__pycache__/encoder.cpython-39.opt-1.pyc \ + build/pylib-android/json/__pycache__/scanner.cpython-39.opt-1.pyc \ + build/pylib-android/json/__pycache__/tool.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/keyword.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/linecache.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/locale.cpython-39.opt-1.pyc \ + build/pylib-android/logging/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/logging/__pycache__/config.cpython-39.opt-1.pyc \ + build/pylib-android/logging/__pycache__/handlers.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/lzma.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/mailbox.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/mailcap.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/mimetypes.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/modulefinder.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/netrc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/nntplib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/ntpath.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/nturl2path.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/numbers.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/opcode.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/operator.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/optparse.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/os.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pathlib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pdb.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pickle.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pickletools.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pipes.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pkgutil.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/platform.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/plistlib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/poplib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/posixpath.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pprint.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/profile.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pstats.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pty.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/py_compile.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pyclbr.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pydoc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/queue.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/quopri.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/random.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/re.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/reprlib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/rlcompleter.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/runpy.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/sched.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/secrets.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/selectors.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/shelve.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/shlex.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/shutil.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/signal.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/site.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/smtpd.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/smtplib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/sndhdr.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/socket.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/socketserver.cpython-39.opt-1.pyc \ + build/pylib-android/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc \ + build/pylib-android/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/sre_compile.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/sre_constants.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/sre_parse.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/ssl.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/stat.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/statistics.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/string.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/stringprep.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/struct.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/sunau.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/symbol.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/symtable.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/sysconfig.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/tabnanny.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/tarfile.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/telnetlib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/tempfile.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/textwrap.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/this.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/threading.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/timeit.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/token.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/tokenize.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/trace.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/traceback.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/tracemalloc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/tty.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/types.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/typing.cpython-39.opt-1.pyc \ + build/pylib-android/urllib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/urllib/__pycache__/error.cpython-39.opt-1.pyc \ + build/pylib-android/urllib/__pycache__/parse.cpython-39.opt-1.pyc \ + build/pylib-android/urllib/__pycache__/request.cpython-39.opt-1.pyc \ + build/pylib-android/urllib/__pycache__/response.cpython-39.opt-1.pyc \ + build/pylib-android/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/uu.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/uuid.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/warnings.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/wave.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/weakref.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/webbrowser.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/xdrlib.cpython-39.opt-1.pyc \ + build/pylib-android/xml/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc \ + build/pylib-android/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc \ + build/pylib-android/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc \ + build/pylib-android/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc \ + build/pylib-android/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc \ + build/pylib-android/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc \ + build/pylib-android/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc \ + build/pylib-android/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc \ + build/pylib-android/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc \ + build/pylib-android/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc \ + build/pylib-android/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc \ + build/pylib-android/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc \ + build/pylib-android/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/zipapp.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/zipfile.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/zipimport.cpython-39.opt-1.pyc \ + build/pylib-android/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc \ + build/pylib-android/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc \ + build/pylib-android/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc # Rule to copy src asset scripts to dst. # (and make non-writable so I'm less likely to accidentally edit them there) @@ -2457,25 +2489,25 @@ SCRIPT_TARGETS_PY_PRIVATE_COMMON = \ build/ba_data/python-site-packages/yaml/tokens.py SCRIPT_TARGETS_PYC_PRIVATE_COMMON = \ - build/ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/__pycache__/typing_extensions.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/composer.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/constructor.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/cyaml.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/dumper.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/emitter.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/error.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/events.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/loader.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/nodes.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/parser.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/reader.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/representer.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/resolver.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/scanner.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/serializer.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/tokens.cpython-38.opt-1.pyc + build/ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/__pycache__/typing_extensions.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/composer.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/constructor.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/cyaml.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/dumper.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/emitter.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/error.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/events.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/loader.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/nodes.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/parser.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/reader.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/representer.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/resolver.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/scanner.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/serializer.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/tokens.cpython-39.opt-1.pyc # Rule to copy src asset scripts to dst. # (and make non-writable so I'm less likely to accidentally edit them there) @@ -2490,11 +2522,12 @@ $(eval $(call make-opt-pyc-target,$(element)))) SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \ build/windows/Win32/Lib/__future__.py \ build/windows/Win32/Lib/__phello__.foo.py \ + build/windows/Win32/Lib/_aix_support.py \ build/windows/Win32/Lib/_bootlocale.py \ + build/windows/Win32/Lib/_bootsubprocess.py \ build/windows/Win32/Lib/_collections_abc.py \ build/windows/Win32/Lib/_compat_pickle.py \ build/windows/Win32/Lib/_compression.py \ - build/windows/Win32/Lib/_dummy_thread.py \ build/windows/Win32/Lib/_markupbase.py \ build/windows/Win32/Lib/_osx_support.py \ build/windows/Win32/Lib/_py_abc.py \ @@ -2534,6 +2567,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \ build/windows/Win32/Lib/asyncio/streams.py \ build/windows/Win32/Lib/asyncio/subprocess.py \ build/windows/Win32/Lib/asyncio/tasks.py \ + build/windows/Win32/Lib/asyncio/threads.py \ build/windows/Win32/Lib/asyncio/transports.py \ build/windows/Win32/Lib/asyncio/trsock.py \ build/windows/Win32/Lib/asyncio/unix_events.py \ @@ -2590,7 +2624,6 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \ build/windows/Win32/Lib/difflib.py \ build/windows/Win32/Lib/dis.py \ build/windows/Win32/Lib/doctest.py \ - build/windows/Win32/Lib/dummy_threading.py \ build/windows/Win32/Lib/email/__init__.py \ build/windows/Win32/Lib/email/_encoded_words.py \ build/windows/Win32/Lib/email/_header_value_parser.py \ @@ -2708,7 +2741,6 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \ build/windows/Win32/Lib/encodings/kz1048.py \ build/windows/Win32/Lib/encodings/latin_1.py \ build/windows/Win32/Lib/encodings/mac_arabic.py \ - build/windows/Win32/Lib/encodings/mac_centeuro.py \ build/windows/Win32/Lib/encodings/mac_croatian.py \ build/windows/Win32/Lib/encodings/mac_cyrillic.py \ build/windows/Win32/Lib/encodings/mac_farsi.py \ @@ -2756,6 +2788,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \ build/windows/Win32/Lib/getpass.py \ build/windows/Win32/Lib/gettext.py \ build/windows/Win32/Lib/glob.py \ + build/windows/Win32/Lib/graphlib.py \ build/windows/Win32/Lib/gzip.py \ build/windows/Win32/Lib/hashlib.py \ build/windows/Win32/Lib/heapq.py \ @@ -2773,6 +2806,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \ build/windows/Win32/Lib/importlib/__init__.py \ build/windows/Win32/Lib/importlib/_bootstrap.py \ build/windows/Win32/Lib/importlib/_bootstrap_external.py \ + build/windows/Win32/Lib/importlib/_common.py \ build/windows/Win32/Lib/importlib/abc.py \ build/windows/Win32/Lib/importlib/machinery.py \ build/windows/Win32/Lib/importlib/metadata.py \ @@ -2920,442 +2954,452 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \ build/windows/Win32/Lib/xmlrpc/server.py \ build/windows/Win32/Lib/zipapp.py \ build/windows/Win32/Lib/zipfile.py \ - build/windows/Win32/Lib/zipimport.py + build/windows/Win32/Lib/zipimport.py \ + build/windows/Win32/Lib/zoneinfo/__init__.py \ + build/windows/Win32/Lib/zoneinfo/_common.py \ + build/windows/Win32/Lib/zoneinfo/_tzpath.py \ + build/windows/Win32/Lib/zoneinfo/_zoneinfo.py SCRIPT_TARGETS_PYC_PRIVATE_WIN_WIN32 = \ - build/windows/Win32/Lib/__pycache__/__future__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/__phello__.foo.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_bootlocale.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_collections_abc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_compat_pickle.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_compression.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_dummy_thread.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_markupbase.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_osx_support.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_py_abc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_pydecimal.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_pyio.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_strptime.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_threading_local.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_weakrefset.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/abc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/aifc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/antigravity.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/argparse.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/ast.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/asynchat.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/constants.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/events.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/futures.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/locks.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/log.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/queues.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/runners.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/streams.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/transports.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/asyncore.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/base64.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/bdb.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/binhex.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/bisect.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/bz2.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/cProfile.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/calendar.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/cgi.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/cgitb.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/chunk.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/cmd.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/code.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/codecs.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/codeop.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/collections/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/collections/__pycache__/abc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/colorsys.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/compileall.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/configparser.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/contextlib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/contextvars.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/copy.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/copyreg.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/crypt.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/csv.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/__pycache__/util.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/curses/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/curses/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/curses/__pycache__/has_key.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/curses/__pycache__/panel.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/curses/__pycache__/textpad.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/dataclasses.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/datetime.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/decimal.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/difflib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/dis.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/doctest.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/dummy_threading.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/_policybase.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/base64mime.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/charset.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/contentmanager.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/encoders.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/errors.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/feedparser.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/generator.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/header.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/headerregistry.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/iterators.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/message.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/application.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/audio.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/base.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/image.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/message.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/text.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/parser.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/policy.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/quoprimime.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/utils.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/aliases.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/big5.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/charmap.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp037.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp273.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp424.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp437.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp500.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp720.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp737.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp775.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp850.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp852.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp855.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp856.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp857.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp858.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp860.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp861.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp862.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp863.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp864.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp865.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp866.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp869.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp874.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp875.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp932.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp949.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp950.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/gbk.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/hz.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/idna.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/johab.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/oem.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/palmos.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/punycode.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/undefined.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/enum.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/filecmp.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/fileinput.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/fnmatch.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/formatter.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/fractions.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/ftplib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/functools.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/genericpath.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/getopt.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/getpass.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/gettext.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/glob.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/gzip.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/hashlib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/heapq.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/hmac.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/html/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/html/__pycache__/entities.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/html/__pycache__/parser.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/http/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/http/__pycache__/client.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/http/__pycache__/cookiejar.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/http/__pycache__/cookies.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/http/__pycache__/server.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/imghdr.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/imp.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/abc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/machinery.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/metadata.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/resources.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/util.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/inspect.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/io.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/ipaddress.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/json/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/json/__pycache__/decoder.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/json/__pycache__/encoder.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/json/__pycache__/scanner.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/json/__pycache__/tool.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/keyword.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/linecache.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/locale.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/logging/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/logging/__pycache__/config.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/logging/__pycache__/handlers.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/lzma.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/mailbox.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/mailcap.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/mimetypes.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/modulefinder.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/msilib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/msilib/__pycache__/schema.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/msilib/__pycache__/sequence.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/msilib/__pycache__/text.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/netrc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/nntplib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/ntpath.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/nturl2path.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/numbers.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/opcode.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/operator.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/optparse.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/os.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pathlib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pdb.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pickle.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pickletools.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pipes.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pkgutil.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/platform.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/plistlib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/poplib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/posixpath.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pprint.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/profile.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pstats.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pty.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/py_compile.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pyclbr.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pydoc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/queue.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/quopri.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/random.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/re.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/reprlib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/rlcompleter.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/runpy.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/sched.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/secrets.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/selectors.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/shelve.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/shlex.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/shutil.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/signal.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/site.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/smtpd.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/smtplib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/sndhdr.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/socket.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/socketserver.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/sre_compile.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/sre_constants.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/sre_parse.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/ssl.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/stat.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/statistics.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/string.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/stringprep.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/struct.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/sunau.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/symbol.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/symtable.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/sysconfig.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/tabnanny.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/tarfile.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/telnetlib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/tempfile.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/textwrap.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/this.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/threading.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/timeit.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/token.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/tokenize.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/trace.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/traceback.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/tracemalloc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/tty.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/types.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/typing.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/urllib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/urllib/__pycache__/error.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/urllib/__pycache__/parse.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/urllib/__pycache__/request.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/urllib/__pycache__/response.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/uu.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/uuid.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/warnings.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/wave.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/weakref.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/webbrowser.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/xdrlib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/zipapp.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/zipfile.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/zipimport.cpython-38.opt-1.pyc + build/windows/Win32/Lib/__pycache__/__future__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/__phello__.foo.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_aix_support.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_bootlocale.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_collections_abc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_compat_pickle.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_compression.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_markupbase.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_osx_support.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_py_abc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_pydecimal.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_pyio.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_strptime.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_threading_local.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_weakrefset.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/abc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/aifc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/antigravity.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/argparse.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/ast.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/asynchat.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/constants.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/events.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/futures.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/locks.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/log.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/queues.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/runners.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/streams.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/threads.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/transports.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/asyncore.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/base64.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/bdb.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/binhex.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/bisect.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/bz2.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/cProfile.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/calendar.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/cgi.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/cgitb.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/chunk.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/cmd.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/code.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/codecs.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/codeop.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/collections/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/collections/__pycache__/abc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/colorsys.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/compileall.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/configparser.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/contextlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/contextvars.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/copy.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/copyreg.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/crypt.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/csv.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/__pycache__/util.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/curses/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/curses/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/curses/__pycache__/has_key.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/curses/__pycache__/panel.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/curses/__pycache__/textpad.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/dataclasses.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/datetime.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/decimal.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/difflib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/dis.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/doctest.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/_policybase.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/base64mime.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/charset.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/contentmanager.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/encoders.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/errors.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/feedparser.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/generator.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/header.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/headerregistry.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/iterators.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/message.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/application.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/audio.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/base.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/image.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/message.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/text.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/parser.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/policy.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/quoprimime.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/utils.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/aliases.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/big5.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/charmap.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp037.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp273.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp424.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp437.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp500.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp720.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp737.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp775.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp850.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp852.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp855.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp856.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp857.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp858.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp860.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp861.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp862.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp863.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp864.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp865.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp866.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp869.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp874.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp875.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp932.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp949.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp950.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/gbk.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/hz.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/idna.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/johab.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/oem.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/palmos.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/punycode.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/undefined.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/enum.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/filecmp.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/fileinput.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/fnmatch.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/formatter.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/fractions.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/ftplib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/functools.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/genericpath.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/getopt.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/getpass.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/gettext.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/glob.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/graphlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/gzip.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/hashlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/heapq.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/hmac.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/html/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/html/__pycache__/entities.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/html/__pycache__/parser.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/http/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/http/__pycache__/client.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/http/__pycache__/cookiejar.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/http/__pycache__/cookies.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/http/__pycache__/server.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/imghdr.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/imp.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/_common.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/abc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/machinery.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/metadata.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/resources.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/util.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/inspect.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/io.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/ipaddress.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/json/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/json/__pycache__/decoder.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/json/__pycache__/encoder.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/json/__pycache__/scanner.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/json/__pycache__/tool.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/keyword.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/linecache.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/locale.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/logging/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/logging/__pycache__/config.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/logging/__pycache__/handlers.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/lzma.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/mailbox.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/mailcap.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/mimetypes.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/modulefinder.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/msilib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/msilib/__pycache__/schema.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/msilib/__pycache__/sequence.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/msilib/__pycache__/text.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/netrc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/nntplib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/ntpath.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/nturl2path.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/numbers.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/opcode.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/operator.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/optparse.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/os.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pathlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pdb.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pickle.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pickletools.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pipes.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pkgutil.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/platform.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/plistlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/poplib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/posixpath.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pprint.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/profile.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pstats.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pty.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/py_compile.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pyclbr.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pydoc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/queue.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/quopri.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/random.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/re.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/reprlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/rlcompleter.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/runpy.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/sched.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/secrets.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/selectors.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/shelve.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/shlex.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/shutil.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/signal.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/site.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/smtpd.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/smtplib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/sndhdr.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/socket.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/socketserver.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/sre_compile.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/sre_constants.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/sre_parse.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/ssl.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/stat.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/statistics.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/string.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/stringprep.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/struct.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/sunau.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/symbol.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/symtable.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/sysconfig.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/tabnanny.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/tarfile.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/telnetlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/tempfile.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/textwrap.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/this.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/threading.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/timeit.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/token.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/tokenize.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/trace.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/traceback.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/tracemalloc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/tty.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/types.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/typing.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/urllib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/urllib/__pycache__/error.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/urllib/__pycache__/parse.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/urllib/__pycache__/request.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/urllib/__pycache__/response.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/uu.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/uuid.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/warnings.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/wave.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/weakref.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/webbrowser.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/xdrlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/zipapp.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/zipfile.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/zipimport.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc # Rule to copy src asset scripts to dst. # (and make non-writable so I'm less likely to accidentally edit them there) @@ -3370,11 +3414,12 @@ $(eval $(call make-opt-pyc-target,$(element)))) SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \ build/windows/x64/Lib/__future__.py \ build/windows/x64/Lib/__phello__.foo.py \ + build/windows/x64/Lib/_aix_support.py \ build/windows/x64/Lib/_bootlocale.py \ + build/windows/x64/Lib/_bootsubprocess.py \ build/windows/x64/Lib/_collections_abc.py \ build/windows/x64/Lib/_compat_pickle.py \ build/windows/x64/Lib/_compression.py \ - build/windows/x64/Lib/_dummy_thread.py \ build/windows/x64/Lib/_markupbase.py \ build/windows/x64/Lib/_osx_support.py \ build/windows/x64/Lib/_py_abc.py \ @@ -3414,6 +3459,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \ build/windows/x64/Lib/asyncio/streams.py \ build/windows/x64/Lib/asyncio/subprocess.py \ build/windows/x64/Lib/asyncio/tasks.py \ + build/windows/x64/Lib/asyncio/threads.py \ build/windows/x64/Lib/asyncio/transports.py \ build/windows/x64/Lib/asyncio/trsock.py \ build/windows/x64/Lib/asyncio/unix_events.py \ @@ -3470,7 +3516,6 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \ build/windows/x64/Lib/difflib.py \ build/windows/x64/Lib/dis.py \ build/windows/x64/Lib/doctest.py \ - build/windows/x64/Lib/dummy_threading.py \ build/windows/x64/Lib/email/__init__.py \ build/windows/x64/Lib/email/_encoded_words.py \ build/windows/x64/Lib/email/_header_value_parser.py \ @@ -3588,7 +3633,6 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \ build/windows/x64/Lib/encodings/kz1048.py \ build/windows/x64/Lib/encodings/latin_1.py \ build/windows/x64/Lib/encodings/mac_arabic.py \ - build/windows/x64/Lib/encodings/mac_centeuro.py \ build/windows/x64/Lib/encodings/mac_croatian.py \ build/windows/x64/Lib/encodings/mac_cyrillic.py \ build/windows/x64/Lib/encodings/mac_farsi.py \ @@ -3636,6 +3680,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \ build/windows/x64/Lib/getpass.py \ build/windows/x64/Lib/gettext.py \ build/windows/x64/Lib/glob.py \ + build/windows/x64/Lib/graphlib.py \ build/windows/x64/Lib/gzip.py \ build/windows/x64/Lib/hashlib.py \ build/windows/x64/Lib/heapq.py \ @@ -3653,6 +3698,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \ build/windows/x64/Lib/importlib/__init__.py \ build/windows/x64/Lib/importlib/_bootstrap.py \ build/windows/x64/Lib/importlib/_bootstrap_external.py \ + build/windows/x64/Lib/importlib/_common.py \ build/windows/x64/Lib/importlib/abc.py \ build/windows/x64/Lib/importlib/machinery.py \ build/windows/x64/Lib/importlib/metadata.py \ @@ -3800,442 +3846,452 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \ build/windows/x64/Lib/xmlrpc/server.py \ build/windows/x64/Lib/zipapp.py \ build/windows/x64/Lib/zipfile.py \ - build/windows/x64/Lib/zipimport.py + build/windows/x64/Lib/zipimport.py \ + build/windows/x64/Lib/zoneinfo/__init__.py \ + build/windows/x64/Lib/zoneinfo/_common.py \ + build/windows/x64/Lib/zoneinfo/_tzpath.py \ + build/windows/x64/Lib/zoneinfo/_zoneinfo.py SCRIPT_TARGETS_PYC_PRIVATE_WIN_X64 = \ - build/windows/x64/Lib/__pycache__/__future__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/__phello__.foo.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_bootlocale.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_collections_abc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_compat_pickle.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_compression.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_dummy_thread.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_markupbase.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_osx_support.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_py_abc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_pydecimal.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_pyio.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_strptime.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_threading_local.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_weakrefset.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/abc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/aifc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/antigravity.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/argparse.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/ast.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/asynchat.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/constants.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/events.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/futures.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/locks.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/log.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/queues.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/runners.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/streams.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/transports.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/asyncore.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/base64.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/bdb.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/binhex.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/bisect.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/bz2.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/cProfile.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/calendar.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/cgi.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/cgitb.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/chunk.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/cmd.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/code.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/codecs.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/codeop.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/collections/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/collections/__pycache__/abc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/colorsys.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/compileall.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/configparser.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/contextlib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/contextvars.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/copy.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/copyreg.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/crypt.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/csv.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/__pycache__/util.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/curses/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/curses/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/curses/__pycache__/has_key.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/curses/__pycache__/panel.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/curses/__pycache__/textpad.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/dataclasses.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/datetime.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/decimal.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/difflib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/dis.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/doctest.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/dummy_threading.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/_policybase.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/base64mime.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/charset.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/contentmanager.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/encoders.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/errors.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/feedparser.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/generator.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/header.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/headerregistry.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/iterators.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/message.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/application.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/audio.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/base.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/image.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/message.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/text.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/parser.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/policy.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/quoprimime.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/utils.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/aliases.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/big5.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/charmap.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp037.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp273.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp424.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp437.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp500.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp720.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp737.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp775.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp850.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp852.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp855.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp856.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp857.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp858.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp860.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp861.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp862.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp863.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp864.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp865.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp866.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp869.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp874.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp875.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp932.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp949.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp950.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/gbk.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/hz.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/idna.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/johab.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/oem.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/palmos.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/punycode.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/undefined.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/enum.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/filecmp.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/fileinput.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/fnmatch.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/formatter.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/fractions.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/ftplib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/functools.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/genericpath.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/getopt.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/getpass.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/gettext.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/glob.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/gzip.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/hashlib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/heapq.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/hmac.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/html/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/html/__pycache__/entities.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/html/__pycache__/parser.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/http/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/http/__pycache__/client.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/http/__pycache__/cookiejar.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/http/__pycache__/cookies.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/http/__pycache__/server.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/imghdr.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/imp.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/abc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/machinery.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/metadata.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/resources.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/util.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/inspect.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/io.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/ipaddress.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/json/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/json/__pycache__/decoder.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/json/__pycache__/encoder.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/json/__pycache__/scanner.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/json/__pycache__/tool.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/keyword.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/linecache.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/locale.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/logging/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/logging/__pycache__/config.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/logging/__pycache__/handlers.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/lzma.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/mailbox.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/mailcap.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/mimetypes.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/modulefinder.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/msilib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/msilib/__pycache__/schema.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/msilib/__pycache__/sequence.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/msilib/__pycache__/text.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/netrc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/nntplib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/ntpath.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/nturl2path.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/numbers.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/opcode.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/operator.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/optparse.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/os.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pathlib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pdb.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pickle.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pickletools.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pipes.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pkgutil.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/platform.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/plistlib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/poplib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/posixpath.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pprint.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/profile.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pstats.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pty.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/py_compile.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pyclbr.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pydoc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/queue.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/quopri.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/random.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/re.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/reprlib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/rlcompleter.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/runpy.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/sched.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/secrets.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/selectors.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/shelve.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/shlex.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/shutil.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/signal.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/site.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/smtpd.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/smtplib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/sndhdr.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/socket.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/socketserver.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/sre_compile.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/sre_constants.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/sre_parse.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/ssl.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/stat.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/statistics.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/string.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/stringprep.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/struct.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/sunau.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/symbol.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/symtable.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/sysconfig.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/tabnanny.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/tarfile.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/telnetlib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/tempfile.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/textwrap.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/this.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/threading.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/timeit.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/token.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/tokenize.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/trace.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/traceback.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/tracemalloc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/tty.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/types.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/typing.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/urllib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/urllib/__pycache__/error.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/urllib/__pycache__/parse.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/urllib/__pycache__/request.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/urllib/__pycache__/response.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/uu.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/uuid.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/warnings.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/wave.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/weakref.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/webbrowser.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/xdrlib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/zipapp.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/zipfile.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/zipimport.cpython-38.opt-1.pyc + build/windows/x64/Lib/__pycache__/__future__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/__phello__.foo.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_aix_support.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_bootlocale.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_collections_abc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_compat_pickle.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_compression.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_markupbase.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_osx_support.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_py_abc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_pydecimal.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_pyio.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_strptime.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_threading_local.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_weakrefset.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/abc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/aifc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/antigravity.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/argparse.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/ast.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/asynchat.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/constants.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/events.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/futures.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/locks.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/log.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/queues.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/runners.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/streams.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/threads.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/transports.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/asyncore.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/base64.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/bdb.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/binhex.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/bisect.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/bz2.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/cProfile.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/calendar.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/cgi.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/cgitb.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/chunk.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/cmd.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/code.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/codecs.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/codeop.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/collections/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/collections/__pycache__/abc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/colorsys.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/compileall.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/configparser.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/contextlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/contextvars.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/copy.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/copyreg.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/crypt.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/csv.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/__pycache__/util.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/curses/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/curses/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/curses/__pycache__/has_key.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/curses/__pycache__/panel.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/curses/__pycache__/textpad.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/dataclasses.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/datetime.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/decimal.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/difflib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/dis.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/doctest.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/_policybase.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/base64mime.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/charset.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/contentmanager.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/encoders.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/errors.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/feedparser.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/generator.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/header.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/headerregistry.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/iterators.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/message.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/application.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/audio.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/base.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/image.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/message.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/text.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/parser.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/policy.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/quoprimime.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/utils.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/aliases.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/big5.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/charmap.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp037.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp273.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp424.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp437.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp500.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp720.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp737.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp775.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp850.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp852.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp855.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp856.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp857.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp858.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp860.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp861.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp862.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp863.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp864.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp865.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp866.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp869.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp874.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp875.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp932.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp949.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp950.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/gbk.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/hz.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/idna.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/johab.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/oem.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/palmos.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/punycode.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/undefined.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/enum.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/filecmp.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/fileinput.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/fnmatch.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/formatter.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/fractions.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/ftplib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/functools.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/genericpath.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/getopt.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/getpass.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/gettext.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/glob.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/graphlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/gzip.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/hashlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/heapq.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/hmac.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/html/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/html/__pycache__/entities.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/html/__pycache__/parser.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/http/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/http/__pycache__/client.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/http/__pycache__/cookiejar.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/http/__pycache__/cookies.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/http/__pycache__/server.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/imghdr.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/imp.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/_common.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/abc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/machinery.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/metadata.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/resources.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/util.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/inspect.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/io.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/ipaddress.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/json/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/json/__pycache__/decoder.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/json/__pycache__/encoder.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/json/__pycache__/scanner.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/json/__pycache__/tool.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/keyword.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/linecache.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/locale.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/logging/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/logging/__pycache__/config.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/logging/__pycache__/handlers.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/lzma.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/mailbox.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/mailcap.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/mimetypes.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/modulefinder.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/msilib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/msilib/__pycache__/schema.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/msilib/__pycache__/sequence.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/msilib/__pycache__/text.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/netrc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/nntplib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/ntpath.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/nturl2path.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/numbers.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/opcode.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/operator.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/optparse.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/os.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pathlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pdb.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pickle.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pickletools.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pipes.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pkgutil.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/platform.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/plistlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/poplib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/posixpath.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pprint.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/profile.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pstats.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pty.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/py_compile.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pyclbr.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pydoc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/queue.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/quopri.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/random.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/re.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/reprlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/rlcompleter.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/runpy.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/sched.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/secrets.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/selectors.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/shelve.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/shlex.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/shutil.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/signal.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/site.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/smtpd.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/smtplib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/sndhdr.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/socket.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/socketserver.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/sre_compile.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/sre_constants.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/sre_parse.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/ssl.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/stat.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/statistics.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/string.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/stringprep.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/struct.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/sunau.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/symbol.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/symtable.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/sysconfig.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/tabnanny.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/tarfile.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/telnetlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/tempfile.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/textwrap.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/this.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/threading.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/timeit.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/token.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/tokenize.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/trace.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/traceback.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/tracemalloc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/tty.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/types.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/typing.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/urllib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/urllib/__pycache__/error.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/urllib/__pycache__/parse.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/urllib/__pycache__/request.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/urllib/__pycache__/response.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/uu.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/uuid.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/warnings.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/wave.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/weakref.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/webbrowser.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/xdrlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/zipapp.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/zipfile.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/zipimport.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc # Rule to copy src asset scripts to dst. # (and make non-writable so I'm less likely to accidentally edit them there) @@ -6850,11 +6906,17 @@ EXTRAS_TARGETS_WIN_WIN32 = \ build/windows/Win32/DLLs/_testconsole_d.pyd \ build/windows/Win32/DLLs/_testimportmultiple.pyd \ build/windows/Win32/DLLs/_testimportmultiple_d.pyd \ + build/windows/Win32/DLLs/_testinternalcapi.pyd \ + build/windows/Win32/DLLs/_testinternalcapi_d.pyd \ build/windows/Win32/DLLs/_testmultiphase.pyd \ build/windows/Win32/DLLs/_testmultiphase_d.pyd \ build/windows/Win32/DLLs/_tkinter.pyd \ build/windows/Win32/DLLs/_tkinter_d.lib \ build/windows/Win32/DLLs/_tkinter_d.pyd \ + build/windows/Win32/DLLs/_uuid.pyd \ + build/windows/Win32/DLLs/_uuid_d.pyd \ + build/windows/Win32/DLLs/_zoneinfo.pyd \ + build/windows/Win32/DLLs/_zoneinfo_d.pyd \ build/windows/Win32/DLLs/libcrypto-1_1.dll \ build/windows/Win32/DLLs/libffi-7.dll \ build/windows/Win32/DLLs/libssl-1_1.dll \ @@ -6883,8 +6945,8 @@ EXTRAS_TARGETS_WIN_WIN32 = \ build/windows/Win32/msvcp140d.dll \ build/windows/Win32/ogg.dll \ build/windows/Win32/python.exe \ - build/windows/Win32/python38.dll \ - build/windows/Win32/python38_d.dll \ + build/windows/Win32/python39.dll \ + build/windows/Win32/python39_d.dll \ build/windows/Win32/python_d.exe \ build/windows/Win32/pythonw.exe \ build/windows/Win32/pythonw_d.exe \ @@ -6936,11 +6998,17 @@ EXTRAS_TARGETS_WIN_X64 = \ build/windows/x64/DLLs/_testconsole_d.pyd \ build/windows/x64/DLLs/_testimportmultiple.pyd \ build/windows/x64/DLLs/_testimportmultiple_d.pyd \ + build/windows/x64/DLLs/_testinternalcapi.pyd \ + build/windows/x64/DLLs/_testinternalcapi_d.pyd \ build/windows/x64/DLLs/_testmultiphase.pyd \ build/windows/x64/DLLs/_testmultiphase_d.pyd \ build/windows/x64/DLLs/_tkinter.pyd \ build/windows/x64/DLLs/_tkinter_d.lib \ build/windows/x64/DLLs/_tkinter_d.pyd \ + build/windows/x64/DLLs/_uuid.pyd \ + build/windows/x64/DLLs/_uuid_d.pyd \ + build/windows/x64/DLLs/_zoneinfo.pyd \ + build/windows/x64/DLLs/_zoneinfo_d.pyd \ build/windows/x64/DLLs/libcrypto-1_1.dll \ build/windows/x64/DLLs/libffi-7.dll \ build/windows/x64/DLLs/libssl-1_1.dll \ @@ -6969,8 +7037,8 @@ EXTRAS_TARGETS_WIN_X64 = \ build/windows/x64/msvcp140d.dll \ build/windows/x64/ogg.dll \ build/windows/x64/python.exe \ - build/windows/x64/python38.dll \ - build/windows/x64/python38_d.dll \ + build/windows/x64/python39.dll \ + build/windows/x64/python39_d.dll \ build/windows/x64/python_d.exe \ build/windows/x64/pythonw.exe \ build/windows/x64/pythonw_d.exe \ diff --git a/assets/src/ba_data/python/._ba_sources_hash b/assets/src/ba_data/python/._ba_sources_hash index 3b11222c..e4b6e04e 100644 --- a/assets/src/ba_data/python/._ba_sources_hash +++ b/assets/src/ba_data/python/._ba_sources_hash @@ -1 +1 @@ -67151430861016518839485378649631062235 \ No newline at end of file +291441930138756424684870937756526517762 \ No newline at end of file diff --git a/assets/src/ba_data/python/_ba.py b/assets/src/ba_data/python/_ba.py index 74a5f289..b8620a00 100644 --- a/assets/src/ba_data/python/_ba.py +++ b/assets/src/ba_data/python/_ba.py @@ -37,8 +37,7 @@ from typing import TYPE_CHECKING, overload, Sequence, TypeVar from ba._generated.enums import TimeFormat, TimeType if TYPE_CHECKING: - from typing import (Any, Dict, Callable, Tuple, List, Optional, Union, - List, Type, Literal) + from typing import Any, Callable, Optional, Union, Literal from ba._app import App import ba @@ -386,9 +385,9 @@ class Material: label: str def add_actions(self, - actions: Tuple, - conditions: Optional[Tuple] = None) -> None: - """add_actions(actions: Tuple, conditions: Optional[Tuple] = None) + actions: tuple, + conditions: Optional[tuple] = None) -> None: + """add_actions(actions: tuple, conditions: Optional[tuple] = None) -> None Add one or more actions to the material, optionally with conditions. @@ -724,16 +723,16 @@ class Node: # Show that ur return type varies based on "doraise" value: @overload def getdelegate(self, - type: Type[_T], + type: type[_T], doraise: Literal[False] = False) -> Optional[_T]: ... @overload - def getdelegate(self, type: Type[_T], doraise: Literal[True]) -> _T: + def getdelegate(self, type: type[_T], doraise: Literal[True]) -> _T: ... def getdelegate(self, type: Any, doraise: bool = False) -> Any: - """getdelegate(type: Type, doraise: bool = False) -> + """getdelegate(type: type, doraise: bool = False) -> Return the node's current delegate object if it matches a certain type. @@ -849,9 +848,9 @@ class SessionPlayer: character: str activityplayer: Optional[ba.Player] - def assigninput(self, type: Union[ba.InputType, Tuple[ba.InputType, ...]], + def assigninput(self, type: Union[ba.InputType, tuple[ba.InputType, ...]], call: Callable) -> None: - """assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]], + """assigninput(type: Union[ba.InputType, tuple[ba.InputType, ...]], call: Callable) -> None Set the python callable to be run for one or more types of input. @@ -877,15 +876,15 @@ class SessionPlayer: """ return str() - def get_icon(self) -> Dict[str, Any]: - """get_icon() -> Dict[str, Any] + def get_icon(self) -> dict[str, Any]: + """get_icon() -> dict[str, Any] Returns the character's icon (images, colors, etc contained in a dict) """ return {'foo': 'bar'} - def get_icon_info(self) -> Dict[str, Any]: - """get_icon_info() -> Dict[str, Any] + def get_icon_info(self) -> dict[str, Any]: + """get_icon_info() -> dict[str, Any] (internal) """ @@ -1203,15 +1202,15 @@ class Widget: """ return bool() - def get_children(self) -> List[ba.Widget]: - """get_children() -> List[ba.Widget] + def get_children(self) -> list[ba.Widget]: + """get_children() -> list[ba.Widget] Returns any child Widgets of this Widget. """ return [Widget()] - def get_screen_space_center(self) -> Tuple[float, float]: - """get_screen_space_center() -> Tuple[float, float] + def get_screen_space_center(self) -> tuple[float, float]: + """get_screen_space_center() -> tuple[float, float] Returns the coords of the Widget center relative to the center of the screen. This can be useful for placing pop-up windows and other special @@ -1993,8 +1992,8 @@ def get_account_type() -> str: return str() -def get_appconfig_builtin_keys() -> List[str]: - """get_appconfig_builtin_keys() -> List[str] +def get_appconfig_builtin_keys() -> list[str]: + """get_appconfig_builtin_keys() -> list[str] (internal) """ @@ -2009,8 +2008,8 @@ def get_appconfig_default_value(key: str) -> Any: return _uninferrable() -def get_chat_messages() -> List[str]: - """get_chat_messages() -> List[str] +def get_chat_messages() -> list[str]: + """get_chat_messages() -> list[str] (internal) """ @@ -2050,8 +2049,8 @@ def get_connection_to_host_info() -> dict: return dict() -def get_display_resolution() -> Optional[Tuple[int, int]]: - """get_display_resolution() -> Optional[Tuple[int, int]] +def get_display_resolution() -> Optional[tuple[int, int]]: + """get_display_resolution() -> Optional[tuple[int, int]] (internal) @@ -2095,8 +2094,8 @@ def get_game_port() -> int: return int() -def get_game_roster() -> List[Dict[str, Any]]: - """get_game_roster() -> List[Dict[str, Any]] +def get_game_roster() -> list[dict[str, Any]]: + """get_game_roster() -> list[dict[str, Any]] (internal) """ @@ -2895,8 +2894,8 @@ def mac_music_app_get_library_source() -> None: return None -def mac_music_app_get_playlists() -> List[str]: - """mac_music_app_get_playlists() -> List[str] +def mac_music_app_get_playlists() -> list[str]: + """mac_music_app_get_playlists() -> list[str] (internal) """ @@ -3001,9 +3000,9 @@ def music_player_stop() -> None: return None -def new_host_session(sessiontype: Type[ba.Session], +def new_host_session(sessiontype: type[ba.Session], benchmark_type: str = None) -> None: - """new_host_session(sessiontype: Type[ba.Session], + """new_host_session(sessiontype: type[ba.Session], benchmark_type: str = None) -> None (internal) @@ -3019,9 +3018,9 @@ def new_replay_session(file_name: str) -> None: return None -def newactivity(activity_type: Type[ba.Activity], +def newactivity(activity_type: type[ba.Activity], settings: dict = None) -> ba.Activity: - """newactivity(activity_type: Type[ba.Activity], + """newactivity(activity_type: type[ba.Activity], settings: dict = None) -> ba.Activity Instantiates a ba.Activity given a type object. @@ -3370,9 +3369,9 @@ def run_transactions() -> None: def safecolor(color: Sequence[float], - target_intensity: float = 0.6) -> Tuple[float, ...]: + target_intensity: float = 0.6) -> tuple[float, ...]: """safecolor(color: Sequence[float], target_intensity: float = 0.6) - -> Tuple[float, ...] + -> tuple[float, ...] Given a color tuple, return a color safe to display as text. @@ -3387,13 +3386,13 @@ def safecolor(color: Sequence[float], def screenmessage(message: Union[str, ba.Lstr], color: Sequence[float] = None, top: bool = False, - image: Dict[str, Any] = None, + image: dict[str, Any] = None, log: bool = False, clients: Sequence[int] = None, transient: bool = False) -> None: """screenmessage(message: Union[str, ba.Lstr], color: Sequence[float] = None, top: bool = False, - image: Dict[str, Any] = None, log: bool = False, + image: dict[str, Any] = None, log: bool = False, clients: Sequence[int] = None, transient: bool = False) -> None Print a message to the local client's screen, in a given color. @@ -3456,8 +3455,8 @@ def scrollwidget(edit: ba.Widget = None, return ba.Widget() -def set_admins(admins: List[str]) -> None: - """set_admins(admins: List[str]) -> None +def set_admins(admins: list[str]) -> None: + """set_admins(admins: list[str]) -> None (internal) """ @@ -3513,10 +3512,10 @@ def set_have_mods(have_mods: bool) -> None: def set_internal_language_keys( - listobj: List[Tuple[str, str]], - random_names_list: List[Tuple[str, str]]) -> None: - """set_internal_language_keys(listobj: List[Tuple[str, str]], - random_names_list: List[Tuple[str, str]]) -> None + listobj: list[tuple[str, str]], + random_names_list: list[tuple[str, str]]) -> None: + """set_internal_language_keys(listobj: list[tuple[str, str]], + random_names_list: list[tuple[str, str]]) -> None (internal) """ @@ -3532,8 +3531,8 @@ def set_low_level_config_value(key: str, value: int) -> None: def set_map_bounds( - bounds: Tuple[float, float, float, float, float, float]) -> None: - """set_map_bounds(bounds: Tuple[float, float, float, float, float, float]) + bounds: tuple[float, float, float, float, float, float]) -> None: + """set_map_bounds(bounds: tuple[float, float, float, float, float, float]) -> None (internal) @@ -4020,18 +4019,18 @@ def timer(time: float, return None -def tournament_query(callback: Callable[[Optional[Dict]], None], - args: Dict) -> None: - """tournament_query(callback: Callable[[Optional[Dict]], None], - args: Dict) -> None +def tournament_query(callback: Callable[[Optional[dict]], None], + args: dict) -> None: + """tournament_query(callback: Callable[[Optional[dict]], None], + args: dict) -> None (internal) """ return None -def uibounds() -> Tuple[float, float, float, float]: - """uibounds() -> Tuple[float, float, float, float] +def uibounds() -> tuple[float, float, float, float]: + """uibounds() -> tuple[float, float, float, float] (internal) diff --git a/assets/src/ba_data/python/ba/_account.py b/assets/src/ba_data/python/ba/_account.py index 4ef02aaf..a072ae63 100644 --- a/assets/src/ba_data/python/ba/_account.py +++ b/assets/src/ba_data/python/ba/_account.py @@ -11,7 +11,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Any, Optional, Dict, List, Tuple + from typing import Any, Optional import ba @@ -24,16 +24,16 @@ class AccountSubsystem: """ def __init__(self) -> None: - self.account_tournament_list: Optional[Tuple[int, List[str]]] = None + self.account_tournament_list: Optional[tuple[int, list[str]]] = None # FIXME: should abstract/structure these. - self.tournament_info: Dict = {} - self.league_rank_cache: Dict = {} + self.tournament_info: dict = {} + self.league_rank_cache: dict = {} self.last_post_purchase_message_time: Optional[float] = None # If we try to run promo-codes due to launch-args/etc we might # not be signed in yet; go ahead and queue them up in that case. - self.pending_promo_codes: List[str] = [] + self.pending_promo_codes: list[str] = [] def on_app_launch(self) -> None: """Called when the app is done bootstrapping.""" @@ -74,7 +74,7 @@ class AccountSubsystem: return self.league_rank_cache.get('info', None) def get_league_rank_points(self, - data: Optional[Dict[str, Any]], + data: Optional[dict[str, Any]], subset: str = None) -> int: """(internal)""" if data is None: @@ -132,7 +132,7 @@ class AccountSubsystem: TimeFormat.MILLISECONDS) cache_entry['valid'] = True - def get_purchased_icons(self) -> List[str]: + def get_purchased_icons(self) -> list[str]: """(internal)""" # pylint: disable=cyclic-import from ba import _store diff --git a/assets/src/ba_data/python/ba/_achievement.py b/assets/src/ba_data/python/ba/_achievement.py index a00e530f..13634cfc 100644 --- a/assets/src/ba_data/python/ba/_achievement.py +++ b/assets/src/ba_data/python/ba/_achievement.py @@ -9,7 +9,7 @@ import _ba from ba._error import print_exception if TYPE_CHECKING: - from typing import Any, Sequence, List, Dict, Union, Optional, Tuple, Set + from typing import Any, Sequence, Union, Optional import ba # This could use some cleanup. @@ -71,11 +71,11 @@ class AchievementSubsystem: """ def __init__(self) -> None: - self.achievements: List[Achievement] = [] - self.achievements_to_display: (List[Tuple[ba.Achievement, bool]]) = [] + self.achievements: list[Achievement] = [] + self.achievements_to_display: (list[tuple[ba.Achievement, bool]]) = [] self.achievement_display_timer: Optional[_ba.Timer] = None self.last_achievement_display_time: float = 0.0 - self.achievement_completion_banner_slots: Set[int] = set() + self.achievement_completion_banner_slots: set[int] = set() self._init_achievements() def _init_achievements(self) -> None: @@ -374,7 +374,7 @@ class AchievementSubsystem: return achs[0] def achievements_for_coop_level(self, - level_name: str) -> List[Achievement]: + level_name: str) -> list[Achievement]: """Given a level name, return achievements available for it.""" # For the Easy campaign we return achievements for the Default @@ -612,7 +612,7 @@ class Achievement: delay: float, outdelay: float = None, color: Sequence[float] = None, - style: str = 'post_game') -> List[ba.Actor]: + style: str = 'post_game') -> list[ba.Actor]: """Create a display for the Achievement. Shows the Achievement icon, name, and description. @@ -663,7 +663,7 @@ class Achievement: print_exception('Error determining campaign.') hmo = False - objs: List[ba.Actor] + objs: list[ba.Actor] if in_game_colors: objs = [] @@ -898,12 +898,12 @@ class Achievement: transition_out_delay=None).autoretain()) return objs - def _getconfig(self) -> Dict[str, Any]: + def _getconfig(self) -> dict[str, Any]: """ Return the sub-dict in settings where this achievement's state is stored, creating it if need be. """ - val: Dict[str, Any] = (_ba.app.config.setdefault( + val: dict[str, Any] = (_ba.app.config.setdefault( 'Achievements', {}).setdefault(self._name, {'Complete': False})) assert isinstance(val, dict) return val @@ -971,7 +971,7 @@ class Achievement: i += 1 assert self._completion_banner_slot is not None y_offs = 110 * self._completion_banner_slot - objs: List[ba.Actor] = [] + objs: list[ba.Actor] = [] obj = Image(_ba.gettexture('shadow'), position=(-30, 30 + y_offs), front=True, diff --git a/assets/src/ba_data/python/ba/_activity.py b/assets/src/ba_data/python/ba/_activity.py index 4c9190ba..701de8e1 100644 --- a/assets/src/ba_data/python/ba/_activity.py +++ b/assets/src/ba_data/python/ba/_activity.py @@ -16,8 +16,7 @@ from ba._general import Call, verify_object_death from ba._messages import UNHANDLED if TYPE_CHECKING: - from weakref import ReferenceType - from typing import Optional, Type, Any, Dict, List + from typing import Optional, Any import ba from bastd.actor.respawnicon import RespawnIcon @@ -58,9 +57,9 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]): # pylint: disable=too-many-public-methods # Annotating attr types at the class level lets us introspect at runtime. - settings_raw: Dict[str, Any] - teams: List[TeamType] - players: List[PlayerType] + settings_raw: dict[str, Any] + teams: list[TeamType] + players: list[PlayerType] # Whether to print every time a player dies. This can be pertinent # in games such as Death-Match but can be annoying in games where it @@ -150,8 +149,8 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]): # Player/Team types should have been specified as type args; # grab those. - self._playertype: Type[PlayerType] - self._teamtype: Type[TeamType] + self._playertype: type[PlayerType] + self._teamtype: type[TeamType] self._setup_player_and_team_types() # FIXME: Relocate or remove the need for this stuff. @@ -160,7 +159,7 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]): self._session = weakref.ref(_ba.getsession()) # Preloaded data for actors, maps, etc; indexed by type. - self.preloads: Dict[Type, Any] = {} + self.preloads: dict[type, Any] = {} # Hopefully can eventually kill this; activities should # validate/store whatever settings they need at init time @@ -172,17 +171,17 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]): self._has_ended = False self._activity_death_check_timer: Optional[ba.Timer] = None self._expired = False - self._delay_delete_players: List[PlayerType] = [] - self._delay_delete_teams: List[TeamType] = [] - self._players_that_left: List[ReferenceType[PlayerType]] = [] - self._teams_that_left: List[ReferenceType[TeamType]] = [] + self._delay_delete_players: list[PlayerType] = [] + self._delay_delete_teams: list[TeamType] = [] + self._players_that_left: list[weakref.ref[PlayerType]] = [] + self._teams_that_left: list[weakref.ref[TeamType]] = [] self._transitioning_out = False # A handy place to put most actors; this list is pruned of dead # actors regularly and these actors are insta-killed as the activity # is dying. - self._actor_refs: List[ba.Actor] = [] - self._actor_weak_refs: List[ReferenceType[ba.Actor]] = [] + self._actor_refs: list[ba.Actor] = [] + self._actor_weak_refs: list[weakref.ref[ba.Actor]] = [] self._last_prune_dead_actors_time = _ba.time() self._prune_dead_actors_timer: Optional[ba.Timer] = None @@ -262,12 +261,12 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]): return self._expired @property - def playertype(self) -> Type[PlayerType]: + def playertype(self) -> type[PlayerType]: """The type of ba.Player this Activity is using.""" return self._playertype @property - def teamtype(self) -> Type[TeamType]: + def teamtype(self) -> type[TeamType]: """The type of ba.Team this Activity is using.""" return self._teamtype @@ -709,8 +708,8 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]): assert issubclass(self._teamtype, Team) @classmethod - def _check_activity_death(cls, activity_ref: ReferenceType[Activity], - counter: List[int]) -> None: + def _check_activity_death(cls, activity_ref: weakref.ref[Activity], + counter: list[int]) -> None: """Sanity check to make sure an Activity was destroyed properly. Receives a weakref to a ba.Activity which should have torn itself diff --git a/assets/src/ba_data/python/ba/_activitytypes.py b/assets/src/ba_data/python/ba/_activitytypes.py index 9c64ad90..8007130a 100644 --- a/assets/src/ba_data/python/ba/_activitytypes.py +++ b/assets/src/ba_data/python/ba/_activitytypes.py @@ -14,7 +14,7 @@ from ba._player import EmptyPlayer # pylint: disable=W0611 from ba._team import EmptyTeam # pylint: disable=W0611 if TYPE_CHECKING: - from typing import Any, Dict, Optional + from typing import Optional import ba from ba._lobby import JoinInfo diff --git a/assets/src/ba_data/python/ba/_app.py b/assets/src/ba_data/python/ba/_app.py index 7e5c2e61..2ae720f6 100644 --- a/assets/src/ba_data/python/ba/_app.py +++ b/assets/src/ba_data/python/ba/_app.py @@ -21,7 +21,7 @@ from ba._net import NetworkSubsystem if TYPE_CHECKING: import ba from bastd.actor import spazappearance - from typing import Optional, Dict, Set, Any, Type, Tuple, Callable, List + from typing import Optional, Any, Callable class App: @@ -167,7 +167,7 @@ class App: return self._env['vr_mode'] @property - def ui_bounds(self) -> Tuple[float, float, float, float]: + def ui_bounds(self) -> tuple[float, float, float, float]: """Bounds of the 'safe' screen area in ui space. This tuple contains: (x-min, x-max, y-min, y-max) @@ -208,7 +208,7 @@ class App: self.allow_ticket_purchases: bool = not self.iircade_mode # Misc. - self.tips: List[str] = [] + self.tips: list[str] = [] self.stress_test_reset_timer: Optional[ba.Timer] = None self.did_weak_call_warning = False @@ -225,7 +225,7 @@ class App: self.input_map_hash: Optional[str] = None # Co-op Campaigns. - self.campaigns: Dict[str, ba.Campaign] = {} + self.campaigns: dict[str, ba.Campaign] = {} # Server Mode. self.server: Optional[ba.ServerController] = None @@ -250,27 +250,27 @@ class App: self.main_menu_last_news_fetch_time: Optional[float] = None # Spaz. - self.spaz_appearances: Dict[str, spazappearance.Appearance] = {} + self.spaz_appearances: dict[str, spazappearance.Appearance] = {} self.last_spaz_turbo_warn_time: float = -99999.0 # Maps. - self.maps: Dict[str, Type[ba.Map]] = {} + self.maps: dict[str, type[ba.Map]] = {} # Gameplay. self.teams_series_length = 7 self.ffa_series_length = 24 - self.coop_session_args: Dict = {} + self.coop_session_args: dict = {} self.value_test_defaults: dict = {} self.first_main_menu = True # FIXME: Move to mainmenu class. self.did_menu_intro = False # FIXME: Move to mainmenu class. self.main_menu_window_refresh_check_count = 0 # FIXME: Mv to mainmenu. self.main_menu_resume_callbacks: list = [] # Can probably go away. - self.special_offer: Optional[Dict] = None + self.special_offer: Optional[dict] = None self.ping_thread_count = 0 - self.invite_confirm_windows: List[Any] = [] # FIXME: Don't use Any. - self.store_layout: Optional[Dict[str, List[Dict[str, Any]]]] = None - self.store_items: Optional[Dict[str, Dict]] = None + self.invite_confirm_windows: list[Any] = [] # FIXME: Don't use Any. + self.store_layout: Optional[dict[str, list[dict[str, Any]]]] = None + self.store_items: Optional[dict[str, dict]] = None self.pro_sale_start_time: Optional[int] = None self.pro_sale_start_val: Optional[int] = None @@ -518,7 +518,7 @@ class App: def launch_coop_game(self, game: str, force: bool = False, - args: Dict = None) -> bool: + args: dict = None) -> bool: """High level way to launch a local co-op session.""" # pylint: disable=cyclic-import from ba._campaign import getcampaign diff --git a/assets/src/ba_data/python/ba/_appconfig.py b/assets/src/ba_data/python/ba/_appconfig.py index c60c01cd..611483e8 100644 --- a/assets/src/ba_data/python/ba/_appconfig.py +++ b/assets/src/ba_data/python/ba/_appconfig.py @@ -8,7 +8,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Any, List, Tuple + from typing import Any class AppConfig(dict): @@ -57,7 +57,7 @@ class AppConfig(dict): """ return _ba.get_appconfig_default_value(key) - def builtin_keys(self) -> List[str]: + def builtin_keys(self) -> list[str]: """Return the list of valid key names recognized by ba.AppConfig. This set of keys can be used with resolve(), default_value(), etc. @@ -93,7 +93,7 @@ class AppConfig(dict): self.commit() -def read_config() -> Tuple[AppConfig, bool]: +def read_config() -> tuple[AppConfig, bool]: """Read the game config.""" import os import json diff --git a/assets/src/ba_data/python/ba/_appdelegate.py b/assets/src/ba_data/python/ba/_appdelegate.py index f6282bec..12628701 100644 --- a/assets/src/ba_data/python/ba/_appdelegate.py +++ b/assets/src/ba_data/python/ba/_appdelegate.py @@ -6,7 +6,7 @@ from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: - from typing import Type, Optional, Any, Dict, Callable + from typing import Optional, Callable import ba @@ -17,8 +17,8 @@ class AppDelegate: """ def create_default_game_settings_ui( - self, gameclass: Type[ba.GameActivity], - sessiontype: Type[ba.Session], settings: Optional[dict], + self, gameclass: type[ba.GameActivity], + sessiontype: type[ba.Session], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None]) -> None: """Launch a UI to configure the given game config. diff --git a/assets/src/ba_data/python/ba/_apputils.py b/assets/src/ba_data/python/ba/_apputils.py index 9146b0f4..ea888907 100644 --- a/assets/src/ba_data/python/ba/_apputils.py +++ b/assets/src/ba_data/python/ba/_apputils.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import List, Any, Callable, Optional + from typing import Any import ba @@ -186,9 +186,9 @@ def print_live_object_warnings(when: Any, from ba._actor import Actor from ba._activity import Activity - sessions: List[ba.Session] = [] - activities: List[ba.Activity] = [] - actors: List[ba.Actor] = [] + sessions: list[ba.Session] = [] + activities: list[ba.Activity] = [] + actors: list[ba.Actor] = [] # Once we come across leaked stuff, printing again is probably # redundant. diff --git a/assets/src/ba_data/python/ba/_assetmanager.py b/assets/src/ba_data/python/ba/_assetmanager.py index 33645183..c12f96db 100644 --- a/assets/src/ba_data/python/ba/_assetmanager.py +++ b/assets/src/ba_data/python/ba/_assetmanager.py @@ -4,7 +4,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Dict +from typing import TYPE_CHECKING, Annotated from dataclasses import dataclass, field from pathlib import Path import threading @@ -15,14 +15,11 @@ import time import os import sys -from typing_extensions import Annotated - from efro.dataclassio import (ioprepped, IOAttrs, dataclass_from_json, dataclass_to_json) if TYPE_CHECKING: from bacommon.assets import AssetPackageFlavor - from typing import List @ioprepped @@ -36,7 +33,7 @@ class FileValue: class State: """Holds all persistent state for the asset-manager.""" - files: Annotated[Dict[str, FileValue], + files: Annotated[dict[str, FileValue], IOAttrs('files')] = field(default_factory=dict) @@ -63,7 +60,7 @@ class AssetManager: def launch_gather( self, - packages: List[str], + packages: list[str], flavor: AssetPackageFlavor, account_token: str, ) -> AssetGather: diff --git a/assets/src/ba_data/python/ba/_benchmark.py b/assets/src/ba_data/python/ba/_benchmark.py index 9a4d1035..119296c9 100644 --- a/assets/src/ba_data/python/ba/_benchmark.py +++ b/assets/src/ba_data/python/ba/_benchmark.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Dict, Any, Sequence + from typing import Any, Sequence import ba @@ -88,7 +88,7 @@ def stop_stress_test() -> None: _ba.app.stress_test_reset_timer = None -def start_stress_test(args: Dict[str, Any]) -> None: +def start_stress_test(args: dict[str, Any]) -> None: """(internal)""" from ba._general import Call from ba._dualteamsession import DualTeamSession @@ -125,7 +125,7 @@ def start_stress_test(args: Dict[str, Any]) -> None: timeformat=TimeFormat.MILLISECONDS) -def _reset_stress_test(args: Dict[str, Any]) -> None: +def _reset_stress_test(args: dict[str, Any]) -> None: from ba._general import Call from ba._generated.enums import TimeType _ba.set_stress_testing(False, args['player_count']) diff --git a/assets/src/ba_data/python/ba/_campaign.py b/assets/src/ba_data/python/ba/_campaign.py index 77f4ce92..e7f53153 100644 --- a/assets/src/ba_data/python/ba/_campaign.py +++ b/assets/src/ba_data/python/ba/_campaign.py @@ -8,7 +8,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Any, List, Dict + from typing import Any import ba @@ -30,7 +30,7 @@ class Campaign: def __init__(self, name: str, sequential: bool = True): self._name = name - self._levels: List[ba.Level] = [] + self._levels: list[ba.Level] = [] self._sequential = sequential @property @@ -51,7 +51,7 @@ class Campaign: self._levels.append(level) @property - def levels(self) -> List[ba.Level]: + def levels(self) -> list[ba.Level]: """The list of ba.Levels in the Campaign.""" return self._levels @@ -80,9 +80,9 @@ class Campaign: return self.configdict.get('Selection', self._levels[0].name) @property - def configdict(self) -> Dict[str, Any]: + def configdict(self) -> dict[str, Any]: """Return the live config dict for this campaign.""" - val: Dict[str, Any] = (_ba.app.config.setdefault('Campaigns', + val: dict[str, Any] = (_ba.app.config.setdefault('Campaigns', {}).setdefault( self._name, {})) assert isinstance(val, dict) diff --git a/assets/src/ba_data/python/ba/_coopgame.py b/assets/src/ba_data/python/ba/_coopgame.py index 1811bb05..1d771b5e 100644 --- a/assets/src/ba_data/python/ba/_coopgame.py +++ b/assets/src/ba_data/python/ba/_coopgame.py @@ -10,7 +10,7 @@ from ba._gameactivity import GameActivity from ba._general import WeakCall if TYPE_CHECKING: - from typing import Type, Dict, Any, Set, List, Sequence, Optional + from typing import Any, Sequence, Optional from bastd.actor.playerspaz import PlayerSpaz import ba @@ -28,7 +28,7 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]): session: ba.CoopSession @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: from ba._coopsession import CoopSession return issubclass(sessiontype, CoopSession) @@ -36,7 +36,7 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]): super().__init__(settings) # Cache these for efficiency. - self._achievements_awarded: Set[str] = set() + self._achievements_awarded: set[str] = set() self._life_warning_beep: Optional[ba.Actor] = None self._life_warning_beep_timer: Optional[ba.Timer] = None @@ -62,11 +62,11 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]): _ba.get_scores_to_beat(levelname, config_str, WeakCall(self._on_got_scores_to_beat)) - def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None: + def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None: pass def _show_standard_scores_to_beat_ui(self, - scores: List[Dict[str, Any]]) -> None: + scores: list[dict[str, Any]]) -> None: from efro.util import asserttype from ba._gameutils import timestring, animate from ba._nodeactor import NodeActor diff --git a/assets/src/ba_data/python/ba/_coopsession.py b/assets/src/ba_data/python/ba/_coopsession.py index 021142a9..1dab1e1b 100644 --- a/assets/src/ba_data/python/ba/_coopsession.py +++ b/assets/src/ba_data/python/ba/_coopsession.py @@ -9,7 +9,7 @@ import _ba from ba._session import Session if TYPE_CHECKING: - from typing import Any, List, Dict, Optional, Callable, Sequence + from typing import Any, Optional, Callable, Sequence import ba TEAM_COLORS = [(0.2, 0.4, 1.6)] @@ -77,7 +77,7 @@ class CoopSession(Session): self._ran_tutorial_activity = False self._tutorial_activity: Optional[ba.Activity] = None - self._custom_menu_ui: List[Dict[str, Any]] = [] + self._custom_menu_ui: list[dict[str, Any]] = [] # Start our joining screen. self.setactivity(_ba.newactivity(CoopJoinActivity)) @@ -159,7 +159,7 @@ class CoopSession(Session): from bastd.tutorial import TutorialActivity self._tutorial_activity = _ba.newactivity(TutorialActivity) - def get_custom_menu_entries(self) -> List[Dict[str, Any]]: + def get_custom_menu_entries(self) -> list[dict[str, Any]]: return self._custom_menu_ui def on_player_leave(self, sessionplayer: ba.SessionPlayer) -> None: @@ -341,7 +341,7 @@ class CoopSession(Session): self.setactivity(_ba.newactivity(TransitionActivity)) else: - playerinfos: List[ba.PlayerInfo] + playerinfos: list[ba.PlayerInfo] # Generic team games. if isinstance(results, GameResults): diff --git a/assets/src/ba_data/python/ba/_dependency.py b/assets/src/ba_data/python/ba/_dependency.py index 6cb43e8b..b6663a0f 100644 --- a/assets/src/ba_data/python/ba/_dependency.py +++ b/assets/src/ba_data/python/ba/_dependency.py @@ -10,8 +10,7 @@ from typing import (Generic, TypeVar, TYPE_CHECKING) import _ba if TYPE_CHECKING: - from typing import Optional, Any, Dict, List, Set, Type - from weakref import ReferenceType + from typing import Optional, Any import ba T = TypeVar('T', bound='DependencyComponent') @@ -32,13 +31,13 @@ class Dependency(Generic[T]): methods via self.floofcls(). """ - def __init__(self, cls: Type[T], config: Any = None): + def __init__(self, cls: type[T], config: Any = None): """Instantiate a Dependency given a ba.DependencyComponent type. Optionally, an arbitrary object can be passed as 'config' to influence dependency calculation for the target class. """ - self.cls: Type[T] = cls + self.cls: type[T] = cls self.config = config self._hash: Optional[int] = None @@ -91,7 +90,7 @@ class DependencyComponent: category: Dependency Classes """ - _dep_entry: ReferenceType[DependencyEntry] + _dep_entry: weakref.ref[DependencyEntry] def __init__(self) -> None: """Instantiate a DependencyComponent.""" @@ -110,7 +109,7 @@ class DependencyComponent: return True @classmethod - def get_dynamic_deps(cls, config: Any = None) -> List[Dependency]: + def get_dynamic_deps(cls, config: Any = None) -> list[Dependency]: """Return any dynamically-calculated deps for this component/config. Deps declared statically as part of the class do not need to be @@ -180,7 +179,7 @@ class DependencySet(Generic[T]): self._loaded = False # Dependency data indexed by hash. - self.entries: Dict[int, DependencyEntry] = {} + self.entries: dict[int, DependencyEntry] = {} # def __del__(self) -> None: # print("~DepSet()") @@ -220,12 +219,12 @@ class DependencySet(Generic[T]): """Whether this set has been successfully resolved.""" return self._resolved - def get_asset_package_ids(self) -> Set[str]: + def get_asset_package_ids(self) -> set[str]: """Return the set of asset-package-ids required by this dep-set. Must be called on a resolved dep-set. """ - ids: Set[str] = set() + ids: set[str] = set() if not self._resolved: raise Exception('Must be called on a resolved dep-set.') for entry in self.entries.values(): diff --git a/assets/src/ba_data/python/ba/_error.py b/assets/src/ba_data/python/ba/_error.py index ea98f3f3..c9e75fcb 100644 --- a/assets/src/ba_data/python/ba/_error.py +++ b/assets/src/ba_data/python/ba/_error.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Any, List + from typing import Any import ba @@ -21,12 +21,12 @@ class DependencyError(Exception): (this will generally be missing assets). """ - def __init__(self, deps: List[ba.Dependency]): + def __init__(self, deps: list[ba.Dependency]): super().__init__() self._deps = deps @property - def deps(self) -> List[ba.Dependency]: + def deps(self) -> list[ba.Dependency]: """The list of missing dependencies causing this error.""" return self._deps diff --git a/assets/src/ba_data/python/ba/_freeforallsession.py b/assets/src/ba_data/python/ba/_freeforallsession.py index e81eb47d..c0ceee99 100644 --- a/assets/src/ba_data/python/ba/_freeforallsession.py +++ b/assets/src/ba_data/python/ba/_freeforallsession.py @@ -10,7 +10,6 @@ import _ba from ba._multiteamsession import MultiTeamSession if TYPE_CHECKING: - from typing import Dict import ba @@ -25,12 +24,12 @@ class FreeForAllSession(MultiTeamSession): _playlist_randomize_var = 'Free-for-All Playlist Randomize' _playlists_var = 'Free-for-All Playlists' - def get_ffa_point_awards(self) -> Dict[int, int]: + def get_ffa_point_awards(self) -> dict[int, int]: """Return the number of points awarded for different rankings. This is based on the current number of players. """ - point_awards: Dict[int, int] + point_awards: dict[int, int] if len(self.sessionplayers) == 1: point_awards = {} elif len(self.sessionplayers) == 2: diff --git a/assets/src/ba_data/python/ba/_gameactivity.py b/assets/src/ba_data/python/ba/_gameactivity.py index 6b299082..c7d633e0 100644 --- a/assets/src/ba_data/python/ba/_gameactivity.py +++ b/assets/src/ba_data/python/ba/_gameactivity.py @@ -19,8 +19,7 @@ from ba._player import PlayerInfo from ba import _map if TYPE_CHECKING: - from typing import (List, Optional, Dict, Type, Any, Callable, Sequence, - Tuple, Union) + from typing import Optional, Any, Callable, Sequence, Union from bastd.actor.playerspaz import PlayerSpaz from bastd.actor.bomb import TNTSpawner import ba @@ -37,7 +36,7 @@ class GameActivity(Activity[PlayerType, TeamType]): # pylint: disable=too-many-public-methods # Tips to be presented to the user at the start of the game. - tips: List[Union[str, ba.GameTip]] = [] + tips: list[Union[str, ba.GameTip]] = [] # Default getname() will return this if not None. name: Optional[str] = None @@ -46,7 +45,7 @@ class GameActivity(Activity[PlayerType, TeamType]): description: Optional[str] = None # Default get_available_settings() will return this if not None. - available_settings: Optional[List[ba.Setting]] = None + available_settings: Optional[list[ba.Setting]] = None # Default getscoreconfig() will return this if not None. scoreconfig: Optional[ba.ScoreConfig] = None @@ -65,7 +64,7 @@ class GameActivity(Activity[PlayerType, TeamType]): @classmethod def create_settings_ui( cls, - sessiontype: Type[ba.Session], + sessiontype: type[ba.Session], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None], ) -> None: @@ -104,7 +103,7 @@ class GameActivity(Activity[PlayerType, TeamType]): return cls.name if cls.name is not None else 'Untitled Game' @classmethod - def get_display_string(cls, settings: Optional[Dict] = None) -> ba.Lstr: + def get_display_string(cls, settings: Optional[dict] = None) -> ba.Lstr: """Return a descriptive name for this game/settings combo. Subclasses should override getname(); not this. @@ -130,7 +129,7 @@ class GameActivity(Activity[PlayerType, TeamType]): return Lstr(translate=('teamNames', name)) @classmethod - def get_description(cls, sessiontype: Type[ba.Session]) -> str: + def get_description(cls, sessiontype: type[ba.Session]) -> str: """Get a str description of this game type. The default implementation simply returns the 'description' class var. @@ -142,7 +141,7 @@ class GameActivity(Activity[PlayerType, TeamType]): @classmethod def get_description_display_string( - cls, sessiontype: Type[ba.Session]) -> ba.Lstr: + cls, sessiontype: type[ba.Session]) -> ba.Lstr: """Return a translated version of get_description(). Sub-classes should override get_description(); not this. @@ -152,7 +151,7 @@ class GameActivity(Activity[PlayerType, TeamType]): @classmethod def get_available_settings( - cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]: + cls, sessiontype: type[ba.Session]) -> list[ba.Setting]: """Return a list of settings relevant to this game type when running under the provided session type. """ @@ -160,7 +159,7 @@ class GameActivity(Activity[PlayerType, TeamType]): return [] if cls.available_settings is None else cls.available_settings @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: """ Called by the default ba.GameActivity.create_settings_ui() implementation; should return a list of map names valid @@ -170,7 +169,7 @@ class GameActivity(Activity[PlayerType, TeamType]): return _map.getmaps('melee') @classmethod - def get_settings_display_string(cls, config: Dict[str, Any]) -> ba.Lstr: + def get_settings_display_string(cls, config: dict[str, Any]) -> ba.Lstr: """Given a game config dict, return a short description for it. This is used when viewing game-lists or showing what game @@ -200,7 +199,7 @@ class GameActivity(Activity[PlayerType, TeamType]): return sval @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: """Return whether this game supports the provided Session type.""" from ba._multiteamsession import MultiTeamSession @@ -213,7 +212,7 @@ class GameActivity(Activity[PlayerType, TeamType]): # Holds some flattened info about the player set at the point # when on_begin() is called. - self.initialplayerinfos: Optional[List[ba.PlayerInfo]] = None + self.initialplayerinfos: Optional[list[ba.PlayerInfo]] = None # Go ahead and get our map loading. self._map_type = _map.get_map_class(self._calc_map_name(settings)) @@ -222,7 +221,7 @@ class GameActivity(Activity[PlayerType, TeamType]): self._map_type.preload() self._map: Optional[ba.Map] = None self._powerup_drop_timer: Optional[ba.Timer] = None - self._tnt_spawners: Optional[Dict[int, TNTSpawner]] = None + self._tnt_spawners: Optional[dict[int, TNTSpawner]] = None self._tnt_drop_timer: Optional[ba.Timer] = None self._game_scoreboard_name_text: Optional[ba.Actor] = None self._game_scoreboard_description_text: Optional[ba.Actor] = None @@ -235,7 +234,7 @@ class GameActivity(Activity[PlayerType, TeamType]): self._tournament_time_limit_title_text: Optional[ba.NodeActor] = None self._tournament_time_limit_text: Optional[ba.NodeActor] = None self._tournament_time_limit_text_input: Optional[ba.NodeActor] = None - self._zoom_message_times: Dict[int, float] = {} + self._zoom_message_times: dict[int, float] = {} self._is_waiting_for_continue = False self._continue_cost = _ba.get_account_misc_read_val( @@ -459,7 +458,7 @@ class GameActivity(Activity[PlayerType, TeamType]): callback=WeakCall(self._on_tournament_query_response), ) - def _on_tournament_query_response(self, data: Optional[Dict[str, + def _on_tournament_query_response(self, data: Optional[dict[str, Any]]) -> None: if data is not None: data_t = data['t'] # This used to be the whole payload. @@ -1154,7 +1153,7 @@ class GameActivity(Activity[PlayerType, TeamType]): # If settings doesn't specify a map, pick a random one from the # list of supported ones. unowned_maps = _map.get_unowned_maps() - valid_maps: List[str] = [ + valid_maps: list[str] = [ m for m in self.get_supported_maps(type(self.session)) if m not in unowned_maps ] diff --git a/assets/src/ba_data/python/ba/_gameresults.py b/assets/src/ba_data/python/ba/_gameresults.py index 146e2241..f4b3ebd1 100644 --- a/assets/src/ba_data/python/ba/_gameresults.py +++ b/assets/src/ba_data/python/ba/_gameresults.py @@ -12,8 +12,7 @@ from efro.util import asserttype from ba._team import Team, SessionTeam if TYPE_CHECKING: - from weakref import ReferenceType - from typing import Sequence, Tuple, Any, Optional, Dict, List, Union + from typing import Sequence, Optional import ba @@ -36,11 +35,10 @@ class GameResults: def __init__(self) -> None: self._game_set = False - self._scores: Dict[int, Tuple[ReferenceType[ba.SessionTeam], + self._scores: dict[int, tuple[weakref.ref[ba.SessionTeam], Optional[int]]] = {} - self._sessionteams: Optional[List[ReferenceType[ - ba.SessionTeam]]] = None - self._playerinfos: Optional[List[ba.PlayerInfo]] = None + self._sessionteams: Optional[list[weakref.ref[ba.SessionTeam]]] = None + self._playerinfos: Optional[list[ba.PlayerInfo]] = None self._lower_is_better: Optional[bool] = None self._score_label: Optional[str] = None self._none_is_winner: Optional[bool] = None @@ -83,7 +81,7 @@ class GameResults: return None @property - def sessionteams(self) -> List[ba.SessionTeam]: + def sessionteams(self) -> list[ba.SessionTeam]: """Return all ba.SessionTeams in the results.""" if not self._game_set: raise RuntimeError("Can't get teams until game is set.") @@ -127,7 +125,7 @@ class GameResults: return Lstr(value='-') @property - def playerinfos(self) -> List[ba.PlayerInfo]: + def playerinfos(self) -> list[ba.PlayerInfo]: """Get info about the players represented by the results.""" if not self._game_set: raise RuntimeError("Can't get player-info until game is set.") @@ -169,13 +167,13 @@ class GameResults: return None @property - def winnergroups(self) -> List[WinnerGroup]: + def winnergroups(self) -> list[WinnerGroup]: """Get an ordered list of winner groups.""" if not self._game_set: raise RuntimeError("Can't get winners until game is set.") # Group by best scoring teams. - winners: Dict[int, List[ba.SessionTeam]] = {} + winners: dict[int, list[ba.SessionTeam]] = {} scores = [ score for score in self._scores.values() if score[0]() is not None and score[1] is not None @@ -186,13 +184,13 @@ class GameResults: team = score[0]() assert team is not None sval.append(team) - results: List[Tuple[Optional[int], - List[ba.SessionTeam]]] = list(winners.items()) + results: list[tuple[Optional[int], + list[ba.SessionTeam]]] = list(winners.items()) results.sort(reverse=not self._lower_is_better, key=lambda x: asserttype(x[0], int)) # Also group the 'None' scores. - none_sessionteams: List[ba.SessionTeam] = [] + none_sessionteams: list[ba.SessionTeam] = [] for score in self._scores.values(): scoreteam = score[0]() if scoreteam is not None and score[1] is None: @@ -201,7 +199,7 @@ class GameResults: # Add the Nones to the list (either as winners or losers # depending on the rules). if none_sessionteams: - nones: List[Tuple[Optional[int], List[ba.SessionTeam]]] = [ + nones: list[tuple[Optional[int], list[ba.SessionTeam]]] = [ (None, none_sessionteams) ] if self._none_is_winner: diff --git a/assets/src/ba_data/python/ba/_gameutils.py b/assets/src/ba_data/python/ba/_gameutils.py index 43901d2c..d337f3df 100644 --- a/assets/src/ba_data/python/ba/_gameutils.py +++ b/assets/src/ba_data/python/ba/_gameutils.py @@ -12,7 +12,7 @@ from ba._generated.enums import TimeType, TimeFormat, SpecialChar, UIScale from ba._error import ActivityNotFoundError if TYPE_CHECKING: - from typing import Any, Dict, Sequence, Optional + from typing import Sequence, Optional import ba TROPHY_CHARS = { @@ -45,7 +45,7 @@ def get_trophy_string(trophy_id: str) -> str: def animate(node: ba.Node, attr: str, - keys: Dict[float, float], + keys: dict[float, float], loop: bool = False, offset: float = 0, timetype: ba.TimeType = TimeType.SIM, @@ -119,7 +119,7 @@ def animate(node: ba.Node, def animate_array(node: ba.Node, attr: str, size: int, - keys: Dict[float, Sequence[float]], + keys: dict[float, Sequence[float]], loop: bool = False, offset: float = 0, timetype: ba.TimeType = TimeType.SIM, diff --git a/assets/src/ba_data/python/ba/_general.py b/assets/src/ba_data/python/ba/_general.py index 0a4ba2fe..e919138a 100644 --- a/assets/src/ba_data/python/ba/_general.py +++ b/assets/src/ba_data/python/ba/_general.py @@ -17,9 +17,8 @@ from ba._generated.enums import TimeType if TYPE_CHECKING: from types import FrameType - from typing import Any, Type, Optional + from typing import Any, Optional from efro.call import Call as Call # 'as Call' so we re-export. - from weakref import ReferenceType class Existable(Protocol): @@ -57,7 +56,7 @@ def existing(obj: Optional[ExistableType]) -> Optional[ExistableType]: return obj if obj is not None and obj.exists() else None -def getclass(name: str, subclassof: Type[T]) -> Type[T]: +def getclass(name: str, subclassof: type[T]) -> type[T]: """Given a full class name such as foo.bar.MyClass, return the class. Category: General Utility Functions @@ -70,7 +69,7 @@ def getclass(name: str, subclassof: Type[T]) -> Type[T]: modulename = '.'.join(splits[:-1]) classname = splits[-1] module = importlib.import_module(modulename) - cls: Type = getattr(module, classname) + cls: type = getattr(module, classname) if not issubclass(cls, subclassof): raise TypeError(f'{name} is not a subclass of {subclassof}.') @@ -133,7 +132,7 @@ def print_refs(obj: Any) -> None: i += 1 -def get_type_name(cls: Type) -> str: +def get_type_name(cls: type) -> str: """Return a full type name including module for a class.""" return cls.__module__ + '.' + cls.__name__ @@ -343,7 +342,7 @@ def print_active_refs(obj: Any) -> None: f' {ref4}{Clr.RST}') -def _verify_object_death(wref: ReferenceType) -> None: +def _verify_object_death(wref: weakref.ref) -> None: obj = wref() if obj is None: return diff --git a/assets/src/ba_data/python/ba/_hooks.py b/assets/src/ba_data/python/ba/_hooks.py index 44afb7c9..7860d1e5 100644 --- a/assets/src/ba_data/python/ba/_hooks.py +++ b/assets/src/ba_data/python/ba/_hooks.py @@ -18,7 +18,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import List, Sequence, Optional, Dict, Any + from typing import Sequence, Optional, Any import ba @@ -339,7 +339,7 @@ def local_chat_message(msg: str) -> None: _ba.app.ui.party_window().on_chat_message(msg) -def get_player_icon(sessionplayer: ba.SessionPlayer) -> Dict[str, Any]: +def get_player_icon(sessionplayer: ba.SessionPlayer) -> dict[str, Any]: info = sessionplayer.get_icon_info() return { 'texture': _ba.gettexture(info['texture']), diff --git a/assets/src/ba_data/python/ba/_input.py b/assets/src/ba_data/python/ba/_input.py index bd318cac..fcf96ef5 100644 --- a/assets/src/ba_data/python/ba/_input.py +++ b/assets/src/ba_data/python/ba/_input.py @@ -8,7 +8,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Any, Dict, Tuple + from typing import Any import ba @@ -601,14 +601,14 @@ def get_input_map_hash(inputdevice: ba.InputDevice) -> str: def get_input_device_config(device: ba.InputDevice, - default: bool) -> Tuple[Dict, str]: + default: bool) -> tuple[dict, str]: """Given an input device, return its config dict in the app config. The dict will be created if it does not exist. """ cfg = _ba.app.config name = device.name - ccfgs: Dict[str, Any] = cfg.setdefault('Controllers', {}) + ccfgs: dict[str, Any] = cfg.setdefault('Controllers', {}) ccfgs.setdefault(name, {}) unique_id = device.unique_identifier if default: diff --git a/assets/src/ba_data/python/ba/_keyboard.py b/assets/src/ba_data/python/ba/_keyboard.py index 258125f5..245cbea3 100644 --- a/assets/src/ba_data/python/ba/_keyboard.py +++ b/assets/src/ba_data/python/ba/_keyboard.py @@ -7,7 +7,7 @@ from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: - from typing import List, Tuple, Dict + pass class Keyboard: @@ -30,6 +30,6 @@ class Keyboard: """ name: str - chars: List[Tuple[str, ...]] - pages: Dict[str, Tuple[str, ...]] - nums: Tuple[str, ...] + chars: list[tuple[str, ...]] + pages: dict[str, tuple[str, ...]] + nums: tuple[str, ...] diff --git a/assets/src/ba_data/python/ba/_language.py b/assets/src/ba_data/python/ba/_language.py index 51ac7cbd..61d481a5 100644 --- a/assets/src/ba_data/python/ba/_language.py +++ b/assets/src/ba_data/python/ba/_language.py @@ -11,7 +11,7 @@ import _ba if TYPE_CHECKING: import ba - from typing import Any, Dict, List, Optional, Tuple, Union, Sequence + from typing import Any, Optional, Union, Sequence class LanguageSubsystem: @@ -109,7 +109,7 @@ class LanguageSubsystem: return _ba.app.config.get('Lang', self.default_language) @property - def available_languages(self) -> List[str]: + def available_languages(self) -> list[str]: """A list of all available languages. Note that languages that may be present in game assets but which @@ -402,7 +402,7 @@ class Lstr: resource: str, fallback_resource: str = '', fallback_value: str = '', - subs: Sequence[Tuple[str, Union[str, Lstr]]] = []) -> None: + subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None: """Create an Lstr from a string resource.""" ... @@ -410,8 +410,8 @@ class Lstr: @overload def __init__(self, *, - translate: Tuple[str, str], - subs: Sequence[Tuple[str, Union[str, Lstr]]] = []) -> None: + translate: tuple[str, str], + subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None: """Create an Lstr by translating a string in a category.""" ... @@ -420,7 +420,7 @@ class Lstr: def __init__(self, *, value: str, - subs: Sequence[Tuple[str, Union[str, Lstr]]] = []) -> None: + subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None: """Create an Lstr from a raw string value.""" ... @@ -531,7 +531,7 @@ class Lstr: return lstr -def _add_to_attr_dict(dst: AttrDict, src: Dict) -> None: +def _add_to_attr_dict(dst: AttrDict, src: dict) -> None: for key, value in list(src.items()): if isinstance(value, dict): try: diff --git a/assets/src/ba_data/python/ba/_level.py b/assets/src/ba_data/python/ba/_level.py index ad764b15..53e67f1d 100644 --- a/assets/src/ba_data/python/ba/_level.py +++ b/assets/src/ba_data/python/ba/_level.py @@ -10,8 +10,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from weakref import ReferenceType - from typing import Type, Any, Dict, Optional + from typing import Any, Optional import ba @@ -23,7 +22,7 @@ class Level: def __init__(self, name: str, - gametype: Type[ba.GameActivity], + gametype: type[ba.GameActivity], settings: dict, preview_texture_name: str, displayname: str = None): @@ -32,7 +31,7 @@ class Level: self._settings = settings self._preview_texture_name = preview_texture_name self._displayname = displayname - self._campaign: Optional[ReferenceType[ba.Campaign]] = None + self._campaign: Optional[weakref.ref[ba.Campaign]] = None self._index: Optional[int] = None self._score_version_string: Optional[str] = None @@ -45,7 +44,7 @@ class Level: """The unique name for this Level.""" return self._name - def get_settings(self) -> Dict[str, Any]: + def get_settings(self) -> dict[str, Any]: """Returns the settings for this Level.""" settings = copy.deepcopy(self._settings) @@ -74,7 +73,7 @@ class Level: self._gametype.get_display_string(self._settings))]) @property - def gametype(self) -> Type[ba.GameActivity]: + def gametype(self) -> type[ba.GameActivity]: """The type of game used for this Level.""" return self._gametype @@ -117,7 +116,7 @@ class Level: return {} return copy.deepcopy(config[high_scores_key]) - def set_high_scores(self, high_scores: Dict) -> None: + def set_high_scores(self, high_scores: dict) -> None: """Set high scores for this level.""" config = self._get_config_dict() high_scores_key = 'High Scores' + self.get_score_version_string() @@ -148,7 +147,7 @@ class Level: config = self._get_config_dict() config['Rating'] = max(old_rating, rating) - def _get_config_dict(self) -> Dict[str, Any]: + def _get_config_dict(self) -> dict[str, Any]: """Return/create the persistent state dict for this level. The referenced dict exists under the game's config dict and @@ -157,7 +156,7 @@ class Level: if campaign is None: raise RuntimeError('Level is not in a campaign.') configdict = campaign.configdict - val: Dict[str, Any] = configdict.setdefault(self._name, { + val: dict[str, Any] = configdict.setdefault(self._name, { 'Rating': 0.0, 'Complete': False }) diff --git a/assets/src/ba_data/python/ba/_lobby.py b/assets/src/ba_data/python/ba/_lobby.py index 21355512..f063f533 100644 --- a/assets/src/ba_data/python/ba/_lobby.py +++ b/assets/src/ba_data/python/ba/_lobby.py @@ -16,7 +16,7 @@ from ba._generated.enums import SpecialChar, InputType from ba._profile import get_player_profile_colors if TYPE_CHECKING: - from typing import Optional, List, Dict, Any, Sequence, Union + from typing import Optional, Any, Sequence, Union import ba MAX_QUICK_CHANGE_COUNT = 30 @@ -152,11 +152,11 @@ class Chooser: self._dead = False self._text_node: Optional[ba.Node] = None self._profilename = '' - self._profilenames: List[str] = [] + self._profilenames: list[str] = [] self._ready: bool = False - self._character_names: List[str] = [] + self._character_names: list[str] = [] self._last_change: Sequence[Union[float, int]] = (0, 0) - self._profiles: Dict[str, Dict[str, Any]] = {} + self._profiles: dict[str, dict[str, Any]] = {} app = _ba.app @@ -835,11 +835,11 @@ class Lobby: self._dummy_teams = SessionTeam() self._sessionteams = [weakref.ref(self._dummy_teams)] v_offset = (-150 if isinstance(session, CoopSession) else -50) - self.choosers: List[Chooser] = [] + self.choosers: list[Chooser] = [] self.base_v_offset = v_offset self.update_positions() self._next_add_team = 0 - self.character_names_local_unlocked: List[str] = [] + self.character_names_local_unlocked: list[str] = [] self._vpos = 0 # Grab available profiles. @@ -861,7 +861,7 @@ class Lobby: return self._use_team_colors @property - def sessionteams(self) -> List[ba.SessionTeam]: + def sessionteams(self) -> list[ba.SessionTeam]: """ba.SessionTeams available in this lobby.""" allteams = [] for tref in self._sessionteams: @@ -870,7 +870,7 @@ class Lobby: allteams.append(team) return allteams - def get_choosers(self) -> List[Chooser]: + def get_choosers(self) -> list[Chooser]: """Return the lobby's current choosers.""" return self.choosers diff --git a/assets/src/ba_data/python/ba/_map.py b/assets/src/ba_data/python/ba/_map.py index 6f8919b5..c5adf977 100644 --- a/assets/src/ba_data/python/ba/_map.py +++ b/assets/src/ba_data/python/ba/_map.py @@ -11,7 +11,7 @@ from ba import _math from ba._actor import Actor if TYPE_CHECKING: - from typing import Set, List, Type, Optional, Sequence, Any, Tuple + from typing import Optional, Sequence, Any import ba @@ -52,7 +52,7 @@ def get_map_display_string(name: str) -> ba.Lstr: return _language.Lstr(translate=('mapsNames', name)) -def getmaps(playtype: str) -> List[str]: +def getmaps(playtype: str) -> list[str]: """Return a list of ba.Map types supporting a playtype str. Category: Asset Functions @@ -101,13 +101,13 @@ def getmaps(playtype: str) -> List[str]: if playtype in val.get_play_types()) -def get_unowned_maps() -> List[str]: +def get_unowned_maps() -> list[str]: """Return the list of local maps not owned by the current account. Category: Asset Functions """ from ba import _store - unowned_maps: Set[str] = set() + unowned_maps: set[str] = set() if not _ba.app.headless_mode: for map_section in _store.get_store_layout()['maps']: for mapitem in map_section['items']: @@ -117,7 +117,7 @@ def get_unowned_maps() -> List[str]: return sorted(unowned_maps) -def get_map_class(name: str) -> Type[ba.Map]: +def get_map_class(name: str) -> type[ba.Map]: """Return a map type given a name. Category: Asset Functions @@ -140,7 +140,7 @@ class Map(Actor): """ defs: Any = None name = 'Map' - _playtypes: List[str] = [] + _playtypes: list[str] = [] @classmethod def preload(cls) -> None: @@ -156,7 +156,7 @@ class Map(Actor): activity.preloads[cls] = cls.on_preload() @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return [] @@ -296,7 +296,7 @@ class Map(Actor): def get_def_bound_box( self, name: str - ) -> Optional[Tuple[float, float, float, float, float, float]]: + ) -> Optional[tuple[float, float, float, float, float, float]]: """Return a 6 member bounds tuple or None if it is not defined.""" try: box = self.defs.boxes[name] @@ -312,7 +312,7 @@ class Map(Actor): return (None if val is None else _math.vec3validate(val) if __debug__ else val) - def get_def_points(self, name: str) -> List[Sequence[float]]: + def get_def_points(self, name: str) -> list[Sequence[float]]: """Return a list of named points. Return as many sequential ones are defined (flag1, flag2, flag3), etc. @@ -408,7 +408,7 @@ class Map(Actor): return None -def register_map(maptype: Type[Map]) -> None: +def register_map(maptype: type[Map]) -> None: """Register a map class with the game.""" if maptype.name in _ba.app.maps: raise RuntimeError('map "' + maptype.name + '" already registered') diff --git a/assets/src/ba_data/python/ba/_math.py b/assets/src/ba_data/python/ba/_math.py index 98834ee9..856d4268 100644 --- a/assets/src/ba_data/python/ba/_math.py +++ b/assets/src/ba_data/python/ba/_math.py @@ -8,7 +8,7 @@ from collections import abc from typing import TYPE_CHECKING if TYPE_CHECKING: - from typing import Tuple, Sequence + from typing import Sequence def vec3validate(value: Sequence[float]) -> Sequence[float]: @@ -45,7 +45,7 @@ def is_point_in_box(pnt: Sequence[float], box: Sequence[float]) -> bool: and (abs(pnt[2] - box[2]) <= box[8] * 0.5)) -def normalized_color(color: Sequence[float]) -> Tuple[float, ...]: +def normalized_color(color: Sequence[float]) -> tuple[float, ...]: """Scale a color so its largest value is 1; useful for coloring lights. category: General Utility Functions diff --git a/assets/src/ba_data/python/ba/_messages.py b/assets/src/ba_data/python/ba/_messages.py index c57ea556..a871d4bd 100644 --- a/assets/src/ba_data/python/ba/_messages.py +++ b/assets/src/ba_data/python/ba/_messages.py @@ -11,7 +11,7 @@ from enum import Enum import _ba if TYPE_CHECKING: - from typing import Sequence, Optional, Type, Any + from typing import Sequence, Optional, Any import ba @@ -105,7 +105,7 @@ class PlayerDiedMessage: self.how = how def getkillerplayer(self, - playertype: Type[PlayerType]) -> Optional[PlayerType]: + playertype: type[PlayerType]) -> Optional[PlayerType]: """Return the ba.Player responsible for the killing, if any. Pass the Player type being used by the current game. @@ -113,7 +113,7 @@ class PlayerDiedMessage: assert isinstance(self._killerplayer, (playertype, type(None))) return self._killerplayer - def getplayer(self, playertype: Type[PlayerType]) -> PlayerType: + def getplayer(self, playertype: type[PlayerType]) -> PlayerType: """Return the ba.Player that died. The type of player for the current activity should be passed so that @@ -294,7 +294,7 @@ class HitMessage: if force_direction is not None else velocity) def get_source_player( - self, playertype: Type[PlayerType]) -> Optional[PlayerType]: + self, playertype: type[PlayerType]) -> Optional[PlayerType]: """Return the source-player if one exists and is the provided type.""" player: Any = self._source_player diff --git a/assets/src/ba_data/python/ba/_meta.py b/assets/src/ba_data/python/ba/_meta.py index d3e7f4f1..7776a5b3 100644 --- a/assets/src/ba_data/python/ba/_meta.py +++ b/assets/src/ba_data/python/ba/_meta.py @@ -14,7 +14,7 @@ from dataclasses import dataclass, field import _ba if TYPE_CHECKING: - from typing import Dict, List, Tuple, Union, Optional, Type, Set + from typing import Union, Optional import ba # The meta api version of this build of the game. @@ -27,9 +27,9 @@ CURRENT_API_VERSION = 6 @dataclass class ScanResults: """Final results from a metadata scan.""" - games: List[str] = field(default_factory=list) - plugins: List[str] = field(default_factory=list) - keyboards: List[str] = field(default_factory=list) + games: list[str] = field(default_factory=list) + plugins: list[str] = field(default_factory=list) + keyboards: list[str] = field(default_factory=list) errors: str = '' warnings: str = '' @@ -89,7 +89,7 @@ class MetadataSubsystem: plugs = _ba.app.plugins config_changed = False found_new = False - plugstates: Dict[str, Dict] = _ba.app.config.setdefault('Plugins', {}) + plugstates: dict[str, dict] = _ba.app.config.setdefault('Plugins', {}) assert isinstance(plugstates, dict) # Create a potential-plugin for each class we found in the scan. @@ -151,7 +151,7 @@ class MetadataSubsystem: 'timeout waiting for meta scan to complete.') return self.metascan - def get_game_types(self) -> List[Type[ba.GameActivity]]: + def get_game_types(self) -> list[type[ba.GameActivity]]: """Return available game types.""" from ba._general import getclass from ba._gameactivity import GameActivity @@ -167,11 +167,11 @@ class MetadataSubsystem: unowned = self.get_unowned_game_types() return [cls for cls in gameclasses if cls not in unowned] - def get_unowned_game_types(self) -> Set[Type[ba.GameActivity]]: + def get_unowned_game_types(self) -> set[type[ba.GameActivity]]: """Return present game types not owned by the current account.""" try: from ba import _store - unowned_games: Set[Type[ba.GameActivity]] = set() + unowned_games: set[type[ba.GameActivity]] = set() if not _ba.app.headless_mode: for section in _store.get_store_layout()['minigames']: for mname in section['items']: @@ -188,7 +188,7 @@ class MetadataSubsystem: class ScanThread(threading.Thread): """Thread to scan script dirs for metadata.""" - def __init__(self, dirs: List[str]): + def __init__(self, dirs: list[str]): super().__init__() self._dirs = dirs @@ -215,7 +215,7 @@ class ScanThread(threading.Thread): class DirectoryScan: """Handles scanning directories for metadata.""" - def __init__(self, paths: List[str]): + def __init__(self, paths: list[str]): """Given one or more paths, parses available meta information. It is assumed that these paths are also in PYTHONPATH. @@ -228,7 +228,7 @@ class DirectoryScan: def _get_path_module_entries( self, path: pathlib.Path, subpath: Union[str, pathlib.Path], - modules: List[Tuple[pathlib.Path, pathlib.Path]]) -> None: + modules: list[tuple[pathlib.Path, pathlib.Path]]) -> None: """Scan provided path and add module entries to provided list.""" try: # Special case: let's save some time and skip the whole 'ba' @@ -254,7 +254,7 @@ class DirectoryScan: def scan(self) -> None: """Scan provided paths.""" - modules: List[Tuple[pathlib.Path, pathlib.Path]] = [] + modules: list[tuple[pathlib.Path, pathlib.Path]] = [] for path in self.paths: self._get_path_module_entries(path, '', modules) for moduledir, subpath in modules: @@ -305,7 +305,7 @@ class DirectoryScan: # If its a package, recurse into its subpackages. if ispackage: try: - submodules: List[Tuple[pathlib.Path, pathlib.Path]] = [] + submodules: list[tuple[pathlib.Path, pathlib.Path]] = [] self._get_path_module_entries(moduledir, subpath, submodules) for submodule in submodules: if submodule[1].name != '__init__.py': @@ -316,8 +316,8 @@ class DirectoryScan: f"Error scanning '{subpath}': {traceback.format_exc()}\n") def _process_module_meta_tags(self, subpath: pathlib.Path, - flines: List[str], - meta_lines: Dict[int, List[str]]) -> None: + flines: list[str], + meta_lines: dict[int, list[str]]) -> None: """Pull data from a module based on its ba_meta tags.""" for lindex, mline in meta_lines.items(): # meta_lines is just anything containing '# ba_meta '; make sure @@ -360,7 +360,7 @@ class DirectoryScan: ': unrecognized export type "' + exporttype + '" on line ' + str(lindex + 1) + '.\n') - def _get_export_class_name(self, subpath: pathlib.Path, lines: List[str], + def _get_export_class_name(self, subpath: pathlib.Path, lines: list[str], lindex: int) -> Optional[str]: """Given line num of an export tag, returns its operand class name.""" lindexorig = lindex @@ -387,7 +387,7 @@ class DirectoryScan: return classname def get_api_requirement(self, subpath: pathlib.Path, - meta_lines: Dict[int, List[str]], + meta_lines: dict[int, list[str]], toplevel: bool) -> Optional[int]: """Return an API requirement integer or None if none present. diff --git a/assets/src/ba_data/python/ba/_multiteamsession.py b/assets/src/ba_data/python/ba/_multiteamsession.py index 910b72e1..683ddde9 100644 --- a/assets/src/ba_data/python/ba/_multiteamsession.py +++ b/assets/src/ba_data/python/ba/_multiteamsession.py @@ -12,7 +12,7 @@ from ba._session import Session from ba._error import NotFoundError, print_error if TYPE_CHECKING: - from typing import Optional, Any, Dict, List, Type, Sequence + from typing import Optional, Any, Sequence import ba DEFAULT_TEAM_COLORS = ((0.1, 0.25, 1.0), (1.0, 0.25, 0.2)) @@ -105,9 +105,9 @@ class MultiTeamSession(Session): shuffle=self._playlist_randomize) # Get a game on deck ready to go. - self._current_game_spec: Optional[Dict[str, Any]] = None - self._next_game_spec: Dict[str, Any] = self._playlist.pull_next() - self._next_game: Type[ba.GameActivity] = ( + self._current_game_spec: Optional[dict[str, Any]] = None + self._next_game_spec: dict[str, Any] = self._playlist.pull_next() + self._next_game: type[ba.GameActivity] = ( self._next_game_spec['resolved_type']) # Go ahead and instantiate the next game we'll @@ -129,7 +129,7 @@ class MultiTeamSession(Session): """Returns a description of the next game on deck.""" # pylint: disable=cyclic-import from ba._gameactivity import GameActivity - gametype: Type[GameActivity] = self._next_game_spec['resolved_type'] + gametype: type[GameActivity] = self._next_game_spec['resolved_type'] assert issubclass(gametype, GameActivity) return gametype.get_settings_display_string(self._next_game_spec) @@ -274,13 +274,13 @@ class ShuffleList: (avoids repeats in maps or game types) """ - def __init__(self, items: List[Dict[str, Any]], shuffle: bool = True): + def __init__(self, items: list[dict[str, Any]], shuffle: bool = True): self.source_list = items self.shuffle = shuffle - self.shuffle_list: List[Dict[str, Any]] = [] - self.last_gotten: Optional[Dict[str, Any]] = None + self.shuffle_list: list[dict[str, Any]] = [] + self.last_gotten: Optional[dict[str, Any]] = None - def pull_next(self) -> Dict[str, Any]: + def pull_next(self) -> dict[str, Any]: """Pull and return the next item on the shuffle-list.""" # Refill our list if its empty. diff --git a/assets/src/ba_data/python/ba/_music.py b/assets/src/ba_data/python/ba/_music.py index c2f92d99..7cf3815f 100644 --- a/assets/src/ba_data/python/ba/_music.py +++ b/assets/src/ba_data/python/ba/_music.py @@ -11,7 +11,7 @@ from enum import Enum import _ba if TYPE_CHECKING: - from typing import Callable, Any, Optional, Dict, Union, Type + from typing import Callable, Any, Optional, Union import ba @@ -69,7 +69,7 @@ class AssetSoundtrackEntry: # What gets played by default for our different music types: -ASSET_SOUNDTRACK_ENTRIES: Dict[MusicType, AssetSoundtrackEntry] = { +ASSET_SOUNDTRACK_ENTRIES: dict[MusicType, AssetSoundtrackEntry] = { MusicType.MENU: AssetSoundtrackEntry('menuMusic'), MusicType.VICTORY: @@ -130,8 +130,8 @@ class MusicSubsystem: self._music_node: Optional[_ba.Node] = None self._music_mode: MusicPlayMode = MusicPlayMode.REGULAR self._music_player: Optional[MusicPlayer] = None - self._music_player_type: Optional[Type[MusicPlayer]] = None - self.music_types: Dict[MusicPlayMode, Optional[MusicType]] = { + self._music_player_type: Optional[type[MusicPlayer]] = None + self.music_types: dict[MusicPlayMode, Optional[MusicType]] = { MusicPlayMode.REGULAR: None, MusicPlayMode.TEST: None } @@ -273,7 +273,7 @@ class MusicSubsystem: musictype: Union[MusicType, str, None], continuous: bool = False, mode: MusicPlayMode = MusicPlayMode.REGULAR, - testsoundtrack: Dict[str, Any] = None) -> None: + testsoundtrack: dict[str, Any] = None) -> None: """Plays the requested music type/mode. For most cases, setmusic() is the proper call to use, which itself @@ -329,10 +329,10 @@ class MusicSubsystem: else: self._play_internal_music(musictype) - def _get_user_soundtrack(self) -> Dict[str, Any]: + def _get_user_soundtrack(self) -> dict[str, Any]: """Return current user soundtrack or empty dict otherwise.""" cfg = _ba.app.config - soundtrack: Dict[str, Any] = {} + soundtrack: dict[str, Any] = {} soundtrackname = cfg.get('Soundtrack') if soundtrackname is not None and soundtrackname != '__default__': try: diff --git a/assets/src/ba_data/python/ba/_net.py b/assets/src/ba_data/python/ba/_net.py index 7ffb2a99..c27f3dbb 100644 --- a/assets/src/ba_data/python/ba/_net.py +++ b/assets/src/ba_data/python/ba/_net.py @@ -12,10 +12,10 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Any, Dict, Union, Callable, Optional + from typing import Any, Union, Callable, Optional import socket import ba - MasterServerCallback = Callable[[Union[None, Dict[str, Any]]], None] + MasterServerCallback = Callable[[Union[None, dict[str, Any]]], None] # Timeout for standard functions talking to the master-server/etc. DEFAULT_REQUEST_TIMEOUT_SECONDS = 60 @@ -25,7 +25,7 @@ class NetworkSubsystem: """Network related app subsystem.""" def __init__(self) -> None: - self.region_pings: Dict[str, float] = {} + self.region_pings: dict[str, float] = {} def get_ip_address_type(addr: str) -> socket.AddressFamily: @@ -61,7 +61,7 @@ class MasterServerCallThread(threading.Thread): """Thread to communicate with the master-server.""" def __init__(self, request: str, request_type: str, - data: Optional[Dict[str, Any]], + data: Optional[dict[str, Any]], callback: Optional[MasterServerCallback], response_type: MasterServerResponseType): super().__init__() @@ -79,7 +79,7 @@ class MasterServerCallThread(threading.Thread): self._activity = weakref.ref( activity) if activity is not None else None - def _run_callback(self, arg: Union[None, Dict[str, Any]]) -> None: + def _run_callback(self, arg: Union[None, dict[str, Any]]) -> None: # If we were created in an activity context and that activity has # since died, do nothing. # FIXME: Should we just be using a ContextCall instead of doing @@ -170,7 +170,7 @@ class MasterServerCallThread(threading.Thread): def master_server_get( request: str, - data: Dict[str, Any], + data: dict[str, Any], callback: Optional[MasterServerCallback] = None, response_type: MasterServerResponseType = MasterServerResponseType.JSON ) -> None: @@ -181,7 +181,7 @@ def master_server_get( def master_server_post( request: str, - data: Dict[str, Any], + data: dict[str, Any], callback: Optional[MasterServerCallback] = None, response_type: MasterServerResponseType = MasterServerResponseType.JSON ) -> None: diff --git a/assets/src/ba_data/python/ba/_player.py b/assets/src/ba_data/python/ba/_player.py index f0592a6f..a4728537 100644 --- a/assets/src/ba_data/python/ba/_player.py +++ b/assets/src/ba_data/python/ba/_player.py @@ -13,8 +13,7 @@ from ba._error import (SessionPlayerNotFoundError, print_exception, from ba._messages import DeathType, DieMessage if TYPE_CHECKING: - from typing import (Type, Optional, Sequence, Dict, Any, Union, Tuple, - Callable) + from typing import Optional, Sequence, Any, Union, Callable import ba PlayerType = TypeVar('PlayerType', bound='ba.Player') @@ -245,8 +244,8 @@ class Player(Generic[TeamType]): assert not self._expired return self.actor is not None and self.actor.is_alive() - def get_icon(self) -> Dict[str, Any]: - """get_icon() -> Dict[str, Any] + def get_icon(self) -> dict[str, Any]: + """get_icon() -> dict[str, Any] Returns the character's icon (images, colors, etc contained in a dict) """ @@ -254,7 +253,7 @@ class Player(Generic[TeamType]): assert not self._expired return self._sessionplayer.get_icon() - def assigninput(self, inputtype: Union[ba.InputType, Tuple[ba.InputType, + def assigninput(self, inputtype: Union[ba.InputType, tuple[ba.InputType, ...]], call: Callable) -> None: """assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]], @@ -302,7 +301,7 @@ class EmptyPlayer(Player['ba.EmptyTeam']): # instead of requiring extra work by them. -def playercast(totype: Type[PlayerType], player: ba.Player) -> PlayerType: +def playercast(totype: type[PlayerType], player: ba.Player) -> PlayerType: """Cast a ba.Player to a specific ba.Player subclass. Category: Gameplay Functions @@ -320,7 +319,7 @@ def playercast(totype: Type[PlayerType], player: ba.Player) -> PlayerType: # NOTE: ideally we should have a single playercast() call and use overloads # for the optional variety, but that currently seems to not be working. # See: https://github.com/python/mypy/issues/8800 -def playercast_o(totype: Type[PlayerType], +def playercast_o(totype: type[PlayerType], player: Optional[ba.Player]) -> Optional[PlayerType]: """A variant of ba.playercast() for use with optional ba.Player values. diff --git a/assets/src/ba_data/python/ba/_playlist.py b/assets/src/ba_data/python/ba/_playlist.py index 1f31ee6d..b6e36046 100644 --- a/assets/src/ba_data/python/ba/_playlist.py +++ b/assets/src/ba_data/python/ba/_playlist.py @@ -5,17 +5,17 @@ from __future__ import annotations import copy -from typing import Any, TYPE_CHECKING, Dict, List +from typing import Any, TYPE_CHECKING if TYPE_CHECKING: - from typing import Type, Sequence + from typing import Sequence from ba import _session -PlaylistType = List[Dict[str, Any]] +PlaylistType = list[dict[str, Any]] def filter_playlist(playlist: PlaylistType, - sessiontype: Type[_session.Session], + sessiontype: type[_session.Session], add_resolved_type: bool = False, remove_unowned: bool = True, mark_unowned: bool = False) -> PlaylistType: @@ -32,7 +32,7 @@ def filter_playlist(playlist: PlaylistType, from ba import _map from ba import _general from ba import _gameactivity - goodlist: List[Dict] = [] + goodlist: list[dict] = [] unowned_maps: Sequence[str] if remove_unowned or mark_unowned: unowned_maps = _map.get_unowned_maps() diff --git a/assets/src/ba_data/python/ba/_plugin.py b/assets/src/ba_data/python/ba/_plugin.py index 025f7a24..7637717c 100644 --- a/assets/src/ba_data/python/ba/_plugin.py +++ b/assets/src/ba_data/python/ba/_plugin.py @@ -10,7 +10,6 @@ from dataclasses import dataclass import _ba if TYPE_CHECKING: - from typing import List, Dict import ba @@ -23,8 +22,8 @@ class PluginSubsystem: """ def __init__(self) -> None: - self.potential_plugins: List[ba.PotentialPlugin] = [] - self.active_plugins: Dict[str, ba.Plugin] = {} + self.potential_plugins: list[ba.PotentialPlugin] = [] + self.active_plugins: dict[str, ba.Plugin] = {} def on_app_launch(self) -> None: """Should be called at app launch time.""" @@ -73,9 +72,9 @@ class PluginSubsystem: # plugins, but that is only used to give the user a list of plugins # that they can enable. (we wouldn't want to look at meta-scan here # anyway because it may not be done yet at this point in the launch) - plugstates: Dict[str, Dict] = _ba.app.config.get('Plugins', {}) + plugstates: dict[str, dict] = _ba.app.config.get('Plugins', {}) assert isinstance(plugstates, dict) - plugkeys: List[str] = sorted(key for key, val in plugstates.items() + plugkeys: list[str] = sorted(key for key, val in plugstates.items() if val.get('enabled', False)) for plugkey in plugkeys: try: diff --git a/assets/src/ba_data/python/ba/_powerup.py b/assets/src/ba_data/python/ba/_powerup.py index 7dd895ce..520d3020 100644 --- a/assets/src/ba_data/python/ba/_powerup.py +++ b/assets/src/ba_data/python/ba/_powerup.py @@ -8,7 +8,7 @@ from typing import TYPE_CHECKING from dataclasses import dataclass if TYPE_CHECKING: - from typing import Sequence, Tuple, Optional + from typing import Sequence, Optional import ba @@ -47,7 +47,7 @@ class PowerupAcceptMessage: """ -def get_default_powerup_distribution() -> Sequence[Tuple[str, int]]: +def get_default_powerup_distribution() -> Sequence[tuple[str, int]]: """Standard set of powerups.""" return (('triple_bombs', 3), ('ice_bombs', 3), ('punch', 3), ('impact_bombs', 3), ('land_mines', 2), ('sticky_bombs', 3), diff --git a/assets/src/ba_data/python/ba/_profile.py b/assets/src/ba_data/python/ba/_profile.py index 404afd8b..9f89a7f0 100644 --- a/assets/src/ba_data/python/ba/_profile.py +++ b/assets/src/ba_data/python/ba/_profile.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import List, Tuple, Any, Dict, Optional + from typing import Any, Optional # NOTE: player color options are enforced server-side for non-pro accounts # so don't change these or they won't stick... @@ -20,7 +20,7 @@ PLAYER_COLORS = [(1, 0.15, 0.15), (0.2, 1, 0.2), (0.1, 0.1, 1), (0.2, 1, 1), (0.5, 0.5, 0.5), (1, 1, 1)] -def get_player_colors() -> List[Tuple[float, float, float]]: +def get_player_colors() -> list[tuple[float, float, float]]: """Return user-selectable player colors.""" return PLAYER_COLORS @@ -50,8 +50,8 @@ def get_player_profile_icon(profilename: str) -> str: def get_player_profile_colors( profilename: Optional[str], - profiles: Dict[str, Dict[str, Any]] = None -) -> Tuple[Tuple[float, float, float], Tuple[float, float, float]]: + profiles: dict[str, dict[str, Any]] = None +) -> tuple[tuple[float, float, float], tuple[float, float, float]]: """Given a profile, return colors for them.""" appconfig = _ba.app.config if profiles is None: diff --git a/assets/src/ba_data/python/ba/_servermode.py b/assets/src/ba_data/python/ba/_servermode.py index 7f06ddaa..6df38d79 100644 --- a/assets/src/ba_data/python/ba/_servermode.py +++ b/assets/src/ba_data/python/ba/_servermode.py @@ -19,7 +19,7 @@ from ba._dualteamsession import DualTeamSession from ba._coopsession import CoopSession if TYPE_CHECKING: - from typing import Optional, Dict, Any, Type + from typing import Optional, Any import ba from bacommon.servermanager import ServerConfig @@ -198,7 +198,7 @@ class ServerController: callback=self._access_check_response, ) - def _access_check_response(self, data: Optional[Dict[str, Any]]) -> None: + def _access_check_response(self, data: Optional[dict[str, Any]]) -> None: import os if data is None: print('error on UDP port access check (internet down?)') @@ -267,7 +267,7 @@ class ServerController: def _on_playlist_fetch_response( self, - result: Optional[Dict[str, Any]], + result: Optional[dict[str, Any]], ) -> None: if result is None: print('Error fetching playlist; aborting.') @@ -283,7 +283,7 @@ class ServerController: self._config.session_type = typename self._playlist_name = (result['playlistName']) - def _get_session_type(self) -> Type[ba.Session]: + def _get_session_type(self) -> type[ba.Session]: # Convert string session type to the class. # Hmm should we just keep this as a string? if self._config.session_type == 'ffa': diff --git a/assets/src/ba_data/python/ba/_session.py b/assets/src/ba_data/python/ba/_session.py index dc471f50..0b59fed4 100644 --- a/assets/src/ba_data/python/ba/_session.py +++ b/assets/src/ba_data/python/ba/_session.py @@ -12,7 +12,7 @@ from ba._language import Lstr from ba._player import Player if TYPE_CHECKING: - from typing import Sequence, List, Dict, Any, Optional, Set + from typing import Sequence, Any, Optional import ba @@ -76,9 +76,9 @@ class Session: lobby: ba.Lobby max_players: int min_players: int - sessionplayers: List[ba.SessionPlayer] + sessionplayers: list[ba.SessionPlayer] customdata: dict - sessionteams: List[ba.SessionTeam] + sessionteams: list[ba.SessionTeam] def __init__(self, depsets: Sequence[ba.DependencySet], @@ -108,7 +108,7 @@ class Session: # If things are missing, we'll try to gather them into a single # missing-deps exception if possible to give the caller a clean # path to download missing stuff and try again. - missing_asset_packages: Set[str] = set() + missing_asset_packages: set[str] = set() for depset in depsets: try: depset.resolve() @@ -133,7 +133,7 @@ class Session: # Ok; looks like our dependencies check out. # Now give the engine a list of asset-set-ids to pass along to clients. - required_asset_packages: Set[str] = set() + required_asset_packages: set[str] = set() for depset in depsets: required_asset_packages.update(depset.get_asset_package_ids()) @@ -495,7 +495,7 @@ class Session: """Return the current foreground activity for this session.""" return self._activity_weak() - def get_custom_menu_entries(self) -> List[Dict[str, Any]]: + def get_custom_menu_entries(self) -> list[dict[str, Any]]: """Subclasses can override this to provide custom menu entries. The returned value should be a list of dicts, each containing diff --git a/assets/src/ba_data/python/ba/_settings.py b/assets/src/ba_data/python/ba/_settings.py index 1b3e4040..cf590b52 100644 --- a/assets/src/ba_data/python/ba/_settings.py +++ b/assets/src/ba_data/python/ba/_settings.py @@ -8,7 +8,7 @@ from typing import TYPE_CHECKING from dataclasses import dataclass if TYPE_CHECKING: - from typing import Any, List, Tuple + from typing import Any @dataclass @@ -61,7 +61,7 @@ class ChoiceSetting(Setting): Category: Settings Classes """ - choices: List[Tuple[str, Any]] + choices: list[tuple[str, Any]] @dataclass @@ -71,7 +71,7 @@ class IntChoiceSetting(ChoiceSetting): Category: Settings Classes """ default: int - choices: List[Tuple[str, int]] + choices: list[tuple[str, int]] @dataclass @@ -81,4 +81,4 @@ class FloatChoiceSetting(ChoiceSetting): Category: Settings Classes """ default: float - choices: List[Tuple[str, float]] + choices: list[tuple[str, float]] diff --git a/assets/src/ba_data/python/ba/_stats.py b/assets/src/ba_data/python/ba/_stats.py index bf3becb0..486a39e2 100644 --- a/assets/src/ba_data/python/ba/_stats.py +++ b/assets/src/ba_data/python/ba/_stats.py @@ -14,8 +14,7 @@ from ba._error import (print_exception, print_error, SessionTeamNotFoundError, if TYPE_CHECKING: import ba - from weakref import ReferenceType - from typing import Any, Dict, Optional, Sequence, Union, Tuple + from typing import Any, Optional, Sequence, Union @dataclass @@ -58,7 +57,7 @@ class PlayerRecord: self._stats = weakref.ref(stats) self._last_sessionplayer: Optional[ba.SessionPlayer] = None self._sessionplayer: Optional[ba.SessionPlayer] = None - self._sessionteam: Optional[ReferenceType[ba.SessionTeam]] = None + self._sessionteam: Optional[weakref.ref[ba.SessionTeam]] = None self.streak = 0 self.associate_with_sessionplayer(sessionplayer) @@ -90,7 +89,7 @@ class PlayerRecord: """Return the player entry's name.""" return self.name_full if full else self.name - def get_icon(self) -> Dict[str, Any]: + def get_icon(self) -> dict[str, Any]: """Get the icon for this instance's player.""" player = self._last_sessionplayer assert player is not None @@ -181,7 +180,7 @@ class PlayerRecord: sound = stats.orchestrahitsound4 def _apply(name2: Lstr, score2: int, showpoints2: bool, - color2: Tuple[float, float, float, float], scale2: float, + color2: tuple[float, float, float, float], scale2: float, sound2: Optional[ba.Sound]) -> None: from bastd.actor.popuptext import PopupText @@ -237,8 +236,8 @@ class Stats: """ def __init__(self) -> None: - self._activity: Optional[ReferenceType[ba.Activity]] = None - self._player_records: Dict[str, PlayerRecord] = {} + self._activity: Optional[weakref.ref[ba.Activity]] = None + self._player_records: dict[str, PlayerRecord] = {} self.orchestrahitsound1: Optional[ba.Sound] = None self.orchestrahitsound2: Optional[ba.Sound] = None self.orchestrahitsound3: Optional[ba.Sound] = None @@ -303,7 +302,7 @@ class Stats: self._player_records[name] = PlayerRecord(name, name_full, player, self) - def get_records(self) -> Dict[str, ba.PlayerRecord]: + def get_records(self) -> dict[str, ba.PlayerRecord]: """Get PlayerRecord corresponding to still-existing players.""" records = {} diff --git a/assets/src/ba_data/python/ba/_store.py b/assets/src/ba_data/python/ba/_store.py index 14cd6080..0dc91f9c 100644 --- a/assets/src/ba_data/python/ba/_store.py +++ b/assets/src/ba_data/python/ba/_store.py @@ -9,11 +9,11 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Type, List, Dict, Tuple, Optional, Any + from typing import Optional, Any import ba -def get_store_item(item: str) -> Dict[str, Any]: +def get_store_item(item: str) -> dict[str, Any]: """(internal)""" return get_store_items()[item] @@ -32,17 +32,17 @@ def get_store_item_name_translated(item_name: str) -> ba.Lstr: subs=[('${APP_NAME}', _language.Lstr(resource='titleText'))]) if item_name.startswith('maps.'): - map_type: Type[ba.Map] = item_info['map_type'] + map_type: type[ba.Map] = item_info['map_type'] return _map.get_map_display_string(map_type.name) if item_name.startswith('games.'): - gametype: Type[ba.GameActivity] = item_info['gametype'] + gametype: type[ba.GameActivity] = item_info['gametype'] return gametype.get_display_string() if item_name.startswith('icons.'): return _language.Lstr(resource='editProfileWindow.iconText') raise ValueError('unrecognized item: ' + item_name) -def get_store_item_display_size(item_name: str) -> Tuple[float, float]: +def get_store_item_display_size(item_name: str) -> tuple[float, float]: """(internal)""" if item_name.startswith('characters.'): return 340 * 0.6, 430 * 0.6 @@ -55,7 +55,7 @@ def get_store_item_display_size(item_name: str) -> Tuple[float, float]: return 450 * 0.6, 450 * 0.6 -def get_store_items() -> Dict[str, Dict]: +def get_store_items() -> dict[str, dict]: """Returns info about purchasable items. (internal) @@ -285,7 +285,7 @@ def get_store_items() -> Dict[str, Dict]: return store_items -def get_store_layout() -> Dict[str, List[Dict[str, Any]]]: +def get_store_layout() -> dict[str, list[dict[str, Any]]]: """Return what's available in the store at a given time. Categorized by tab and by section.""" @@ -421,7 +421,7 @@ def get_available_purchase_count(tab: str = None) -> int: return 0 -def _calc_count_for_tab(tabval: List[Dict[str, Any]], our_tickets: int, +def _calc_count_for_tab(tabval: list[dict[str, Any]], our_tickets: int, count: int) -> int: for section in tabval: for item in section['items']: @@ -442,7 +442,7 @@ def get_available_sale_time(tab: str) -> Optional[int]: import datetime from ba._generated.enums import TimeType, TimeFormat app = _ba.app - sale_times: List[Optional[int]] = [] + sale_times: list[Optional[int]] = [] # Calc time for our pro sale (old special case). if tab == 'extras': diff --git a/assets/src/ba_data/python/ba/_team.py b/assets/src/ba_data/python/ba/_team.py index 67e254b2..0cdfbe75 100644 --- a/assets/src/ba_data/python/ba/_team.py +++ b/assets/src/ba_data/python/ba/_team.py @@ -10,8 +10,7 @@ from typing import TYPE_CHECKING, TypeVar, Generic from ba._error import print_exception if TYPE_CHECKING: - from weakref import ReferenceType - from typing import Dict, List, Sequence, Tuple, Union, Optional + from typing import Sequence, Union, Optional import ba @@ -47,8 +46,8 @@ class SessionTeam: # Annotate our attr types at the class level so they're introspectable. name: Union[ba.Lstr, str] - color: Tuple[float, ...] # FIXME: can't we make this fixed len? - players: List[ba.SessionPlayer] + color: tuple[float, ...] # FIXME: can't we make this fixed len? + players: list[ba.SessionPlayer] customdata: dict id: int @@ -88,11 +87,11 @@ class Team(Generic[PlayerType]): # Defining these types at the class level instead of in __init__ so # that types are introspectable (these are still instance attrs). - players: List[PlayerType] + players: list[PlayerType] id: int name: Union[ba.Lstr, str] - color: Tuple[float, ...] # FIXME: can't we make this fixed length? - _sessionteam: ReferenceType[SessionTeam] + color: tuple[float, ...] # FIXME: can't we make this fixed length? + _sessionteam: weakref.ref[SessionTeam] _expired: bool _postinited: bool _customdata: dict @@ -127,7 +126,7 @@ class Team(Generic[PlayerType]): self._postinited = True def manual_init(self, team_id: int, name: Union[ba.Lstr, str], - color: Tuple[float, ...]) -> None: + color: tuple[float, ...]) -> None: """Manually init a team for uses such as bots.""" self.id = team_id self.name = name diff --git a/assets/src/ba_data/python/ba/_teamgame.py b/assets/src/ba_data/python/ba/_teamgame.py index afa8519e..93076210 100644 --- a/assets/src/ba_data/python/ba/_teamgame.py +++ b/assets/src/ba_data/python/ba/_teamgame.py @@ -13,7 +13,7 @@ from ba._gameresults import GameResults from ba._dualteamsession import DualTeamSession if TYPE_CHECKING: - from typing import Any, Dict, Type, Sequence + from typing import Any, Sequence from bastd.actor.playerspaz import PlayerSpaz import ba @@ -31,7 +31,7 @@ class TeamGameActivity(GameActivity[PlayerType, TeamType]): """ @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: """ Class method override; returns True for ba.DualTeamSessions and ba.FreeForAllSessions; diff --git a/assets/src/ba_data/python/ba/_tips.py b/assets/src/ba_data/python/ba/_tips.py index 7a2501d5..c6e8955e 100644 --- a/assets/src/ba_data/python/ba/_tips.py +++ b/assets/src/ba_data/python/ba/_tips.py @@ -3,12 +3,16 @@ """Functionality related to game tips. These can be shown at opportune times such as between rounds.""" +from __future__ import annotations +from typing import TYPE_CHECKING import random -from typing import List import _ba +if TYPE_CHECKING: + pass + def get_next_tip() -> str: """Returns the next tip to be displayed.""" @@ -20,7 +24,7 @@ def get_next_tip() -> str: return tip -def get_all_tips() -> List[str]: +def get_all_tips() -> list[str]: """Return the complete list of tips.""" tips = [ ('If you are short on controllers, install the \'${REMOTE_APP_NAME}\' ' diff --git a/assets/src/ba_data/python/ba/_tournament.py b/assets/src/ba_data/python/ba/_tournament.py index b246ff87..ec1618ae 100644 --- a/assets/src/ba_data/python/ba/_tournament.py +++ b/assets/src/ba_data/python/ba/_tournament.py @@ -9,10 +9,10 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Dict, List, Any + from typing import Any -def get_tournament_prize_strings(entry: Dict[str, Any]) -> List[str]: +def get_tournament_prize_strings(entry: dict[str, Any]) -> list[str]: """Given a tournament entry, return strings for its prize levels.""" # pylint: disable=too-many-locals from ba._generated.enums import SpecialChar diff --git a/assets/src/ba_data/python/ba/_ui.py b/assets/src/ba_data/python/ba/_ui.py index dcf5df47..bf019471 100644 --- a/assets/src/ba_data/python/ba/_ui.py +++ b/assets/src/ba_data/python/ba/_ui.py @@ -10,7 +10,7 @@ import _ba from ba._generated.enums import UIScale if TYPE_CHECKING: - from typing import Optional, Dict, Any, Callable, List, Type + from typing import Optional, Any, Callable from ba.ui import UICleanupCheck import ba @@ -43,13 +43,13 @@ class UISubsystem: else: raise RuntimeError(f'Invalid UIScale value: {interfacetype}') - self.window_states: Dict[Type, Any] = {} # FIXME: Kill this. + self.window_states: dict[type, Any] = {} # FIXME: Kill this. self.main_menu_selection: Optional[str] = None # FIXME: Kill this. self.have_party_queue_window = False self.quit_window: Any = None self.dismiss_wii_remotes_window_call: (Optional[Callable[[], Any]]) = None - self.cleanupchecks: List[UICleanupCheck] = [] + self.cleanupchecks: list[UICleanupCheck] = [] self.upkeeptimer: Optional[ba.Timer] = None self.use_toolbars = env.get('toolbar_test', True) self.party_window: Any = None # FIXME: Don't use Any. diff --git a/assets/src/ba_data/python/ba/macmusicapp.py b/assets/src/ba_data/python/ba/macmusicapp.py index 9149b3d9..598f5725 100644 --- a/assets/src/ba_data/python/ba/macmusicapp.py +++ b/assets/src/ba_data/python/ba/macmusicapp.py @@ -10,7 +10,7 @@ import _ba from ba._music import MusicPlayer if TYPE_CHECKING: - from typing import List, Optional, Callable, Any + from typing import Optional, Callable, Any class MacMusicAppMusicPlayer(MusicPlayer): @@ -60,7 +60,7 @@ class _MacMusicAppThread(threading.Thread): def __init__(self) -> None: super().__init__() self._commands_available = threading.Event() - self._commands: List[List] = [] + self._commands: list[list] = [] self._volume = 1.0 self._current_playlist: Optional[str] = None self._orig_volume: Optional[int] = None @@ -153,7 +153,7 @@ class _MacMusicAppThread(threading.Thread): self._commands_available.set() def _handle_get_playlists_command( - self, target: Callable[[List[str]], None]) -> None: + self, target: Callable[[list[str]], None]) -> None: from ba._general import Call try: playlists = _ba.mac_music_app_get_playlists() diff --git a/assets/src/ba_data/python/ba/modutils.py b/assets/src/ba_data/python/ba/modutils.py index cdd6ecaf..5984f25c 100644 --- a/assets/src/ba_data/python/ba/modutils.py +++ b/assets/src/ba_data/python/ba/modutils.py @@ -9,7 +9,7 @@ import os import _ba if TYPE_CHECKING: - from typing import Optional, List, Sequence + from typing import Optional, Sequence def get_human_readable_user_scripts_path() -> str: diff --git a/assets/src/ba_data/python/ba/osmusic.py b/assets/src/ba_data/python/ba/osmusic.py index 5257e0aa..64f2bd1e 100644 --- a/assets/src/ba_data/python/ba/osmusic.py +++ b/assets/src/ba_data/python/ba/osmusic.py @@ -12,7 +12,7 @@ import _ba from ba._music import MusicPlayer if TYPE_CHECKING: - from typing import Callable, Any, Union, List, Optional + from typing import Callable, Any, Union, Optional class OSMusicPlayer(MusicPlayer): @@ -26,7 +26,7 @@ class OSMusicPlayer(MusicPlayer): self._actually_playing = False @classmethod - def get_valid_music_file_extensions(cls) -> List[str]: + def get_valid_music_file_extensions(cls) -> list[str]: """Return file extensions for types playable on this device.""" # FIXME: should ask the C++ layer for these; just hard-coding for now. return ['mp3', 'ogg', 'm4a', 'wav', 'flac', 'mid'] @@ -60,7 +60,7 @@ class OSMusicPlayer(MusicPlayer): self._on_play_folder_cb).start() def _on_play_folder_cb(self, - result: Union[str, List[str]], + result: Union[str, list[str]], error: Optional[str] = None) -> None: from ba import _language if error is not None: @@ -94,8 +94,8 @@ class OSMusicPlayer(MusicPlayer): class _PickFolderSongThread(threading.Thread): - def __init__(self, path: str, valid_extensions: List[str], - callback: Callable[[Union[str, List[str]], Optional[str]], + def __init__(self, path: str, valid_extensions: list[str], + callback: Callable[[Union[str, list[str]], Optional[str]], None]): super().__init__() self._valid_extensions = valid_extensions @@ -108,7 +108,7 @@ class _PickFolderSongThread(threading.Thread): do_print_error = True try: _ba.set_thread_name('BA_PickFolderSongThread') - all_files: List[str] = [] + all_files: list[str] = [] valid_extensions = ['.' + x for x in self._valid_extensions] for root, _subdirs, filenames in os.walk(self._path): for fname in filenames: diff --git a/assets/src/ba_data/python/ba/ui/__init__.py b/assets/src/ba_data/python/ba/ui/__init__.py index a7fe5747..a3b16de3 100644 --- a/assets/src/ba_data/python/ba/ui/__init__.py +++ b/assets/src/ba_data/python/ba/ui/__init__.py @@ -14,8 +14,7 @@ from ba._generated.enums import TimeType from ba._general import print_active_refs if TYPE_CHECKING: - from typing import Optional, List, Any - from weakref import ReferenceType + from typing import Optional, Any import ba @@ -45,7 +44,7 @@ class Window: @dataclass class UICleanupCheck: """Holds info about a uicleanupcheck target.""" - obj: ReferenceType + obj: weakref.ref widget: ba.Widget widget_death_time: Optional[float] @@ -126,15 +125,15 @@ class UIController: def __init__(self) -> None: # FIXME: document why we have separate stacks for game and menu... - self._main_stack_game: List[UIEntry] = [] - self._main_stack_menu: List[UIEntry] = [] + self._main_stack_game: list[UIEntry] = [] + self._main_stack_menu: list[UIEntry] = [] # This points at either the game or menu stack. - self._main_stack: Optional[List[UIEntry]] = None + self._main_stack: Optional[list[UIEntry]] = None # There's only one of these since we don't need to preserve its state # between sessions. - self._dialog_stack: List[UIEntry] = [] + self._dialog_stack: list[UIEntry] = [] def show_main_menu(self, in_game: bool = True) -> None: """Show the main menu, clearing other UIs from location stacks.""" diff --git a/assets/src/ba_data/python/bastd/activity/coopjoin.py b/assets/src/ba_data/python/bastd/activity/coopjoin.py index 1bb614a4..9c44baa9 100644 --- a/assets/src/ba_data/python/bastd/activity/coopjoin.py +++ b/assets/src/ba_data/python/bastd/activity/coopjoin.py @@ -11,7 +11,7 @@ import ba from ba.internal import JoinActivity if TYPE_CHECKING: - from typing import Any, Dict, List, Optional, Sequence, Union + from typing import Any, Optional, Sequence, Union class CoopJoinActivity(JoinActivity): @@ -54,7 +54,7 @@ class CoopJoinActivity(JoinActivity): ControlsGuide(delay=1.0).autoretain() def _on_got_scores_to_beat(self, - scores: Optional[List[Dict[str, Any]]]) -> None: + scores: Optional[list[dict[str, Any]]]) -> None: # pylint: disable=too-many-locals # pylint: disable=too-many-statements from efro.util import asserttype diff --git a/assets/src/ba_data/python/bastd/activity/coopscore.py b/assets/src/ba_data/python/bastd/activity/coopscore.py index dc201f55..9df3badd 100644 --- a/assets/src/ba_data/python/bastd/activity/coopscore.py +++ b/assets/src/ba_data/python/bastd/activity/coopscore.py @@ -14,7 +14,7 @@ from bastd.actor.text import Text from bastd.actor.zoomtext import ZoomText if TYPE_CHECKING: - from typing import Optional, Tuple, List, Dict, Any, Sequence + from typing import Optional, Any, Sequence from bastd.ui.store.button import StoreButton from bastd.ui.league.rankbutton import LeagueRankButton @@ -96,7 +96,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): self._game_config_str: Optional[str] = None # Ui bits. - self._corner_button_offs: Optional[Tuple[float, float]] = None + self._corner_button_offs: Optional[tuple[float, float]] = None self._league_rank_button: Optional[LeagueRankButton] = None self._store_button_instance: Optional[StoreButton] = None self._restart_button: Optional[ba.Widget] = None @@ -110,7 +110,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): self._is_more_levels: Optional[bool] = None self._next_level_name: Optional[str] = None self._show_friend_scores: Optional[bool] = None - self._show_info: Optional[Dict[str, Any]] = None + self._show_info: Optional[dict[str, Any]] = None self._name_str: Optional[str] = None self._friends_loading_status: Optional[ba.Actor] = None self._score_loading_status: Optional[ba.Actor] = None @@ -124,7 +124,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): self._allow_server_transition = False self._server_transitioning: Optional[bool] = None - self._playerinfos: List[ba.PlayerInfo] = settings['playerinfos'] + self._playerinfos: list[ba.PlayerInfo] = settings['playerinfos'] assert isinstance(self._playerinfos, list) assert (isinstance(i, ba.PlayerInfo) for i in self._playerinfos) @@ -831,7 +831,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): scale = 0.65 elif p_count == 4: scale = 0.5 - times: List[Tuple[float, float]] = [] + times: list[tuple[float, float]] = [] for i in range(display_count): times.insert(random.randrange(0, len(times) + 1), @@ -929,7 +929,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): 'loop': False })).autoretain() - def _got_friend_score_results(self, results: Optional[List[Any]]) -> None: + def _got_friend_score_results(self, results: Optional[list[Any]]) -> None: # FIXME: tidy this up # pylint: disable=too-many-locals @@ -990,7 +990,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): while len(results) < 5: results.append([0, '-', False]) results = results[:5] - times: List[Tuple[float, float]] = [] + times: list[tuple[float, float]] = [] for i in range(len(results)): times.insert(random.randrange(0, len(times) + 1), @@ -1044,7 +1044,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): transition=Text.Transition.IN_RIGHT, transition_delay=tdelay2).autoretain() - def _got_score_results(self, results: Optional[Dict[str, Any]]) -> None: + def _got_score_results(self, results: Optional[dict[str, Any]]) -> None: # FIXME: tidy this up # pylint: disable=too-many-locals @@ -1142,7 +1142,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): while len(self._show_info['tops']) < 10: self._show_info['tops'].append([0, '-']) - times: List[Tuple[float, float]] = [] + times: list[tuple[float, float]] = [] for i in range(len(self._show_info['tops'])): times.insert( random.randrange(0, diff --git a/assets/src/ba_data/python/bastd/activity/drawscore.py b/assets/src/ba_data/python/bastd/activity/drawscore.py index c12b82b7..38109f7b 100644 --- a/assets/src/ba_data/python/bastd/activity/drawscore.py +++ b/assets/src/ba_data/python/bastd/activity/drawscore.py @@ -11,7 +11,7 @@ from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity from bastd.actor.zoomtext import ZoomText if TYPE_CHECKING: - from typing import Any, Dict + pass class DrawScoreScreenActivity(MultiTeamScoreScreenActivity): diff --git a/assets/src/ba_data/python/bastd/activity/dualteamscore.py b/assets/src/ba_data/python/bastd/activity/dualteamscore.py index b031bb80..aae7fdeb 100644 --- a/assets/src/ba_data/python/bastd/activity/dualteamscore.py +++ b/assets/src/ba_data/python/bastd/activity/dualteamscore.py @@ -11,7 +11,7 @@ from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity from bastd.actor.zoomtext import ZoomText if TYPE_CHECKING: - from typing import Any, Dict + pass class TeamVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): diff --git a/assets/src/ba_data/python/bastd/activity/freeforallvictory.py b/assets/src/ba_data/python/bastd/activity/freeforallvictory.py index 10150580..0aab7144 100644 --- a/assets/src/ba_data/python/bastd/activity/freeforallvictory.py +++ b/assets/src/ba_data/python/bastd/activity/freeforallvictory.py @@ -10,7 +10,7 @@ import ba from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity if TYPE_CHECKING: - from typing import Any, Dict, Optional, Set, Tuple + from typing import Any, Optional class FreeForAllVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): @@ -71,7 +71,7 @@ class FreeForAllVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): scale=1.2, x_offset=-110.0) - sound_times: Set[float] = set() + sound_times: set[float] = set() def _scoretxt(text: str, x_offs: float, @@ -260,7 +260,7 @@ class FreeForAllVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): v_offs -= spacing def _safe_animate(self, node: Optional[ba.Node], attr: str, - keys: Dict[float, float]) -> None: + keys: dict[float, float]) -> None: """Run an animation on a node if the node still exists.""" if node: ba.animate(node, attr, keys) diff --git a/assets/src/ba_data/python/bastd/activity/multiteamjoin.py b/assets/src/ba_data/python/bastd/activity/multiteamjoin.py index 9c278590..a1a2586e 100644 --- a/assets/src/ba_data/python/bastd/activity/multiteamjoin.py +++ b/assets/src/ba_data/python/bastd/activity/multiteamjoin.py @@ -11,7 +11,7 @@ from ba.internal import JoinActivity from bastd.actor.text import Text if TYPE_CHECKING: - from typing import Any, Dict, Optional + from typing import Optional class MultiTeamJoinActivity(JoinActivity): diff --git a/assets/src/ba_data/python/bastd/activity/multiteamscore.py b/assets/src/ba_data/python/bastd/activity/multiteamscore.py index ba87a616..3701ff89 100644 --- a/assets/src/ba_data/python/bastd/activity/multiteamscore.py +++ b/assets/src/ba_data/python/bastd/activity/multiteamscore.py @@ -11,7 +11,7 @@ from bastd.actor.text import Text from bastd.actor.image import Image if TYPE_CHECKING: - from typing import Any, Dict, Optional, Union + from typing import Optional, Union class MultiTeamScoreScreenActivity(ScoreScreenActivity): diff --git a/assets/src/ba_data/python/bastd/activity/multiteamvictory.py b/assets/src/ba_data/python/bastd/activity/multiteamvictory.py index 9acc7846..061ad68f 100644 --- a/assets/src/ba_data/python/bastd/activity/multiteamvictory.py +++ b/assets/src/ba_data/python/bastd/activity/multiteamvictory.py @@ -10,7 +10,7 @@ import ba from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity if TYPE_CHECKING: - from typing import Any, Dict, List, Tuple, Optional + from typing import Optional class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): @@ -51,7 +51,7 @@ class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): ba.timer(4.6, ba.Call(ba.playsound, self._score_display_sound)) # Score / Name / Player-record. - player_entries: List[Tuple[int, str, ba.PlayerRecord]] = [] + player_entries: list[tuple[int, str, ba.PlayerRecord]] = [] # Note: for ffa, exclude players who haven't entered the game yet. if self._is_ffa: diff --git a/assets/src/ba_data/python/bastd/actor/bomb.py b/assets/src/ba_data/python/bastd/actor/bomb.py index 99d7dd12..1c86f1fa 100644 --- a/assets/src/ba_data/python/bastd/actor/bomb.py +++ b/assets/src/ba_data/python/bastd/actor/bomb.py @@ -14,7 +14,7 @@ import ba from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import Any, Sequence, Optional, Callable, List, Tuple, Type + from typing import Any, Sequence, Optional, Callable PlayerType = TypeVar('PlayerType', bound='ba.Player') @@ -693,7 +693,7 @@ class Bomb(ba.Actor): elif self.bomb_type == 'tnt': self.blast_radius *= 1.45 - self._explode_callbacks: List[Callable[[Bomb, Blast], Any]] = [] + self._explode_callbacks: list[Callable[[Bomb, Blast], Any]] = [] # The player this came from. self._source_player = source_player @@ -716,7 +716,7 @@ class Bomb(ba.Actor): # since players carrying those things and thus touching footing # objects will think they're on solid ground.. perhaps we don't # wanna add this even in the tnt case? - materials: Tuple[ba.Material, ...] + materials: tuple[ba.Material, ...] if self.bomb_type == 'tnt': materials = (factory.bomb_material, shared.footing_material, shared.object_material) @@ -847,7 +847,7 @@ class Bomb(ba.Actor): }) def get_source_player( - self, playertype: Type[PlayerType]) -> Optional[PlayerType]: + self, playertype: type[PlayerType]) -> Optional[PlayerType]: """Return the source-player if one exists and is the provided type.""" player: Any = self._source_player return (player if isinstance(player, playertype) and player.exists() diff --git a/assets/src/ba_data/python/bastd/actor/controlsguide.py b/assets/src/ba_data/python/bastd/actor/controlsguide.py index db0d8cee..70279a9e 100644 --- a/assets/src/ba_data/python/bastd/actor/controlsguide.py +++ b/assets/src/ba_data/python/bastd/actor/controlsguide.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Tuple, Optional, Sequence, Union + from typing import Any, Optional, Sequence, Union class ControlsGuide(ba.Actor): @@ -24,7 +24,7 @@ class ControlsGuide(ba.Actor): """ def __init__(self, - position: Tuple[float, float] = (390.0, 120.0), + position: tuple[float, float] = (390.0, 120.0), scale: float = 1.0, delay: float = 0.0, lifespan: float = None, @@ -57,8 +57,8 @@ class ControlsGuide(ba.Actor): self._update_timer: Optional[ba.Timer] = None self._title_text: Optional[ba.Node] clr: Sequence[float] - extra_pos_1: Optional[Tuple[float, float]] - extra_pos_2: Optional[Tuple[float, float]] + extra_pos_1: Optional[tuple[float, float]] + extra_pos_2: Optional[tuple[float, float]] if ba.app.iircade_mode: xtweak = 0.2 ytweak = 0.2 diff --git a/assets/src/ba_data/python/bastd/actor/image.py b/assets/src/ba_data/python/bastd/actor/image.py index 2db08a1e..915ea44b 100644 --- a/assets/src/ba_data/python/bastd/actor/image.py +++ b/assets/src/ba_data/python/bastd/actor/image.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, Tuple, Sequence, Union, Dict, Optional + from typing import Any, Sequence, Union, Optional class Image(ba.Actor): @@ -33,13 +33,13 @@ class Image(ba.Actor): BOTTOM_CENTER = 'bottomCenter' def __init__(self, - texture: Union[ba.Texture, Dict[str, Any]], - position: Tuple[float, float] = (0, 0), + texture: Union[ba.Texture, dict[str, Any]], + position: tuple[float, float] = (0, 0), transition: Optional[Transition] = None, transition_delay: float = 0.0, attach: Attach = Attach.CENTER, color: Sequence[float] = (1.0, 1.0, 1.0, 1.0), - scale: Tuple[float, float] = (100.0, 100.0), + scale: tuple[float, float] = (100.0, 100.0), transition_out_delay: float = None, model_opaque: ba.Model = None, model_transparent: ba.Model = None, diff --git a/assets/src/ba_data/python/bastd/actor/playerspaz.py b/assets/src/ba_data/python/bastd/actor/playerspaz.py index b77aa8a4..7969dc75 100644 --- a/assets/src/ba_data/python/bastd/actor/playerspaz.py +++ b/assets/src/ba_data/python/bastd/actor/playerspaz.py @@ -10,7 +10,7 @@ import ba from bastd.actor.spaz import Spaz if TYPE_CHECKING: - from typing import Any, Sequence, Tuple, Optional, Type, Literal + from typing import Any, Sequence, Optional, Literal PlayerType = TypeVar('PlayerType', bound=ba.Player) TeamType = TypeVar('TeamType', bound=ba.Team) @@ -65,7 +65,7 @@ class PlayerSpaz(Spaz): powerups_expire=powerups_expire) self.last_player_attacked_by: Optional[ba.Player] = None self.last_attacked_time = 0.0 - self.last_attacked_type: Optional[Tuple[str, str]] = None + self.last_attacked_type: Optional[tuple[str, str]] = None self.held_count = 0 self.last_player_held_by: Optional[ba.Player] = None self._player = player @@ -75,17 +75,17 @@ class PlayerSpaz(Spaz): @overload def getplayer(self, - playertype: Type[PlayerType], + playertype: type[PlayerType], doraise: Literal[False] = False) -> Optional[PlayerType]: ... @overload - def getplayer(self, playertype: Type[PlayerType], + def getplayer(self, playertype: type[PlayerType], doraise: Literal[True]) -> PlayerType: ... def getplayer(self, - playertype: Type[PlayerType], + playertype: type[PlayerType], doraise: bool = False) -> Optional[PlayerType]: """Get the ba.Player associated with this Spaz. diff --git a/assets/src/ba_data/python/bastd/actor/powerupbox.py b/assets/src/ba_data/python/bastd/actor/powerupbox.py index aac89f07..bed2de5d 100644 --- a/assets/src/ba_data/python/bastd/actor/powerupbox.py +++ b/assets/src/ba_data/python/bastd/actor/powerupbox.py @@ -11,7 +11,7 @@ import ba from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import List, Any, Optional, Sequence + from typing import Any, Optional, Sequence DEFAULT_POWERUP_INTERVAL = 8.0 @@ -133,14 +133,14 @@ class PowerupBoxFactory: actions=('impact_sound', self.drop_sound, 0.5, 0.1), ) - self._powerupdist: List[str] = [] + self._powerupdist: list[str] = [] for powerup, freq in get_default_powerup_distribution(): for _i in range(int(freq)): self._powerupdist.append(powerup) def get_random_powerup_type(self, forcetype: str = None, - excludetypes: List[str] = None) -> str: + excludetypes: list[str] = None) -> str: """Returns a random powerup type (string). See ba.Powerup.poweruptype for available type values. diff --git a/assets/src/ba_data/python/bastd/actor/respawnicon.py b/assets/src/ba_data/python/bastd/actor/respawnicon.py index 504a8e66..66c8bf16 100644 --- a/assets/src/ba_data/python/bastd/actor/respawnicon.py +++ b/assets/src/ba_data/python/bastd/actor/respawnicon.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Optional, Dict, Tuple + from typing import Optional class RespawnIcon: @@ -116,7 +116,7 @@ class RespawnIcon: """Is this icon still visible?""" return self._visible - def _get_context(self, player: ba.Player) -> Tuple[bool, float, Dict]: + def _get_context(self, player: ba.Player) -> tuple[bool, float, dict]: """Return info on where we should be shown and stored.""" activity = ba.getactivity() diff --git a/assets/src/ba_data/python/bastd/actor/scoreboard.py b/assets/src/ba_data/python/bastd/actor/scoreboard.py index 54e13129..8432946d 100644 --- a/assets/src/ba_data/python/bastd/actor/scoreboard.py +++ b/assets/src/ba_data/python/bastd/actor/scoreboard.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, Optional, Sequence, Dict, Union + from typing import Any, Optional, Sequence, Union class _Entry: @@ -334,7 +334,7 @@ class Scoreboard: show up on boards if provided. """ self._flat_tex = ba.gettexture('null') - self._entries: Dict[int, _Entry] = {} + self._entries: dict[int, _Entry] = {} self._label = label self.score_split = score_split diff --git a/assets/src/ba_data/python/bastd/actor/spaz.py b/assets/src/ba_data/python/bastd/actor/spaz.py index 064b90b0..45931bb1 100644 --- a/assets/src/ba_data/python/bastd/actor/spaz.py +++ b/assets/src/ba_data/python/bastd/actor/spaz.py @@ -15,8 +15,7 @@ from bastd.actor.spazfactory import SpazFactory from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import (Any, Sequence, Optional, Dict, List, Union, Callable, - Tuple, Set) + from typing import Any, Sequence, Optional, Union, Callable from bastd.actor.spazfactory import SpazFactory POWERUP_WEAR_OFF_TIME = 20000 @@ -104,7 +103,7 @@ class Spaz(ba.Actor): self._hockey = activity.map.is_hockey else: self._hockey = False - self._punched_nodes: Set[ba.Node] = set() + self._punched_nodes: set[ba.Node] = set() self._cursed = False self._connected_to_player: Optional[ba.Player] = None materials = [ @@ -203,9 +202,9 @@ class Spaz(ba.Actor): self.last_run_time_ms = -9999 self._last_run_value = 0.0 self.last_bomb_time_ms = -9999 - self._turbo_filter_times: Dict[str, int] = {} + self._turbo_filter_times: dict[str, int] = {} self._turbo_filter_time_bucket = 0 - self._turbo_filter_counts: Dict[str, int] = {} + self._turbo_filter_counts: dict[str, int] = {} self.frozen = False self.shattered = False self._last_hit_time: Optional[int] = None @@ -213,7 +212,7 @@ class Spaz(ba.Actor): self._bomb_held = False if self.default_shields: self.equip_shields() - self._dropped_bomb_callbacks: List[Callable[[Spaz, ba.Actor], + self._dropped_bomb_callbacks: list[Callable[[Spaz, ba.Actor], Any]] = [] self._score_text: Optional[ba.Node] = None @@ -561,7 +560,7 @@ class Spaz(ba.Actor): def on_punched(self, damage: int) -> None: """Called when this spaz gets punched.""" - def get_death_points(self, how: ba.DeathType) -> Tuple[int, int]: + def get_death_points(self, how: ba.DeathType) -> tuple[int, int]: """Get the points awarded for killing this spaz.""" del how # Unused. num_hits = float(max(1, self._num_times_hit)) diff --git a/assets/src/ba_data/python/bastd/actor/spazappearance.py b/assets/src/ba_data/python/bastd/actor/spazappearance.py index 166b1f84..bc229407 100644 --- a/assets/src/ba_data/python/bastd/actor/spazappearance.py +++ b/assets/src/ba_data/python/bastd/actor/spazappearance.py @@ -9,10 +9,10 @@ import _ba import ba if TYPE_CHECKING: - from typing import List, Optional, Tuple + from typing import Optional -def get_appearances(include_locked: bool = False) -> List[str]: +def get_appearances(include_locked: bool = False) -> list[str]: """Get the list of available spaz appearances.""" # pylint: disable=too-many-statements # pylint: disable=too-many-branches @@ -104,15 +104,15 @@ class Appearance: self.upper_leg_model = '' self.lower_leg_model = '' self.toes_model = '' - self.jump_sounds: List[str] = [] - self.attack_sounds: List[str] = [] - self.impact_sounds: List[str] = [] - self.death_sounds: List[str] = [] - self.pickup_sounds: List[str] = [] - self.fall_sounds: List[str] = [] + self.jump_sounds: list[str] = [] + self.attack_sounds: list[str] = [] + self.impact_sounds: list[str] = [] + self.death_sounds: list[str] = [] + self.pickup_sounds: list[str] = [] + self.fall_sounds: list[str] = [] self.style = 'spaz' - self.default_color: Optional[Tuple[float, float, float]] = None - self.default_highlight: Optional[Tuple[float, float, float]] = None + self.default_color: Optional[tuple[float, float, float]] = None + self.default_highlight: Optional[tuple[float, float, float]] = None def register_appearances() -> None: diff --git a/assets/src/ba_data/python/bastd/actor/spazbot.py b/assets/src/ba_data/python/bastd/actor/spazbot.py index ac950ef6..9d4d92ec 100644 --- a/assets/src/ba_data/python/bastd/actor/spazbot.py +++ b/assets/src/ba_data/python/bastd/actor/spazbot.py @@ -13,7 +13,7 @@ import ba from bastd.actor.spaz import Spaz if TYPE_CHECKING: - from typing import Any, Optional, List, Tuple, Sequence, Type, Callable + from typing import Any, Optional, Sequence, Callable from bastd.actor.flag import Flag LITE_BOT_COLOR = (1.2, 0.9, 0.2) @@ -125,7 +125,7 @@ class SpazBot(Spaz): self._map = weakref.ref(activity.map) self.last_player_attacked_by: Optional[ba.Player] = None self.last_attacked_time = 0.0 - self.last_attacked_type: Optional[Tuple[str, str]] = None + self.last_attacked_type: Optional[tuple[str, str]] = None self.target_point_default: Optional[ba.Vec3] = None self.held_count = 0 self.last_player_held_by: Optional[ba.Player] = None @@ -141,7 +141,7 @@ class SpazBot(Spaz): self._throw_release_time: Optional[float] = None self._have_dropped_throw_bomb: Optional[bool] = None - self._player_pts: Optional[List[Tuple[ba.Vec3, ba.Vec3]]] = None + self._player_pts: Optional[list[tuple[ba.Vec3, ba.Vec3]]] = None # These cooldowns didn't exist when these bots were calibrated, # so take them out of the equation. @@ -161,7 +161,7 @@ class SpazBot(Spaz): return mval def _get_target_player_pt( - self) -> Tuple[Optional[ba.Vec3], Optional[ba.Vec3]]: + self) -> tuple[Optional[ba.Vec3], Optional[ba.Vec3]]: """Returns the position and velocity of our target. Both values will be None in the case of no target. @@ -189,7 +189,7 @@ class SpazBot(Spaz): ba.Vec3(closest_vel[0], closest_vel[1], closest_vel[2])) return None, None - def set_player_points(self, pts: List[Tuple[ba.Vec3, ba.Vec3]]) -> None: + def set_player_points(self, pts: list[tuple[ba.Vec3, ba.Vec3]]) -> None: """Provide the spaz-bot with the locations of its enemies.""" self._player_pts = pts @@ -882,7 +882,7 @@ class SpazBotSet: self._bot_list_count = 5 self._bot_add_list = 0 self._bot_update_list = 0 - self._bot_lists: List[List[SpazBot]] = [ + self._bot_lists: list[list[SpazBot]] = [ [] for _ in range(self._bot_list_count) ] self._spawn_sound = ba.getsound('spawn') @@ -894,7 +894,7 @@ class SpazBotSet: self.clear() def spawn_bot(self, - bot_type: Type[SpazBot], + bot_type: type[SpazBot], pos: Sequence[float], spawn_time: float = 3.0, on_spawn_call: Callable[[SpazBot], Any] = None) -> None: @@ -907,7 +907,7 @@ class SpazBotSet: on_spawn_call)) self._spawning_count += 1 - def _spawn_bot(self, bot_type: Type[SpazBot], pos: Sequence[float], + def _spawn_bot(self, bot_type: type[SpazBot], pos: Sequence[float], on_spawn_call: Optional[Callable[[SpazBot], Any]]) -> None: spaz = bot_type() ba.playsound(self._spawn_sound, position=pos) @@ -925,9 +925,9 @@ class SpazBotSet: return (self._spawning_count > 0 or any(any(b.is_alive() for b in l) for l in self._bot_lists)) - def get_living_bots(self) -> List[SpazBot]: + def get_living_bots(self) -> list[SpazBot]: """Get the living bots in the set.""" - bots: List[SpazBot] = [] + bots: list[SpazBot] = [] for botlist in self._bot_lists: for bot in botlist: if bot.is_alive(): diff --git a/assets/src/ba_data/python/bastd/actor/spazfactory.py b/assets/src/ba_data/python/bastd/actor/spazfactory.py index 7363ec43..ed06d72e 100644 --- a/assets/src/ba_data/python/bastd/actor/spazfactory.py +++ b/assets/src/ba_data/python/bastd/actor/spazfactory.py @@ -11,7 +11,7 @@ from bastd.gameutils import SharedObjects import _ba if TYPE_CHECKING: - from typing import Any, Dict + from typing import Any class SpazFactory: @@ -206,7 +206,7 @@ class SpazFactory: actions=('modify_node_collision', 'collide', False), ) - self.spaz_media: Dict[str, Any] = {} + self.spaz_media: dict[str, Any] = {} # Lets load some basic rules. # (allows them to be tweaked from the master server) @@ -227,7 +227,7 @@ class SpazFactory: """ return ba.app.spaz_appearances[character].style - def get_media(self, character: str) -> Dict[str, Any]: + def get_media(self, character: str) -> dict[str, Any]: """Return the set of media used by this variant of spaz.""" char = ba.app.spaz_appearances[character] if character not in self.spaz_media: diff --git a/assets/src/ba_data/python/bastd/actor/text.py b/assets/src/ba_data/python/bastd/actor/text.py index 96e3be58..7b84d0d5 100644 --- a/assets/src/ba_data/python/bastd/actor/text.py +++ b/assets/src/ba_data/python/bastd/actor/text.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, Union, Tuple, Sequence, Optional + from typing import Any, Union, Sequence, Optional class Text(ba.Actor): @@ -50,7 +50,7 @@ class Text(ba.Actor): def __init__(self, text: Union[str, ba.Lstr], - position: Tuple[float, float] = (0.0, 0.0), + position: tuple[float, float] = (0.0, 0.0), h_align: HAlign = HAlign.LEFT, v_align: VAlign = VAlign.NONE, color: Sequence[float] = (1.0, 1.0, 1.0, 1.0), diff --git a/assets/src/ba_data/python/bastd/actor/zoomtext.py b/assets/src/ba_data/python/bastd/actor/zoomtext.py index 4c0b2c9c..5288bb66 100644 --- a/assets/src/ba_data/python/bastd/actor/zoomtext.py +++ b/assets/src/ba_data/python/bastd/actor/zoomtext.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, Union, Tuple, Sequence + from typing import Any, Union, Sequence class ZoomText(ba.Actor): @@ -23,8 +23,8 @@ class ZoomText(ba.Actor): def __init__(self, text: Union[str, ba.Lstr], - position: Tuple[float, float] = (0.0, 0.0), - shiftposition: Tuple[float, float] = None, + position: tuple[float, float] = (0.0, 0.0), + shiftposition: tuple[float, float] = None, shiftdelay: float = None, lifespan: float = None, flash: bool = True, @@ -171,7 +171,7 @@ class ZoomText(ba.Actor): return None return super().handlemessage(msg) - def _jitter(self, position: Tuple[float, float], + def _jitter(self, position: tuple[float, float], jitter_amount: float) -> None: if not self.node: return @@ -187,8 +187,8 @@ class ZoomText(ba.Actor): ba.animate(cmb, attr, keys, loop=True) cmb.connectattr('output', self.node, 'position') - def _shift(self, position1: Tuple[float, float], - position2: Tuple[float, float]) -> None: + def _shift(self, position1: tuple[float, float], + position2: tuple[float, float]) -> None: if not self.node: return cmb = ba.newnode('combine', owner=self.node, attrs={'size': 2}) diff --git a/assets/src/ba_data/python/bastd/appdelegate.py b/assets/src/ba_data/python/bastd/appdelegate.py index 9ae96c62..6a7d2776 100644 --- a/assets/src/ba_data/python/bastd/appdelegate.py +++ b/assets/src/ba_data/python/bastd/appdelegate.py @@ -8,15 +8,15 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Type, Any, Dict, Callable, Optional + from typing import Any, Callable, Optional class AppDelegate(ba.AppDelegate): """Defines handlers for high level app functionality.""" def create_default_game_settings_ui( - self, gameclass: Type[ba.GameActivity], - sessiontype: Type[ba.Session], settings: Optional[dict], + self, gameclass: type[ba.GameActivity], + sessiontype: type[ba.Session], settings: Optional[dict], completion_call: Callable[[Optional[dict]], Any]) -> None: """(internal)""" diff --git a/assets/src/ba_data/python/bastd/game/assault.py b/assets/src/ba_data/python/bastd/game/assault.py index 44dc8ca0..6389b4bd 100644 --- a/assets/src/ba_data/python/bastd/game/assault.py +++ b/assets/src/ba_data/python/bastd/game/assault.py @@ -17,7 +17,7 @@ from bastd.actor.scoreboard import Scoreboard from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import Any, Type, List, Dict, Sequence, Union + from typing import Any, Sequence, Union class Player(ba.Player['Team']): @@ -72,11 +72,11 @@ class AssaultGame(ba.TeamGameActivity[Player, Team]): ] @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return issubclass(sessiontype, ba.DualTeamSession) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('team_flag') def __init__(self, settings: dict): @@ -84,7 +84,7 @@ class AssaultGame(ba.TeamGameActivity[Player, Team]): self._scoreboard = Scoreboard() self._last_score_time = 0.0 self._score_sound = ba.getsound('score') - self._base_region_materials: Dict[int, ba.Material] = {} + self._base_region_materials: dict[int, ba.Material] = {} self._epic_mode = bool(settings['Epic Mode']) self._score_to_win = int(settings['Score to Win']) self._time_limit = float(settings['Time Limit']) diff --git a/assets/src/ba_data/python/bastd/game/capturetheflag.py b/assets/src/ba_data/python/bastd/game/capturetheflag.py index 638d2d3b..0e910620 100644 --- a/assets/src/ba_data/python/bastd/game/capturetheflag.py +++ b/assets/src/ba_data/python/bastd/game/capturetheflag.py @@ -16,7 +16,7 @@ from bastd.actor.flag import (FlagFactory, Flag, FlagPickedUpMessage, FlagDroppedMessage, FlagDiedMessage) if TYPE_CHECKING: - from typing import Any, Type, List, Dict, Sequence, Union, Optional + from typing import Any, Sequence, Union, Optional class CTFFlag(Flag): @@ -132,11 +132,11 @@ class CaptureTheFlagGame(ba.TeamGameActivity[Player, Team]): ] @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return issubclass(sessiontype, ba.DualTeamSession) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('team_flag') def __init__(self, settings: dict): @@ -491,10 +491,10 @@ class CaptureTheFlagGame(ba.TeamGameActivity[Player, Team]): player = spaz.getplayer(Player, True) team: Team = player.team player.touching_own_flag = 0 - no_physical_mats: List[ba.Material] = [ + no_physical_mats: list[ba.Material] = [ team.spaz_material_no_flag_physical ] - no_collide_mats: List[ba.Material] = [ + no_collide_mats: list[ba.Material] = [ team.spaz_material_no_flag_collide ] diff --git a/assets/src/ba_data/python/bastd/game/chosenone.py b/assets/src/ba_data/python/bastd/game/chosenone.py index 465dec97..9f5e3315 100644 --- a/assets/src/ba_data/python/bastd/game/chosenone.py +++ b/assets/src/ba_data/python/bastd/game/chosenone.py @@ -16,7 +16,7 @@ from bastd.actor.scoreboard import Scoreboard from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import Any, Type, List, Dict, Optional, Sequence, Union + from typing import Any, Optional, Sequence, Union class Player(ba.Player['Team']): @@ -81,7 +81,7 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]): scoreconfig = ba.ScoreConfig(label='Time Held') @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('keep_away') def __init__(self, settings: dict): @@ -89,7 +89,7 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]): self._scoreboard = Scoreboard() self._chosen_one_player: Optional[Player] = None self._swipsound = ba.getsound('swip') - self._countdownsounds: Dict[int, ba.Sound] = { + self._countdownsounds: dict[int, ba.Sound] = { 10: ba.getsound('announceTen'), 9: ba.getsound('announceNine'), 8: ba.getsound('announceEight'), diff --git a/assets/src/ba_data/python/bastd/game/conquest.py b/assets/src/ba_data/python/bastd/game/conquest.py index 7f41819b..93bb279d 100644 --- a/assets/src/ba_data/python/bastd/game/conquest.py +++ b/assets/src/ba_data/python/bastd/game/conquest.py @@ -17,7 +17,7 @@ from bastd.actor.playerspaz import PlayerSpaz from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import Any, Optional, Type, List, Dict, Sequence, Union + from typing import Any, Optional, Sequence, Union from bastd.actor.respawnicon import RespawnIcon @@ -105,11 +105,11 @@ class ConquestGame(ba.TeamGameActivity[Player, Team]): ] @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return issubclass(sessiontype, ba.DualTeamSession) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('conquest') def __init__(self, settings: dict): @@ -119,7 +119,7 @@ class ConquestGame(ba.TeamGameActivity[Player, Team]): self._score_sound = ba.getsound('score') self._swipsound = ba.getsound('swip') self._extraflagmat = ba.Material() - self._flags: List[ConquestFlag] = [] + self._flags: list[ConquestFlag] = [] self._epic_mode = bool(settings['Epic Mode']) self._time_limit = float(settings['Time Limit']) diff --git a/assets/src/ba_data/python/bastd/game/deathmatch.py b/assets/src/ba_data/python/bastd/game/deathmatch.py index f91c7aff..ddfa0d46 100644 --- a/assets/src/ba_data/python/bastd/game/deathmatch.py +++ b/assets/src/ba_data/python/bastd/game/deathmatch.py @@ -14,7 +14,7 @@ from bastd.actor.playerspaz import PlayerSpaz from bastd.actor.scoreboard import Scoreboard if TYPE_CHECKING: - from typing import Any, Type, List, Dict, Tuple, Union, Sequence, Optional + from typing import Any, Union, Sequence, Optional class Player(ba.Player['Team']): @@ -40,7 +40,7 @@ class DeathMatchGame(ba.TeamGameActivity[Player, Team]): @classmethod def get_available_settings( - cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]: + cls, sessiontype: type[ba.Session]) -> list[ba.Setting]: settings = [ ba.IntSetting( 'Kills to Win Per Player', @@ -86,12 +86,12 @@ class DeathMatchGame(ba.TeamGameActivity[Player, Team]): return settings @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return (issubclass(sessiontype, ba.DualTeamSession) or issubclass(sessiontype, ba.FreeForAllSession)) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('melee') def __init__(self, settings: dict): diff --git a/assets/src/ba_data/python/bastd/game/easteregghunt.py b/assets/src/ba_data/python/bastd/game/easteregghunt.py index 2c5b9b02..d7f3655b 100644 --- a/assets/src/ba_data/python/bastd/game/easteregghunt.py +++ b/assets/src/ba_data/python/bastd/game/easteregghunt.py @@ -20,7 +20,7 @@ from bastd.actor.respawnicon import RespawnIcon from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import Any, Type, Dict, List, Tuple, Optional + from typing import Any, Optional class Player(ba.Player['Team']): @@ -49,12 +49,12 @@ class EasterEggHuntGame(ba.TeamGameActivity[Player, Team]): # We're currently hard-coded for one map. @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ['Tower D'] # We support teams, free-for-all, and co-op sessions. @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return (issubclass(sessiontype, ba.CoopSession) or issubclass(sessiontype, ba.DualTeamSession) or issubclass(sessiontype, ba.FreeForAllSession)) @@ -75,7 +75,7 @@ class EasterEggHuntGame(ba.TeamGameActivity[Player, Team]): self.egg_material.add_actions( conditions=('they_have_material', shared.player_material), actions=(('call', 'at_connect', self._on_egg_player_collide), )) - self._eggs: List[Egg] = [] + self._eggs: list[Egg] = [] self._update_timer: Optional[ba.Timer] = None self._countdown: Optional[OnScreenCountdown] = None self._bots: Optional[SpazBotSet] = None @@ -224,7 +224,7 @@ class EasterEggHuntGame(ba.TeamGameActivity[Player, Team]): class Egg(ba.Actor): """A lovely egg that can be picked up for points.""" - def __init__(self, position: Tuple[float, float, float] = (0.0, 1.0, 0.0)): + def __init__(self, position: tuple[float, float, float] = (0.0, 1.0, 0.0)): super().__init__() activity = self.activity assert isinstance(activity, EasterEggHuntGame) diff --git a/assets/src/ba_data/python/bastd/game/elimination.py b/assets/src/ba_data/python/bastd/game/elimination.py index dd95a469..a0df7705 100644 --- a/assets/src/ba_data/python/bastd/game/elimination.py +++ b/assets/src/ba_data/python/bastd/game/elimination.py @@ -14,8 +14,7 @@ from bastd.actor.spazfactory import SpazFactory from bastd.actor.scoreboard import Scoreboard if TYPE_CHECKING: - from typing import (Any, Tuple, Dict, Type, List, Sequence, Optional, - Union) + from typing import Any, Sequence, Optional, Union class Icon(ba.Actor): @@ -23,7 +22,7 @@ class Icon(ba.Actor): def __init__(self, player: Player, - position: Tuple[float, float], + position: tuple[float, float], scale: float, show_lives: bool = True, show_death: bool = True, @@ -83,7 +82,7 @@ class Icon(ba.Actor): }) self.set_position_and_scale(position, scale) - def set_position_and_scale(self, position: Tuple[float, float], + def set_position_and_scale(self, position: tuple[float, float], scale: float) -> None: """(Re)position the icon.""" assert self.node @@ -156,7 +155,7 @@ class Player(ba.Player['Team']): def __init__(self) -> None: self.lives = 0 - self.icons: List[Icon] = [] + self.icons: list[Icon] = [] class Team(ba.Team[Player]): @@ -164,7 +163,7 @@ class Team(ba.Team[Player]): def __init__(self) -> None: self.survival_seconds: Optional[int] = None - self.spawn_order: List[Player] = [] + self.spawn_order: list[Player] = [] # ba_meta export game @@ -183,7 +182,7 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]): @classmethod def get_available_settings( - cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]: + cls, sessiontype: type[ba.Session]) -> list[ba.Setting]: settings = [ ba.IntSetting( 'Lives Per Player', @@ -224,12 +223,12 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]): return settings @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return (issubclass(sessiontype, ba.DualTeamSession) or issubclass(sessiontype, ba.FreeForAllSession)) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('melee') def __init__(self, settings: dict): @@ -421,7 +420,7 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]): if living_player: assert living_player_pos is not None player_pos = ba.Vec3(living_player_pos) - points: List[Tuple[float, ba.Vec3]] = [] + points: list[tuple[float, ba.Vec3]] = [] for team in self.teams: start_pos = ba.Vec3(self.map.get_start_position(team.id)) points.append( @@ -539,7 +538,7 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]): if len(self._get_living_teams()) < 2: self._round_end_timer = ba.Timer(0.5, self.end_game) - def _get_living_teams(self) -> List[Team]: + def _get_living_teams(self) -> list[Team]: return [ team for team in self.teams if len(team.players) > 0 and any(player.lives > 0 diff --git a/assets/src/ba_data/python/bastd/game/football.py b/assets/src/ba_data/python/bastd/game/football.py index 8773e272..bcddc8bc 100644 --- a/assets/src/ba_data/python/bastd/game/football.py +++ b/assets/src/ba_data/python/bastd/game/football.py @@ -26,7 +26,7 @@ from bastd.actor.spazbot import (SpazBotDiedMessage, SpazBotPunchedMessage, StickyBot, ExplodeyBot) if TYPE_CHECKING: - from typing import Any, List, Type, Dict, Sequence, Optional, Union + from typing import Any, Sequence, Optional, Union from bastd.actor.spaz import Spaz from bastd.actor.spazbot import SpazBot @@ -110,12 +110,12 @@ class FootballTeamGame(ba.TeamGameActivity[Player, Team]): default_music = ba.MusicType.FOOTBALL @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: # We only support two-team play. return issubclass(sessiontype, ba.DualTeamSession) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('football') def __init__(self, settings: dict): @@ -137,7 +137,7 @@ class FootballTeamGame(ba.TeamGameActivity[Player, Team]): ('call', 'at_connect', self._handle_score), )) self._flag_spawn_pos: Optional[Sequence[float]] = None - self._score_regions: List[ba.NodeActor] = [] + self._score_regions: list[ba.NodeActor] = [] self._flag: Optional[FootballFlag] = None self._flag_respawn_timer: Optional[ba.Timer] = None self._flag_respawn_light: Optional[ba.NodeActor] = None @@ -377,12 +377,12 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]): self._player_has_punched = False self._scoreboard: Optional[Scoreboard] = None self._flag_spawn_pos: Optional[Sequence[float]] = None - self._score_regions: List[ba.NodeActor] = [] - self._exclude_powerups: List[str] = [] + self._score_regions: list[ba.NodeActor] = [] + self._exclude_powerups: list[str] = [] self._have_tnt = False - self._bot_types_initial: Optional[List[Type[SpazBot]]] = None - self._bot_types_7: Optional[List[Type[SpazBot]]] = None - self._bot_types_14: Optional[List[Type[SpazBot]]] = None + self._bot_types_initial: Optional[list[type[SpazBot]]] = None + self._bot_types_7: Optional[list[type[SpazBot]]] = None + self._bot_types_14: Optional[list[type[SpazBot]]] = None self._bot_team: Optional[Team] = None self._starttime_ms: Optional[int] = None self._time_text: Optional[ba.NodeActor] = None @@ -436,9 +436,9 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]): controlsguide.ControlsGuide(delay=3.0, lifespan=10.0, bright=True).autoretain() assert self.initialplayerinfos is not None - abot: Type[SpazBot] - bbot: Type[SpazBot] - cbot: Type[SpazBot] + abot: type[SpazBot] + bbot: type[SpazBot] + cbot: type[SpazBot] if self._preset in ['rookie', 'rookie_easy']: self._exclude_powerups = ['curse'] self._have_tnt = False @@ -467,7 +467,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]): self._bot_types_initial = [ChargerBot] * len( self.initialplayerinfos) abot = (BrawlerBot if self._preset == 'pro' else BrawlerBotLite) - typed_bot_list: List[Type[SpazBot]] = [] + typed_bot_list: list[type[SpazBot]] = [] self._bot_types_7 = ( typed_bot_list + [abot] + [BomberBot] * (1 if len(self.initialplayerinfos) < 3 else 2)) @@ -479,7 +479,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]): self._have_tnt = True abot = (BrawlerBotPro if self._preset == 'uber' else BrawlerBot) bbot = (TriggerBotPro if self._preset == 'uber' else TriggerBot) - typed_bot_list_2: List[Type[SpazBot]] = [] + typed_bot_list_2: list[type[SpazBot]] = [] self._bot_types_initial = (typed_bot_list_2 + [StickyBot] + [abot] * len(self.initialplayerinfos)) self._bot_types_7 = ( @@ -542,7 +542,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]): for bottype in self._bot_types_initial: self._spawn_bot(bottype) - def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None: + def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None: self._show_standard_scores_to_beat_ui(scores) def _on_bot_spawn(self, spaz: SpazBot) -> None: @@ -550,7 +550,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]): spaz.target_point_default = ba.Vec3(0, 0, 0) def _spawn_bot(self, - spaz_type: Type[SpazBot], + spaz_type: type[SpazBot], immediate: bool = False) -> None: assert self._bot_team is not None pos = self.map.get_start_position(self._bot_team.id) diff --git a/assets/src/ba_data/python/bastd/game/hockey.py b/assets/src/ba_data/python/bastd/game/hockey.py index 0e988c05..7f47bf78 100644 --- a/assets/src/ba_data/python/bastd/game/hockey.py +++ b/assets/src/ba_data/python/bastd/game/hockey.py @@ -16,7 +16,7 @@ from bastd.actor.powerupbox import PowerupBoxFactory from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import Any, Sequence, Dict, Type, List, Optional, Union + from typing import Any, Sequence, Optional, Union class PuckDiedMessage: @@ -36,7 +36,7 @@ class Puck(ba.Actor): # Spawn just above the provided point. self._spawn_pos = (position[0], position[1] + 1.0, position[2]) - self.last_players_to_touch: Dict[int, Player] = {} + self.last_players_to_touch: dict[int, Player] = {} self.scored = False assert activity is not None assert isinstance(activity, HockeyGame) @@ -141,11 +141,11 @@ class HockeyGame(ba.TeamGameActivity[Player, Team]): default_music = ba.MusicType.HOCKEY @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return issubclass(sessiontype, ba.DualTeamSession) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('hockey') def __init__(self, settings: dict): @@ -199,7 +199,7 @@ class HockeyGame(ba.TeamGameActivity[Player, Team]): True), ('modify_part_collision', 'physical', False), ('call', 'at_connect', self._handle_score))) self._puck_spawn_pos: Optional[Sequence[float]] = None - self._score_regions: Optional[List[ba.NodeActor]] = None + self._score_regions: Optional[list[ba.NodeActor]] = None self._puck: Optional[Puck] = None self._score_to_win = int(settings['Score to Win']) self._time_limit = float(settings['Time Limit']) diff --git a/assets/src/ba_data/python/bastd/game/keepaway.py b/assets/src/ba_data/python/bastd/game/keepaway.py index 7810b2e6..263326a7 100644 --- a/assets/src/ba_data/python/bastd/game/keepaway.py +++ b/assets/src/ba_data/python/bastd/game/keepaway.py @@ -17,7 +17,7 @@ from bastd.actor.flag import (Flag, FlagDroppedMessage, FlagDiedMessage, FlagPickedUpMessage) if TYPE_CHECKING: - from typing import Any, Type, List, Dict, Optional, Sequence, Union + from typing import Any, Optional, Sequence, Union class FlagState(Enum): @@ -81,12 +81,12 @@ class KeepAwayGame(ba.TeamGameActivity[Player, Team]): default_music = ba.MusicType.KEEP_AWAY @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return (issubclass(sessiontype, ba.DualTeamSession) or issubclass(sessiontype, ba.FreeForAllSession)) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('keep_away') def __init__(self, settings: dict): @@ -108,7 +108,7 @@ class KeepAwayGame(ba.TeamGameActivity[Player, Team]): } self._flag_spawn_pos: Optional[Sequence[float]] = None self._update_timer: Optional[ba.Timer] = None - self._holding_players: List[Player] = [] + self._holding_players: list[Player] = [] self._flag_state: Optional[FlagState] = None self._flag_light: Optional[ba.Node] = None self._scoring_team: Optional[Team] = None diff --git a/assets/src/ba_data/python/bastd/game/kingofthehill.py b/assets/src/ba_data/python/bastd/game/kingofthehill.py index 66726261..9194f5ac 100644 --- a/assets/src/ba_data/python/bastd/game/kingofthehill.py +++ b/assets/src/ba_data/python/bastd/game/kingofthehill.py @@ -18,8 +18,7 @@ from bastd.actor.scoreboard import Scoreboard from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from weakref import ReferenceType - from typing import Any, Type, List, Dict, Optional, Sequence, Union + from typing import Any, Optional, Sequence, Union class FlagState(Enum): @@ -84,11 +83,11 @@ class KingOfTheHillGame(ba.TeamGameActivity[Player, Team]): scoreconfig = ba.ScoreConfig(label='Time Held') @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return issubclass(sessiontype, ba.MultiTeamSession) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('king_of_the_hill') def __init__(self, settings: dict): @@ -113,7 +112,7 @@ class KingOfTheHillGame(ba.TeamGameActivity[Player, Team]): self._flag_state: Optional[FlagState] = None self._flag: Optional[Flag] = None self._flag_light: Optional[ba.Node] = None - self._scoring_team: Optional[ReferenceType[Team]] = None + self._scoring_team: Optional[weakref.ref[Team]] = None self._hold_time = int(settings['Hold Time']) self._time_limit = float(settings['Time Limit']) self._flag_region_material = ba.Material() diff --git a/assets/src/ba_data/python/bastd/game/meteorshower.py b/assets/src/ba_data/python/bastd/game/meteorshower.py index 32c62c0d..e346160e 100644 --- a/assets/src/ba_data/python/bastd/game/meteorshower.py +++ b/assets/src/ba_data/python/bastd/game/meteorshower.py @@ -15,7 +15,7 @@ from bastd.actor.bomb import Bomb from bastd.actor.onscreentimer import OnScreenTimer if TYPE_CHECKING: - from typing import Any, Sequence, Optional, List, Dict, Type, Type + from typing import Any, Sequence, Optional class Player(ba.Player['Team']): @@ -50,12 +50,12 @@ class MeteorShowerGame(ba.TeamGameActivity[Player, Team]): # We're currently hard-coded for one map. @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ['Rampage'] # We support teams, free-for-all, and co-op sessions. @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return (issubclass(sessiontype, ba.DualTeamSession) or issubclass(sessiontype, ba.FreeForAllSession) or issubclass(sessiontype, ba.CoopSession)) diff --git a/assets/src/ba_data/python/bastd/game/ninjafight.py b/assets/src/ba_data/python/bastd/game/ninjafight.py index 37ba0215..13b6341f 100644 --- a/assets/src/ba_data/python/bastd/game/ninjafight.py +++ b/assets/src/ba_data/python/bastd/game/ninjafight.py @@ -15,7 +15,7 @@ from bastd.actor.spazbot import SpazBotSet, ChargerBot, SpazBotDiedMessage from bastd.actor.onscreentimer import OnScreenTimer if TYPE_CHECKING: - from typing import Any, Type, Dict, List, Optional + from typing import Any, Optional class Player(ba.Player['Team']): @@ -41,14 +41,14 @@ class NinjaFightGame(ba.TeamGameActivity[Player, Team]): default_music = ba.MusicType.TO_THE_DEATH @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: # For now we're hard-coding spawn positions and whatnot # so we need to be sure to specify that we only support # a specific map. return ['Courtyard'] @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: # We currently support Co-Op only. return issubclass(sessiontype, ba.CoopSession) diff --git a/assets/src/ba_data/python/bastd/game/onslaught.py b/assets/src/ba_data/python/bastd/game/onslaught.py index 9b8efe85..d56f3fac 100644 --- a/assets/src/ba_data/python/bastd/game/onslaught.py +++ b/assets/src/ba_data/python/bastd/game/onslaught.py @@ -28,21 +28,21 @@ from bastd.actor.spazbot import ( TriggerBotProShielded, BrawlerBotPro, BomberBotProShielded) if TYPE_CHECKING: - from typing import Any, Type, Dict, Optional, List, Tuple, Union, Sequence + from typing import Any, Optional, Union, Sequence from bastd.actor.spazbot import SpazBot @dataclass class Wave: """A wave of enemies.""" - entries: List[Union[Spawn, Spacing, Delay, None]] + entries: list[Union[Spawn, Spacing, Delay, None]] base_angle: float = 0.0 @dataclass class Spawn: """A bot spawn event in a wave.""" - bottype: Union[Type[SpazBot], str] + bottype: Union[type[SpazBot], str] point: Optional[Point] = None spacing: float = 5.0 @@ -123,7 +123,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): name = 'Onslaught' description = 'Defeat all enemies.' - tips: List[Union[str, ba.GameTip]] = [ + tips: list[Union[str, ba.GameTip]] = [ 'Hold any button to run.' ' (Trigger buttons work well if you have them)', 'Try tricking enemies into killing eachother or running off cliffs.', @@ -179,8 +179,8 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): self._dingsound = ba.getsound('dingSmall') self._dingsoundhigh = ba.getsound('dingSmallHigh') self._have_tnt = False - self._excluded_powerups: Optional[List[str]] = None - self._waves: List[Wave] = [] + self._excluded_powerups: Optional[list[str]] = None + self._waves: list[Wave] = [] self._tntspawner: Optional[TNTSpawner] = None self._bots: Optional[SpazBotSet] = None self._powerup_drop_timer: Optional[ba.Timer] = None @@ -538,10 +538,10 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): self._bots = SpazBotSet() ba.timer(4.0, self._start_updating_waves) - def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None: + def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None: self._show_standard_scores_to_beat_ui(scores) - def _get_dist_grp_totals(self, grps: List[Any]) -> Tuple[int, int]: + def _get_dist_grp_totals(self, grps: list[Any]) -> tuple[int, int]: totalpts = 0 totaldudes = 0 for grp in grps: @@ -553,11 +553,11 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): def _get_distribution(self, target_points: int, min_dudes: int, max_dudes: int, group_count: int, - max_level: int) -> List[List[Tuple[int, int]]]: + max_level: int) -> list[list[tuple[int, int]]]: """Calculate a distribution of bad guys given some params.""" max_iterations = 10 + max_dudes * 2 - groups: List[List[Tuple[int, int]]] = [] + groups: list[list[tuple[int, int]]] = [] for _g in range(group_count): groups.append([]) types = [1] @@ -599,9 +599,9 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): return groups - def _add_dist_entry_if_possible(self, groups: List[List[Tuple[int, int]]], + def _add_dist_entry_if_possible(self, groups: list[list[tuple[int, int]]], max_dudes: int, target_points: int, - types: List[int]) -> int: + types: list[int]) -> int: # See how much we're off our target by. total_points, total_dudes = self._get_dist_grp_totals(groups) diff = target_points - total_points @@ -624,7 +624,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): return diff def _delete_smallest_dist_entry( - self, groups: List[List[Tuple[int, int]]]) -> None: + self, groups: list[list[tuple[int, int]]]) -> None: smallest_value = 9999 smallest_entry = None smallest_entry_group = None @@ -639,7 +639,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): smallest_entry_group.remove(smallest_entry) def _delete_biggest_dist_entry( - self, groups: List[List[Tuple[int, int]]]) -> None: + self, groups: list[list[tuple[int, int]]]) -> None: biggest_value = 9999 biggest_entry = None biggest_entry_group = None @@ -654,7 +654,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): biggest_entry_group.remove(biggest_entry) def _delete_random_dist_entry(self, - groups: List[List[Tuple[int, int]]]) -> None: + groups: list[list[tuple[int, int]]]) -> None: entry_count = 0 for group in groups: for _ in group: @@ -1025,7 +1025,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): 'text': wttxt })) - def _bot_levels_for_wave(self) -> List[List[Type[SpazBot]]]: + def _bot_levels_for_wave(self) -> list[list[type[SpazBot]]]: level = self._wavenum bot_types = [ BomberBot, BrawlerBot, TriggerBot, ChargerBot, BomberBotPro, @@ -1068,10 +1068,10 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): return bot_levels def _add_entries_for_distribution_group( - self, group: List[Tuple[int, int]], - bot_levels: List[List[Type[SpazBot]]], - all_entries: List[Union[Spawn, Spacing, Delay, None]]) -> None: - entries: List[Union[Spawn, Spacing, Delay, None]] = [] + self, group: list[tuple[int, int]], + bot_levels: list[list[type[SpazBot]]], + all_entries: list[Union[Spawn, Spacing, Delay, None]]) -> None: + entries: list[Union[Spawn, Spacing, Delay, None]] = [] for entry in group: bot_level = bot_levels[entry[0] - 1] bot_type = bot_level[random.randrange(len(bot_level))] @@ -1106,7 +1106,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): distribution = self._get_distribution(target_points, min_dudes, max_dudes, group_count, max_level) - all_entries: List[Union[Spawn, Spacing, Delay, None]] = [] + all_entries: list[Union[Spawn, Spacing, Delay, None]] = [] for group in distribution: self._add_entries_for_distribution_group(group, bot_levels, all_entries) @@ -1125,7 +1125,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): def add_bot_at_point(self, point: Point, - spaz_type: Type[SpazBot], + spaz_type: type[SpazBot], spawn_time: float = 1.0) -> None: """Add a new bot at a specified named point.""" if self._game_over: @@ -1137,7 +1137,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): def add_bot_at_angle(self, angle: float, - spaz_type: Type[SpazBot], + spaz_type: type[SpazBot], spawn_time: float = 1.0) -> None: """Add a new bot at a specified angle (for circular maps).""" if self._game_over: diff --git a/assets/src/ba_data/python/bastd/game/race.py b/assets/src/ba_data/python/bastd/game/race.py index 0a058ac4..c8e6f3d3 100644 --- a/assets/src/ba_data/python/bastd/game/race.py +++ b/assets/src/ba_data/python/bastd/game/race.py @@ -18,8 +18,7 @@ from bastd.actor.scoreboard import Scoreboard from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import (Any, Type, Tuple, List, Sequence, Optional, Dict, - Union) + from typing import Any, Sequence, Optional, Union from bastd.actor.onscreentimer import OnScreenTimer @@ -83,7 +82,7 @@ class RaceGame(ba.TeamGameActivity[Player, Team]): @classmethod def get_available_settings( - cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]: + cls, sessiontype: type[ba.Session]) -> list[ba.Setting]: settings = [ ba.IntSetting('Laps', min_value=1, default=3, increment=1), ba.IntChoiceSetting( @@ -129,11 +128,11 @@ class RaceGame(ba.TeamGameActivity[Player, Team]): return settings @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return issubclass(sessiontype, ba.MultiTeamSession) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('race') def __init__(self, settings: dict): @@ -148,15 +147,15 @@ class RaceGame(ba.TeamGameActivity[Player, Team]): self._beep_1_sound = ba.getsound('raceBeep1') self._beep_2_sound = ba.getsound('raceBeep2') self.race_region_material: Optional[ba.Material] = None - self._regions: List[RaceRegion] = [] + self._regions: list[RaceRegion] = [] self._team_finish_pts: Optional[int] = None self._time_text: Optional[ba.Actor] = None self._timer: Optional[OnScreenTimer] = None - self._race_mines: Optional[List[RaceMine]] = None + self._race_mines: Optional[list[RaceMine]] = None self._race_mine_timer: Optional[ba.Timer] = None self._scoreboard_timer: Optional[ba.Timer] = None self._player_order_update_timer: Optional[ba.Timer] = None - self._start_lights: Optional[List[ba.Node]] = None + self._start_lights: Optional[list[ba.Node]] = None self._bomb_spawn_timer: Optional[ba.Timer] = None self._laps = int(settings['Laps']) self._entire_team_must_finish = bool( diff --git a/assets/src/ba_data/python/bastd/game/runaround.py b/assets/src/ba_data/python/bastd/game/runaround.py index 3607ecbd..e22d4581 100644 --- a/assets/src/ba_data/python/bastd/game/runaround.py +++ b/assets/src/ba_data/python/bastd/game/runaround.py @@ -26,7 +26,7 @@ from bastd.actor.spazbot import ( BomberBotPro, BrawlerBotPro) if TYPE_CHECKING: - from typing import Type, Any, List, Dict, Tuple, Sequence, Optional, Union + from typing import Any, Sequence, Optional, Union class Preset(Enum): @@ -51,7 +51,7 @@ class Point(Enum): @dataclass class Spawn: """Defines a bot spawn event.""" - type: Type[SpazBot] + type: type[SpazBot] path: int = 0 point: Optional[Point] = None @@ -65,7 +65,7 @@ class Spacing: @dataclass class Wave: """Defines a wave of enemies.""" - entries: List[Union[Spawn, Spacing, None]] + entries: list[Union[Spawn, Spacing, None]] class Player(ba.Player['Team']): @@ -93,7 +93,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): default_music = ba.MusicType.MARCHING # How fast our various bot types walk. - _bot_speed_map: Dict[Type[SpazBot], float] = { + _bot_speed_map: dict[type[SpazBot], float] = { BomberBot: 0.48, BomberBotPro: 0.48, BomberBotProShielded: 0.48, @@ -152,9 +152,9 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): self._score_region: Optional[ba.Actor] = None self._dingsound = ba.getsound('dingSmall') self._dingsoundhigh = ba.getsound('dingSmallHigh') - self._exclude_powerups: Optional[List[str]] = None + self._exclude_powerups: Optional[list[str]] = None self._have_tnt: Optional[bool] = None - self._waves: Optional[List[Wave]] = None + self._waves: Optional[list[Wave]] = None self._bots = SpazBotSet() self._tntspawner: Optional[TNTSpawner] = None self._lives_bg: Optional[ba.NodeActor] = None @@ -571,7 +571,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): 'playerinfos': self.initialplayerinfos }) - def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None: + def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None: self._show_standard_scores_to_beat_ui(scores) def _update_waves(self) -> None: @@ -722,14 +722,14 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): t_sec = 0.0 base_delay = 0.5 delay = 0.0 - bot_types: List[Union[Spawn, Spacing, None]] = [] + bot_types: list[Union[Spawn, Spacing, None]] = [] if self._preset in {Preset.ENDLESS, Preset.ENDLESS_TOURNAMENT}: level = self._wavenum target_points = (level + 1) * 8.0 group_count = random.randint(1, 3) - entries: List[Union[Spawn, Spacing, None]] = [] - spaz_types: List[Tuple[Type[SpazBot], float]] = [] + entries: list[Union[Spawn, Spacing, None]] = [] + spaz_types: list[tuple[type[SpazBot], float]] = [] if level < 6: spaz_types += [(BomberBot, 5.0)] if level < 10: @@ -751,7 +751,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): ] * (1 + (level - 7) // 3) # Bot type, their effect on target points. - defender_types: List[Tuple[Type[SpazBot], float]] = [ + defender_types: list[tuple[type[SpazBot], float]] = [ (BomberBot, 0.9), (BrawlerBot, 0.9), (TriggerBot, 0.85), @@ -815,8 +815,8 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): elif path == 6: this_target_point_s *= 0.7 - def _add_defender(defender_type: Tuple[Type[SpazBot], float], - pnt: Point) -> Tuple[float, Spawn]: + def _add_defender(defender_type: tuple[type[SpazBot], float], + pnt: Point) -> tuple[float, Spawn]: # This is ok because we call it immediately. # pylint: disable=cell-var-from-loop return this_target_point_s * defender_type[1], Spawn( @@ -979,7 +979,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): def add_bot_at_point(self, point: Point, - spaztype: Type[SpazBot], + spaztype: type[SpazBot], path: int, spawn_time: float = 0.1) -> None: """Add the given type bot with the given delay (in seconds).""" @@ -1152,7 +1152,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): return super().handlemessage(msg) return None - def _get_bot_speed(self, bot_type: Type[SpazBot]) -> float: + def _get_bot_speed(self, bot_type: type[SpazBot]) -> float: speed = self._bot_speed_map.get(bot_type) if speed is None: raise TypeError('Invalid bot type to _get_bot_speed(): ' + diff --git a/assets/src/ba_data/python/bastd/game/targetpractice.py b/assets/src/ba_data/python/bastd/game/targetpractice.py index 91d0e131..c6213065 100644 --- a/assets/src/ba_data/python/bastd/game/targetpractice.py +++ b/assets/src/ba_data/python/bastd/game/targetpractice.py @@ -17,7 +17,7 @@ from bastd.actor.bomb import Bomb from bastd.actor.popuptext import PopupText if TYPE_CHECKING: - from typing import Any, Type, List, Dict, Optional, Sequence + from typing import Any, Optional, Sequence from bastd.actor.bomb import Blast @@ -49,11 +49,11 @@ class TargetPracticeGame(ba.TeamGameActivity[Player, Team]): default_music = ba.MusicType.FORWARD_MARCH @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ['Doom Shroom'] @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: # We support any teams or versus sessions. return (issubclass(sessiontype, ba.CoopSession) or issubclass(sessiontype, ba.MultiTeamSession)) @@ -61,7 +61,7 @@ class TargetPracticeGame(ba.TeamGameActivity[Player, Team]): def __init__(self, settings: dict): super().__init__(settings) self._scoreboard = Scoreboard() - self._targets: List[Target] = [] + self._targets: list[Target] = [] self._update_timer: Optional[ba.Timer] = None self._countdown: Optional[OnScreenCountdown] = None self._target_count = int(settings['Target Count']) @@ -280,7 +280,7 @@ class Target(ba.Actor): # Inform our activity that we were hit self._hit = True activity.handlemessage(self.TargetHitMessage()) - keys: Dict[float, Sequence[float]] = { + keys: dict[float, Sequence[float]] = { 0.0: (1.0, 0.0, 0.0), 0.049: (1.0, 0.0, 0.0), 0.05: (1.0, 1.0, 1.0), diff --git a/assets/src/ba_data/python/bastd/game/thelaststand.py b/assets/src/ba_data/python/bastd/game/thelaststand.py index 5a24cc4d..b4235915 100644 --- a/assets/src/ba_data/python/bastd/game/thelaststand.py +++ b/assets/src/ba_data/python/bastd/game/thelaststand.py @@ -21,7 +21,7 @@ from bastd.actor.spazbot import (SpazBotSet, SpazBotDiedMessage, BomberBot, ChargerBot, StickyBot, ExplodeyBot) if TYPE_CHECKING: - from typing import Any, Dict, Type, List, Optional, Sequence + from typing import Any, Optional, Sequence from bastd.actor.spazbot import SpazBot @@ -70,7 +70,7 @@ class TheLastStandGame(ba.CoopGameActivity[Player, Team]): self._powerup_center = (0, 7, -4.14) self._powerup_spread = (7, 2) self._preset = str(settings.get('preset', 'default')) - self._excludepowerups: List[str] = [] + self._excludepowerups: list[str] = [] self._scoreboard: Optional[Scoreboard] = None self._score = 0 self._bots = SpazBotSet() @@ -185,11 +185,11 @@ class TheLastStandGame(ba.CoopGameActivity[Player, Team]): self._bot_update_interval = max(0.5, self._bot_update_interval * 0.98) self._bot_update_timer = ba.Timer(self._bot_update_interval, ba.WeakCall(self._update_bots)) - botspawnpts: List[Sequence[float]] = [[-5.0, 5.5, -4.14], + botspawnpts: list[Sequence[float]] = [[-5.0, 5.5, -4.14], [0.0, 5.5, -4.14], [5.0, 5.5, -4.14]] dists = [0.0, 0.0, 0.0] - playerpts: List[Sequence[float]] = [] + playerpts: list[Sequence[float]] = [] for player in self.players: try: if player.is_alive(): @@ -220,7 +220,7 @@ class TheLastStandGame(ba.CoopGameActivity[Player, Team]): # Now go back through and see where this value falls. total = 0 - bottype: Optional[Type[SpazBot]] = None + bottype: Optional[type[SpazBot]] = None for spawntype, spawninfo in self._bot_spawn_types.items(): total += spawninfo.spawnrate if randval <= total: @@ -284,7 +284,7 @@ class TheLastStandGame(ba.CoopGameActivity[Player, Team]): else: super().handlemessage(msg) - def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None: + def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None: self._show_standard_scores_to_beat_ui(scores) def end_game(self) -> None: diff --git a/assets/src/ba_data/python/bastd/gameutils.py b/assets/src/ba_data/python/bastd/gameutils.py index 280e5742..01a913f6 100644 --- a/assets/src/ba_data/python/bastd/gameutils.py +++ b/assets/src/ba_data/python/bastd/gameutils.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Sequence, Optional + from typing import Optional class SharedObjects: diff --git a/assets/src/ba_data/python/bastd/keyboard/englishkeyboard.py b/assets/src/ba_data/python/bastd/keyboard/englishkeyboard.py index a7e197d2..8b8ff490 100644 --- a/assets/src/ba_data/python/bastd/keyboard/englishkeyboard.py +++ b/assets/src/ba_data/python/bastd/keyboard/englishkeyboard.py @@ -12,13 +12,13 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Iterable, List, Tuple, Dict + from typing import Iterable -def split(chars: Iterable[str], maxlen: int) -> List[List[str]]: +def split(chars: Iterable[str], maxlen: int) -> list[list[str]]: """Returns char groups with a fixed number of elements""" result = [] - shatter: List[str] = [] + shatter: list[str] = [] for i in chars: if len(shatter) < maxlen: shatter.append(i) @@ -32,7 +32,7 @@ def split(chars: Iterable[str], maxlen: int) -> List[List[str]]: return result -def generate_emojis(maxlen: int) -> List[List[str]]: +def generate_emojis(maxlen: int) -> list[list[str]]: """Generates a lot of UTF8 emojis prepared for ba.Keyboard pages""" all_emojis = split([chr(i) for i in range(0x1F601, 0x1F650)], maxlen) all_emojis += split([chr(i) for i in range(0x2702, 0x27B1)], maxlen) @@ -49,7 +49,7 @@ class EnglishKeyboard(ba.Keyboard): ('z', 'x', 'c', 'v', 'b', 'n', 'm')] nums = ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '/', ':', ';', '(', ')', '$', '&', '@', '"', '.', ',', '?', '!', '\'', '_') - pages: Dict[str, Tuple[str, ...]] = { + pages: dict[str, tuple[str, ...]] = { f'emoji{i}': tuple(page) for i, page in enumerate(generate_emojis(len(nums))) } diff --git a/assets/src/ba_data/python/bastd/mainmenu.py b/assets/src/ba_data/python/bastd/mainmenu.py index 5889631a..e7f2db68 100644 --- a/assets/src/ba_data/python/bastd/mainmenu.py +++ b/assets/src/ba_data/python/bastd/mainmenu.py @@ -13,7 +13,7 @@ import ba import _ba if TYPE_CHECKING: - from typing import Any, List, Optional + from typing import Any, Optional # FIXME: Clean this up if I ever revisit it. # pylint: disable=attribute-defined-outside-init @@ -34,7 +34,7 @@ class MainMenuActivity(ba.Activity[ba.Player, ba.Team]): random.seed(123) self._logo_node: Optional[ba.Node] = None self._custom_logo_tex_name: Optional[str] = None - self._word_actors: List[ba.Actor] = [] + self._word_actors: list[ba.Actor] = [] app = ba.app # FIXME: We shouldn't be doing things conditionally based on whether @@ -364,7 +364,7 @@ class MainMenuActivity(ba.Activity[ba.Player, ba.Team]): return with ba.Context(activity): - self._phrases: List[str] = [] + self._phrases: list[str] = [] # Show upcoming achievements in non-vr versions # (currently too hard to read in vr). diff --git a/assets/src/ba_data/python/bastd/maps.py b/assets/src/ba_data/python/bastd/maps.py index 03f41255..7d3779e4 100644 --- a/assets/src/ba_data/python/bastd/maps.py +++ b/assets/src/ba_data/python/bastd/maps.py @@ -11,7 +11,7 @@ import ba from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import Any, List, Dict + from typing import Any class HockeyStadium(ba.Map): @@ -21,7 +21,7 @@ class HockeyStadium(ba.Map): name = 'Hockey Stadium' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'hockey', 'team_flag', 'keep_away'] @@ -31,7 +31,7 @@ class HockeyStadium(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'models': (ba.getmodel('hockeyStadiumOuter'), ba.getmodel('hockeyStadiumInner'), ba.getmodel('hockeyStadiumStands')), @@ -106,7 +106,7 @@ class FootballStadium(ba.Map): name = 'Football Stadium' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'football', 'team_flag', 'keep_away'] @@ -116,7 +116,7 @@ class FootballStadium(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('footballStadium'), 'vr_fill_model': ba.getmodel('footballStadiumVRFill'), 'collide_model': ba.getcollidemodel('footballStadiumCollide'), @@ -170,7 +170,7 @@ class Bridgit(ba.Map): dataname = 'bridgit' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" # print('getting playtypes', cls._getdata()['play_types']) return ['melee', 'team_flag', 'keep_away'] @@ -181,7 +181,7 @@ class Bridgit(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model_top': ba.getmodel('bridgitLevelTop'), 'model_bottom': ba.getmodel('bridgitLevelBottom'), 'model_bg': ba.getmodel('natureBackground'), @@ -264,7 +264,7 @@ class BigG(ba.Map): name = 'Big G' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return [ 'race', 'melee', 'keep_away', 'team_flag', 'king_of_the_hill', @@ -277,7 +277,7 @@ class BigG(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model_top': ba.getmodel('bigG'), 'model_bottom': ba.getmodel('bigGBottom'), 'model_bg': ba.getmodel('natureBackground'), @@ -361,7 +361,7 @@ class Roundabout(ba.Map): name = 'Roundabout' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag'] @@ -371,7 +371,7 @@ class Roundabout(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('roundaboutLevel'), 'model_bottom': ba.getmodel('roundaboutLevelBottom'), 'model_bg': ba.getmodel('natureBackground'), @@ -455,7 +455,7 @@ class MonkeyFace(ba.Map): name = 'Monkey Face' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag'] @@ -465,7 +465,7 @@ class MonkeyFace(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('monkeyFaceLevel'), 'bottom_model': ba.getmodel('monkeyFaceLevelBottom'), 'model_bg': ba.getmodel('natureBackground'), @@ -549,7 +549,7 @@ class ZigZag(ba.Map): name = 'Zigzag' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return [ 'melee', 'keep_away', 'team_flag', 'conquest', 'king_of_the_hill' @@ -561,7 +561,7 @@ class ZigZag(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('zigZagLevel'), 'model_bottom': ba.getmodel('zigZagLevelBottom'), 'model_bg': ba.getmodel('natureBackground'), @@ -643,7 +643,7 @@ class ThePad(ba.Map): name = 'The Pad' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag', 'king_of_the_hill'] @@ -653,7 +653,7 @@ class ThePad(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('thePadLevel'), 'bottom_model': ba.getmodel('thePadLevelBottom'), 'collide_model': ba.getcollidemodel('thePadLevelCollide'), @@ -724,7 +724,7 @@ class DoomShroom(ba.Map): name = 'Doom Shroom' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag'] @@ -734,7 +734,7 @@ class DoomShroom(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('doomShroomLevel'), 'collide_model': ba.getcollidemodel('doomShroomLevelCollide'), 'tex': ba.gettexture('doomShroomLevelColor'), @@ -814,7 +814,7 @@ class LakeFrigid(ba.Map): name = 'Lake Frigid' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag', 'race'] @@ -824,7 +824,7 @@ class LakeFrigid(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('lakeFrigid'), 'model_top': ba.getmodel('lakeFrigidTop'), 'model_reflections': ba.getmodel('lakeFrigidReflections'), @@ -895,7 +895,7 @@ class TipTop(ba.Map): name = 'Tip Top' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag', 'king_of_the_hill'] @@ -905,7 +905,7 @@ class TipTop(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('tipTopLevel'), 'bottom_model': ba.getmodel('tipTopLevelBottom'), 'collide_model': ba.getcollidemodel('tipTopLevelCollide'), @@ -967,7 +967,7 @@ class CragCastle(ba.Map): name = 'Crag Castle' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag', 'conquest'] @@ -977,7 +977,7 @@ class CragCastle(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('cragCastleLevel'), 'bottom_model': ba.getmodel('cragCastleLevelBottom'), 'collide_model': ba.getcollidemodel('cragCastleLevelCollide'), @@ -1052,7 +1052,7 @@ class TowerD(ba.Map): name = 'Tower D' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return [] @@ -1062,7 +1062,7 @@ class TowerD(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('towerDLevel'), 'model_bottom': @@ -1169,7 +1169,7 @@ class HappyThoughts(ba.Map): name = 'Happy Thoughts' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return [ 'melee', 'keep_away', 'team_flag', 'conquest', 'king_of_the_hill' @@ -1181,7 +1181,7 @@ class HappyThoughts(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('alwaysLandLevel'), 'bottom_model': ba.getmodel('alwaysLandLevelBottom'), 'bgmodel': ba.getmodel('alwaysLandBG'), @@ -1275,7 +1275,7 @@ class StepRightUp(ba.Map): name = 'Step Right Up' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag', 'conquest'] @@ -1285,7 +1285,7 @@ class StepRightUp(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('stepRightUpLevel'), 'model_bottom': ba.getmodel('stepRightUpLevelBottom'), 'collide_model': ba.getcollidemodel('stepRightUpLevelCollide'), @@ -1350,7 +1350,7 @@ class Courtyard(ba.Map): name = 'Courtyard' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag'] @@ -1360,7 +1360,7 @@ class Courtyard(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('courtyardLevel'), 'model_bottom': ba.getmodel('courtyardLevelBottom'), 'collide_model': ba.getcollidemodel('courtyardLevelCollide'), @@ -1456,7 +1456,7 @@ class Rampage(ba.Map): name = 'Rampage' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag'] @@ -1466,7 +1466,7 @@ class Rampage(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('rampageLevel'), 'bottom_model': ba.getmodel('rampageLevelBottom'), 'collide_model': ba.getcollidemodel('rampageLevelCollide'), diff --git a/assets/src/ba_data/python/bastd/stdmap.py b/assets/src/ba_data/python/bastd/stdmap.py index 2508fa8b..4522eaca 100644 --- a/assets/src/ba_data/python/bastd/stdmap.py +++ b/assets/src/ba_data/python/bastd/stdmap.py @@ -9,10 +9,10 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Dict, Any, Optional + from typing import Any, Optional -def _get_map_data(name: str) -> Dict[str, Any]: +def _get_map_data(name: str) -> dict[str, Any]: import json print('Would get map data', name) with open('ba_data/data/maps/' + name + '.json', @@ -26,10 +26,10 @@ class StdMap(ba.Map): """A map completely defined by asset data. """ - _data: Optional[Dict[str, Any]] = None + _data: Optional[dict[str, Any]] = None @classmethod - def _getdata(cls) -> Dict[str, Any]: + def _getdata(cls) -> dict[str, Any]: if cls._data is None: cls._data = _get_map_data('bridgit') return cls._data diff --git a/assets/src/ba_data/python/bastd/tutorial.py b/assets/src/ba_data/python/bastd/tutorial.py index 39bad74d..6eb78163 100644 --- a/assets/src/ba_data/python/bastd/tutorial.py +++ b/assets/src/ba_data/python/bastd/tutorial.py @@ -23,8 +23,7 @@ import ba from bastd.actor import spaz as basespaz if TYPE_CHECKING: - from typing import (Any, Optional, Dict, List, Tuple, Callable, Sequence, - Union) + from typing import Any, Optional, Callable, Sequence, Union def _safesetattr(node: Optional[ba.Node], attr: str, value: Any) -> None: @@ -187,7 +186,7 @@ class TutorialActivity(ba.Activity[Player, Team]): self.current_spaz: Optional[basespaz.Spaz] = None self._benchmark_type = getattr(ba.getsession(), 'benchmark_type', None) self.last_start_time: Optional[int] = None - self.cycle_times: List[int] = [] + self.cycle_times: list[int] = [] self.allow_pausing = True self.allow_kick_idle_players = False self._issued_warning = False @@ -206,8 +205,8 @@ class TutorialActivity(ba.Activity[Player, Team]): self._skip_text: Optional[ba.Node] = None self._skip_count_text: Optional[ba.Node] = None self._scale: Optional[float] = None - self._stick_base_position: Tuple[float, float] = (0.0, 0.0) - self._stick_nub_position: Tuple[float, float] = (0.0, 0.0) + self._stick_base_position: tuple[float, float] = (0.0, 0.0) + self._stick_nub_position: tuple[float, float] = (0.0, 0.0) self._stick_base_image_color: Sequence[float] = (1.0, 1.0, 1.0, 1.0) self._stick_nub_image_color: Sequence[float] = (1.0, 1.0, 1.0, 1.0) self._time: int = -1 @@ -220,10 +219,10 @@ class TutorialActivity(ba.Activity[Player, Team]): self._stick_nub_image: Optional[ba.Node] = None self.bomb_image_color = (1.0, 1.0, 1.0) self.pickup_image_color = (1.0, 1.0, 1.0) - self.control_ui_nodes: List[ba.Node] = [] - self.spazzes: Dict[int, basespaz.Spaz] = {} + self.control_ui_nodes: list[ba.Node] = [] + self.spazzes: dict[int, basespaz.Spaz] = {} self.jump_image_color = (1.0, 1.0, 1.0) - self._entries: List[Any] = [] + self._entries: list[Any] = [] self._read_entries_timer: Optional[ba.Timer] = None self._entry_timer: Optional[ba.Timer] = None @@ -300,7 +299,7 @@ class TutorialActivity(ba.Activity[Player, Team]): nub_size = 110.0 * scale p = (position[0] + center_offs, position[1] - offs) - def _sc(r: float, g: float, b: float) -> Tuple[float, float, float]: + def _sc(r: float, g: float, b: float) -> tuple[float, float, float]: return 0.6 * r, 0.6 * g, 0.6 * b self.jump_image_color = c = _sc(0.4, 1, 0.4) diff --git a/assets/src/ba_data/python/bastd/ui/account/link.py b/assets/src/ba_data/python/bastd/ui/account/link.py index f82985b2..df01fc9a 100644 --- a/assets/src/ba_data/python/bastd/ui/account/link.py +++ b/assets/src/ba_data/python/bastd/ui/account/link.py @@ -12,14 +12,14 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Tuple, Optional, Dict + from typing import Any, Optional class AccountLinkWindow(ba.Window): """Window for linking accounts.""" def __init__(self, origin_widget: ba.Widget = None): - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -111,7 +111,7 @@ class AccountLinkWindow(ba.Window): class AccountLinkCodeWindow(ba.Window): """Window showing code for account-linking.""" - def __init__(self, data: Dict[str, Any]): + def __init__(self, data: dict[str, Any]): self._width = 350 self._height = 200 uiscale = ba.app.ui.uiscale diff --git a/assets/src/ba_data/python/bastd/ui/account/settings.py b/assets/src/ba_data/python/bastd/ui/account/settings.py index 785f186e..3e517b1b 100644 --- a/assets/src/ba_data/python/bastd/ui/account/settings.py +++ b/assets/src/ba_data/python/bastd/ui/account/settings.py @@ -12,7 +12,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Optional, Tuple, List, Union + from typing import Optional, Union class AccountSettingsWindow(ba.Window): @@ -29,7 +29,7 @@ class AccountSettingsWindow(ba.Window): ba.set_analytics_screen('Account Window') # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -74,7 +74,7 @@ class AccountSettingsWindow(ba.Window): self._sub_width = self._scroll_width - 20 # Determine which sign-in/sign-out buttons we should show. - self._show_sign_in_buttons: List[str] = [] + self._show_sign_in_buttons: list[str] = [] if app.platform == 'android' and app.subplatform == 'google': self._show_sign_in_buttons.append('Google Play') diff --git a/assets/src/ba_data/python/bastd/ui/account/unlink.py b/assets/src/ba_data/python/bastd/ui/account/unlink.py index ef3b0114..8ef04517 100644 --- a/assets/src/ba_data/python/bastd/ui/account/unlink.py +++ b/assets/src/ba_data/python/bastd/ui/account/unlink.py @@ -11,14 +11,14 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Tuple, Dict + from typing import Any, Optional class AccountUnlinkWindow(ba.Window): """A window to kick off account unlinks.""" def __init__(self, origin_widget: ba.Widget = None): - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -104,7 +104,7 @@ class AccountUnlinkWindow(ba.Window): if i == 0: ba.widget(edit=txt, up_widget=self._cancel_button) - def _on_entry_selected(self, entry: Dict[str, Any]) -> None: + def _on_entry_selected(self, entry: dict[str, Any]) -> None: ba.screenmessage(ba.Lstr(resource='pleaseWaitText', fallback_resource='requestingText'), color=(0, 1, 0)) diff --git a/assets/src/ba_data/python/bastd/ui/account/viewer.py b/assets/src/ba_data/python/bastd/ui/account/viewer.py index a8ea39af..01f18c14 100644 --- a/assets/src/ba_data/python/bastd/ui/account/viewer.py +++ b/assets/src/ba_data/python/bastd/ui/account/viewer.py @@ -11,7 +11,7 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Any, Tuple, Dict, Optional + from typing import Any, Optional class AccountViewerWindow(popup.PopupWindow): @@ -20,9 +20,9 @@ class AccountViewerWindow(popup.PopupWindow): def __init__(self, account_id: str, profile_id: str = None, - position: Tuple[float, float] = (0.0, 0.0), + position: tuple[float, float] = (0.0, 0.0), scale: float = None, - offset: Tuple[float, float] = (0.0, 0.0)): + offset: tuple[float, float] = (0.0, 0.0)): from ba.internal import is_browser_likely_available, master_server_get self._account_id = account_id @@ -169,7 +169,7 @@ class AccountViewerWindow(popup.PopupWindow): ba.open_url(_ba.get_master_server_address() + '/highscores?profile=' + self._account_id) - def _on_query_response(self, data: Optional[Dict[str, Any]]) -> None: + def _on_query_response(self, data: Optional[dict[str, Any]]) -> None: # FIXME: Tidy this up. # pylint: disable=too-many-locals # pylint: disable=too-many-branches diff --git a/assets/src/ba_data/python/bastd/ui/achievements.py b/assets/src/ba_data/python/bastd/ui/achievements.py index ca56c436..5ca7d516 100644 --- a/assets/src/ba_data/python/bastd/ui/achievements.py +++ b/assets/src/ba_data/python/bastd/ui/achievements.py @@ -10,13 +10,13 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Tuple + pass class AchievementsWindow(popup.PopupWindow): """Popup window to view achievements.""" - def __init__(self, position: Tuple[float, float], scale: float = None): + def __init__(self, position: tuple[float, float], scale: float = None): # pylint: disable=too-many-locals uiscale = ba.app.ui.uiscale if scale is None: diff --git a/assets/src/ba_data/python/bastd/ui/appinvite.py b/assets/src/ba_data/python/bastd/ui/appinvite.py index c058f762..9d3cb384 100644 --- a/assets/src/ba_data/python/bastd/ui/appinvite.py +++ b/assets/src/ba_data/python/bastd/ui/appinvite.py @@ -12,7 +12,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Dict, Union + from typing import Any, Optional, Union class AppInviteWindow(ba.Window): @@ -20,7 +20,7 @@ class AppInviteWindow(ba.Window): def __init__(self) -> None: ba.set_analytics_screen('AppInviteWindow') - self._data: Optional[Dict[str, Any]] = None + self._data: Optional[dict[str, Any]] = None self._width = 650 self._height = 400 @@ -114,7 +114,7 @@ class AppInviteWindow(ba.Window): callback=ba.WeakCall(self._on_code_result)) _ba.run_transactions() - def _on_code_result(self, result: Optional[Dict[str, Any]]) -> None: + def _on_code_result(self, result: Optional[dict[str, Any]]) -> None: if result is not None: self._data = result @@ -151,7 +151,7 @@ class AppInviteWindow(ba.Window): class ShowFriendCodeWindow(ba.Window): """Window showing a code for sharing with friends.""" - def __init__(self, data: Dict[str, Any]): + def __init__(self, data: dict[str, Any]): from ba.internal import is_browser_likely_available ba.set_analytics_screen('Friend Promo Code') self._width = 650 @@ -317,7 +317,7 @@ def handle_app_invites_press(force_code: bool = False) -> None: ba.Lstr(resource='gatherWindow.requestingAPromoCodeText'), color=(0, 1, 0)) - def handle_result(result: Optional[Dict[str, Any]]) -> None: + def handle_result(result: Optional[dict[str, Any]]) -> None: with ba.Context('ui'): if result is None: ba.screenmessage(ba.Lstr(resource='errorText'), diff --git a/assets/src/ba_data/python/bastd/ui/characterpicker.py b/assets/src/ba_data/python/bastd/ui/characterpicker.py index 6f57a20b..b60a4767 100644 --- a/assets/src/ba_data/python/bastd/ui/characterpicker.py +++ b/assets/src/ba_data/python/bastd/ui/characterpicker.py @@ -12,7 +12,7 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Any, Tuple, Sequence + from typing import Any, Sequence class CharacterPicker(popup.PopupWindow): @@ -20,10 +20,10 @@ class CharacterPicker(popup.PopupWindow): def __init__(self, parent: ba.Widget, - position: Tuple[float, float] = (0.0, 0.0), + position: tuple[float, float] = (0.0, 0.0), delegate: Any = None, scale: float = None, - offset: Tuple[float, float] = (0.0, 0.0), + offset: tuple[float, float] = (0.0, 0.0), tint_color: Sequence[float] = (1.0, 1.0, 1.0), tint2_color: Sequence[float] = (1.0, 1.0, 1.0), selected_character: str = None): diff --git a/assets/src/ba_data/python/bastd/ui/colorpicker.py b/assets/src/ba_data/python/bastd/ui/colorpicker.py index 42cbb3a4..14e935c9 100644 --- a/assets/src/ba_data/python/bastd/ui/colorpicker.py +++ b/assets/src/ba_data/python/bastd/ui/colorpicker.py @@ -10,7 +10,7 @@ import ba from bastd.ui.popup import PopupWindow if TYPE_CHECKING: - from typing import Any, Tuple, Sequence, List, Optional + from typing import Any, Sequence, Optional class ColorPicker(PopupWindow): @@ -21,11 +21,11 @@ class ColorPicker(PopupWindow): def __init__(self, parent: ba.Widget, - position: Tuple[float, float], + position: tuple[float, float], initial_color: Sequence[float] = (1.0, 1.0, 1.0), delegate: Any = None, scale: float = None, - offset: Tuple[float, float] = (0.0, 0.0), + offset: tuple[float, float] = (0.0, 0.0), tag: Any = ''): # pylint: disable=too-many-locals from ba.internal import get_player_colors @@ -56,11 +56,11 @@ class ColorPicker(PopupWindow): focus_size=(190, 220), bg_color=(0.5, 0.5, 0.5), offset=offset) - rows: List[List[ba.Widget]] = [] + rows: list[list[ba.Widget]] = [] closest_dist = 9999.0 closest = (0, 0) for y in range(4): - row: List[ba.Widget] = [] + row: list[ba.Widget] = [] rows.append(row) for x in range(4): color = self.colors[y][x] @@ -159,11 +159,11 @@ class ColorPickerExact(PopupWindow): def __init__(self, parent: ba.Widget, - position: Tuple[float, float], + position: tuple[float, float], initial_color: Sequence[float] = (1.0, 1.0, 1.0), delegate: Any = None, scale: float = None, - offset: Tuple[float, float] = (0.0, 0.0), + offset: tuple[float, float] = (0.0, 0.0), tag: Any = ''): # pylint: disable=too-many-locals del parent # Unused var. diff --git a/assets/src/ba_data/python/bastd/ui/config.py b/assets/src/ba_data/python/bastd/ui/config.py index 0c11ff4e..b9e74000 100644 --- a/assets/src/ba_data/python/bastd/ui/config.py +++ b/assets/src/ba_data/python/bastd/ui/config.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, Tuple, Union, Callable + from typing import Any, Union, Callable class ConfigCheckBox: @@ -27,8 +27,8 @@ class ConfigCheckBox: def __init__(self, parent: ba.Widget, configkey: str, - position: Tuple[float, float], - size: Tuple[float, float], + position: tuple[float, float], + size: tuple[float, float], displayname: Union[str, ba.Lstr] = None, scale: float = None, maxwidth: float = None, @@ -84,7 +84,7 @@ class ConfigNumberEdit: def __init__(self, parent: ba.Widget, configkey: str, - position: Tuple[float, float], + position: tuple[float, float], minval: float = 0.0, maxval: float = 100.0, increment: float = 1.0, diff --git a/assets/src/ba_data/python/bastd/ui/confirm.py b/assets/src/ba_data/python/bastd/ui/confirm.py index 82e2ac48..37ed99a4 100644 --- a/assets/src/ba_data/python/bastd/ui/confirm.py +++ b/assets/src/ba_data/python/bastd/ui/confirm.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Union, Callable, Tuple, Optional + from typing import Any, Union, Callable, Optional class ConfirmWindow: @@ -23,7 +23,7 @@ class ConfirmWindow: height: float = 100.0, cancel_button: bool = True, cancel_is_selected: bool = False, - color: Tuple[float, float, float] = (1, 1, 1), + color: tuple[float, float, float] = (1, 1, 1), text_scale: float = 1.0, ok_text: Union[str, ba.Lstr] = None, cancel_text: Union[str, ba.Lstr] = None, @@ -39,7 +39,7 @@ class ConfirmWindow: # if they provided an origin-widget, scale up from that self._transition_out: Optional[str] - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() diff --git a/assets/src/ba_data/python/bastd/ui/coop/browser.py b/assets/src/ba_data/python/bastd/ui/coop/browser.py index a0a008b8..6fb34fef 100644 --- a/assets/src/ba_data/python/bastd/ui/coop/browser.py +++ b/assets/src/ba_data/python/bastd/ui/coop/browser.py @@ -16,7 +16,7 @@ from bastd.ui.league.rankbutton import LeagueRankButton from bastd.ui.store.browser import StoreBrowserWindow if TYPE_CHECKING: - from typing import Any, Optional, Tuple, Dict, List, Union + from typing import Any, Optional, Union class CoopBrowserWindow(ba.Window): @@ -62,7 +62,7 @@ class CoopBrowserWindow(ba.Window): timetype=ba.TimeType.REAL) # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -361,7 +361,7 @@ class CoopBrowserWindow(ba.Window): except Exception: ba.print_exception('Error updating campaign lock.') - def _update_for_data(self, data: Optional[List[Dict[str, Any]]]) -> None: + def _update_for_data(self, data: Optional[list[dict[str, Any]]]) -> None: # pylint: disable=too-many-statements # pylint: disable=too-many-locals # pylint: disable=too-many-branches @@ -380,7 +380,7 @@ class CoopBrowserWindow(ba.Window): # Update all of our tourney buttons based on whats in data. for i, tbtn in enumerate(self._tournament_buttons): assert data is not None - entry: Dict[str, Any] = data[i] + entry: dict[str, Any] = data[i] prize_y_offs = (34 if 'prizeRange3' in entry else 20 if 'prizeRange2' in entry else 12) x_offs = 90 @@ -589,7 +589,7 @@ class CoopBrowserWindow(ba.Window): ('' + str(free_tries_remaining))), color=(0.6, 0.6, 0.6, 1)) - def _on_tournament_query_response(self, data: Optional[Dict[str, + def _on_tournament_query_response(self, data: Optional[dict[str, Any]]) -> None: accounts = ba.app.accounts if data is not None: @@ -835,7 +835,7 @@ class CoopBrowserWindow(ba.Window): # Tournaments - self._tournament_buttons: List[Dict[str, Any]] = [] + self._tournament_buttons: list[dict[str, Any]] = [] v -= 53 # FIXME shouldn't use hard-coded strings here. @@ -976,7 +976,7 @@ class CoopBrowserWindow(ba.Window): 30 + 200 * len(items)), 200), background=False) h_spacing = 200 - self._custom_buttons: List[GameButton] = [] + self._custom_buttons: list[GameButton] = [] h = 0 v2 = -2 for item in items: @@ -1034,10 +1034,10 @@ class CoopBrowserWindow(ba.Window): self._do_selection_callbacks = True def _tournament_button(self, parent: ba.Widget, x: float, y: float, - select: bool) -> Dict[str, Any]: + select: bool) -> dict[str, Any]: sclx = 300 scly = 195.0 - data: Dict[str, Any] = { + data: dict[str, Any] = { 'tournament_id': None, 'time_remaining': 0, 'has_time_remaining': False, @@ -1374,7 +1374,7 @@ class CoopBrowserWindow(ba.Window): show_tab=show_tab, back_location='CoopBrowserWindow').get_root_widget()) - def _show_leader(self, tournament_button: Dict[str, Any]) -> None: + def _show_leader(self, tournament_button: dict[str, Any]) -> None: # pylint: disable=cyclic-import from bastd.ui.account.viewer import AccountViewerWindow tournament_id = tournament_button['tournament_id'] @@ -1392,7 +1392,7 @@ class CoopBrowserWindow(ba.Window): position=tournament_button['current_leader_name_text']. get_screen_space_center()) - def _show_scores(self, tournament_button: Dict[str, Any]) -> None: + def _show_scores(self, tournament_button: dict[str, Any]) -> None: # pylint: disable=cyclic-import from bastd.ui.tournamentscores import TournamentScoresWindow tournament_id = tournament_button['tournament_id'] @@ -1411,7 +1411,7 @@ class CoopBrowserWindow(ba.Window): def run(self, game: Optional[str], - tournament_button: Dict[str, Any] = None) -> None: + tournament_button: dict[str, Any] = None) -> None: """Run the provided game.""" # pylint: disable=too-many-branches # pylint: disable=too-many-statements @@ -1421,7 +1421,7 @@ class CoopBrowserWindow(ba.Window): from bastd.ui.tournamententry import TournamentEntryWindow from bastd.ui.purchase import PurchaseWindow from bastd.ui.account import show_sign_in_prompt - args: Dict[str, Any] = {} + args: dict[str, Any] = {} # Do a bit of pre-flight for tournament options. if tournament_button is not None: diff --git a/assets/src/ba_data/python/bastd/ui/coop/gamebutton.py b/assets/src/ba_data/python/bastd/ui/coop/gamebutton.py index 8aee88b7..2a6a75b4 100644 --- a/assets/src/ba_data/python/bastd/ui/coop/gamebutton.py +++ b/assets/src/ba_data/python/bastd/ui/coop/gamebutton.py @@ -11,7 +11,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Optional, List, Tuple + from typing import Optional from bastd.ui.coop.browser import CoopBrowserWindow @@ -98,7 +98,7 @@ class GameButton: starscale = 35.0 if self._achievements else 45.0 - self._star_widgets: List[ba.Widget] = [] + self._star_widgets: list[ba.Widget] = [] for _i in range(stars): imw = ba.imagewidget(parent=parent, draw_controller=btn, @@ -120,7 +120,7 @@ class GameButton: xach = x + 69 yach = y + scly - 168 a_scale = 30.0 - self._achievement_widgets: List[Tuple[ba.Widget, ba.Widget]] = [] + self._achievement_widgets: list[tuple[ba.Widget, ba.Widget]] = [] for ach in self._achievements: a_complete = ach.complete imw = ba.imagewidget( diff --git a/assets/src/ba_data/python/bastd/ui/creditslist.py b/assets/src/ba_data/python/bastd/ui/creditslist.py index 161b77d2..d6a37c8d 100644 --- a/assets/src/ba_data/python/bastd/ui/creditslist.py +++ b/assets/src/ba_data/python/bastd/ui/creditslist.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Tuple, Optional, Sequence + from typing import Optional, Sequence class CreditsListWindow(ba.Window): @@ -23,7 +23,7 @@ class CreditsListWindow(ba.Window): ba.set_analytics_screen('Credits Window') # if they provided an origin-widget, scale up from that - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() diff --git a/assets/src/ba_data/python/bastd/ui/fileselector.py b/assets/src/ba_data/python/bastd/ui/fileselector.py index da6e2b2f..e48b456a 100644 --- a/assets/src/ba_data/python/bastd/ui/fileselector.py +++ b/assets/src/ba_data/python/bastd/ui/fileselector.py @@ -13,7 +13,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Callable, Sequence, List, Optional + from typing import Any, Callable, Sequence, Optional class FileSelectorWindow(ba.Window): @@ -34,7 +34,7 @@ class FileSelectorWindow(ba.Window): self._callback = callback self._base_path = path self._path: Optional[str] = None - self._recent_paths: List[str] = [] + self._recent_paths: list[str] = [] self._show_base_path = show_base_path self._valid_file_extensions = [ '.' + ext for ext in valid_file_extensions @@ -173,7 +173,7 @@ class FileSelectorWindow(ba.Window): class _RefreshThread(threading.Thread): def __init__(self, path: str, - callback: Callable[[List[str], Optional[str]], Any]): + callback: Callable[[list[str], Optional[str]], Any]): super().__init__() self._callback = callback self._path = path @@ -195,7 +195,7 @@ class FileSelectorWindow(ba.Window): # Ignore permission-denied. if 'Errno 13' not in str(exc): ba.print_exception() - nofiles: List[str] = [] + nofiles: list[str] = [] ba.pushcall(ba.Call(self._callback, nofiles, str(exc)), from_other_thread=True) @@ -205,7 +205,7 @@ class FileSelectorWindow(ba.Window): self._recent_paths.append(path) self._RefreshThread(path, self._refresh).start() - def _refresh(self, file_names: List[str], error: Optional[str]) -> None: + def _refresh(self, file_names: list[str], error: Optional[str]) -> None: # pylint: disable=too-many-statements # pylint: disable=too-many-branches # pylint: disable=too-many-locals diff --git a/assets/src/ba_data/python/bastd/ui/gather/__init__.py b/assets/src/ba_data/python/bastd/ui/gather/__init__.py index 3d21747c..8dca6cc5 100644 --- a/assets/src/ba_data/python/bastd/ui/gather/__init__.py +++ b/assets/src/ba_data/python/bastd/ui/gather/__init__.py @@ -13,8 +13,7 @@ import ba from bastd.ui.tabs import TabRow if TYPE_CHECKING: - from typing import (Any, Optional, Tuple, Dict, List, Union, Callable, - Type) + from typing import Optional class GatherTab: @@ -80,7 +79,7 @@ class GatherWindow(ba.Window): from bastd.ui.gather.nearbytab import NearbyGatherTab ba.set_analytics_screen('Gather Window') - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -149,7 +148,7 @@ class GatherWindow(ba.Window): tab_buffer_h = ((320 if condensed else 250) + 2 * x_offs) # Build up the set of tabs we want. - tabdefs: List[Tuple[GatherWindow.TabID, ba.Lstr]] = [ + tabdefs: list[tuple[GatherWindow.TabID, ba.Lstr]] = [ (self.TabID.ABOUT, ba.Lstr(resource=self._r + '.aboutText')) ] if _ba.get_account_misc_read_val('enablePublicParties', True): @@ -173,14 +172,14 @@ class GatherWindow(ba.Window): on_select_call=ba.WeakCall(self._set_tab)) # Now instantiate handlers for these tabs. - tabtypes: Dict[GatherWindow.TabID, Type[GatherTab]] = { + tabtypes: dict[GatherWindow.TabID, type[GatherTab]] = { self.TabID.ABOUT: AboutGatherTab, self.TabID.MANUAL: ManualGatherTab, self.TabID.PRIVATE: PrivateGatherTab, self.TabID.INTERNET: PublicGatherTab, self.TabID.NEARBY: NearbyGatherTab } - self._tabs: Dict[GatherWindow.TabID, GatherTab] = {} + self._tabs: dict[GatherWindow.TabID, GatherTab] = {} for tab_id in self._tab_row.tabs: tabtype = tabtypes.get(tab_id) if tabtype is not None: diff --git a/assets/src/ba_data/python/bastd/ui/gather/manualtab.py b/assets/src/ba_data/python/bastd/ui/gather/manualtab.py index 367b0eb8..798b11f6 100644 --- a/assets/src/ba_data/python/bastd/ui/gather/manualtab.py +++ b/assets/src/ba_data/python/bastd/ui/gather/manualtab.py @@ -15,7 +15,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Dict, List, Tuple, Type, Union, Callable + from typing import Any, Optional, Union, Callable from bastd.ui.gather import GatherWindow from bastd.ui.confirm import ConfirmWindow @@ -850,7 +850,7 @@ class ManualGatherTab(GatherTab): callback=ba.WeakCall( self._on_accessible_response)) - def _on_accessible_response(self, data: Optional[Dict[str, Any]]) -> None: + def _on_accessible_response(self, data: Optional[dict[str, Any]]) -> None: t_addr = self._t_addr t_accessible = self._t_accessible t_accessible_extra = self._t_accessible_extra diff --git a/assets/src/ba_data/python/bastd/ui/gather/nearbytab.py b/assets/src/ba_data/python/bastd/ui/gather/nearbytab.py index 19fe1c53..03561cbd 100644 --- a/assets/src/ba_data/python/bastd/ui/gather/nearbytab.py +++ b/assets/src/ba_data/python/bastd/ui/gather/nearbytab.py @@ -12,7 +12,7 @@ import _ba from bastd.ui.gather import GatherTab if TYPE_CHECKING: - from typing import Optional, Dict, Any + from typing import Optional, Any from bastd.ui.gather import GatherWindow @@ -30,7 +30,7 @@ class NetScanner: left_border=10) ba.widget(edit=self._columnwidget, up_widget=tab_button) self._width = width - self._last_selected_host: Optional[Dict[str, Any]] = None + self._last_selected_host: Optional[dict[str, Any]] = None self._update_timer = ba.Timer(1.0, ba.WeakCall(self.update), @@ -44,10 +44,10 @@ class NetScanner: def __del__(self) -> None: _ba.end_host_scanning() - def _on_select(self, host: Dict[str, Any]) -> None: + def _on_select(self, host: dict[str, Any]) -> None: self._last_selected_host = host - def _on_activate(self, host: Dict[str, Any]) -> None: + def _on_activate(self, host: dict[str, Any]) -> None: _ba.connect_to_party(host['address']) def update(self) -> None: diff --git a/assets/src/ba_data/python/bastd/ui/gather/privatetab.py b/assets/src/ba_data/python/bastd/ui/gather/privatetab.py index 941be6d2..839ba787 100644 --- a/assets/src/ba_data/python/bastd/ui/gather/privatetab.py +++ b/assets/src/ba_data/python/bastd/ui/gather/privatetab.py @@ -20,7 +20,7 @@ from bastd.ui.gather import GatherTab from bastd.ui import getcurrency if TYPE_CHECKING: - from typing import Optional, Dict, Any, List, Type + from typing import Optional, Any from bastd.ui.gather import GatherWindow # Print a bit of info about queries, etc. @@ -160,7 +160,7 @@ class PrivateGatherTab(GatherTab): raise RuntimeError(f'Invalid sessiontype {sessiontypestr}') hcfg.session_type = sessiontypestr - sessiontype: Type[ba.Session] + sessiontype: type[ba.Session] if hcfg.session_type == 'ffa': sessiontype = ba.FreeForAllSession elif hcfg.session_type == 'teams': @@ -177,7 +177,7 @@ class PrivateGatherTab(GatherTab): if playlist_name == '__default__' else playlist_name) - playlist: Optional[List[Dict[str, Any]]] = None + playlist: Optional[list[dict[str, Any]]] = None if playlist_name != '__default__': playlist = (cfg.get(f'{pvars.config_name} Playlists', {}).get(playlist_name)) @@ -197,7 +197,7 @@ class PrivateGatherTab(GatherTab): hcfg.tutorial = tutorial if hcfg.session_type == 'teams': - ctn: Optional[List[str]] = cfg.get('Custom Team Names') + ctn: Optional[list[str]] = cfg.get('Custom Team Names') if ctn is not None: if (isinstance(ctn, (list, tuple)) and len(ctn) == 2 and all(isinstance(x, str) for x in ctn)): @@ -205,7 +205,7 @@ class PrivateGatherTab(GatherTab): else: print(f'Found invalid custom-team-names data: {ctn}') - ctc: Optional[List[List[float]]] = cfg.get('Custom Team Colors') + ctc: Optional[list[list[float]]] = cfg.get('Custom Team Colors') if ctc is not None: if (isinstance(ctc, (list, tuple)) and len(ctc) == 2 and all(isinstance(x, (list, tuple)) for x in ctc) @@ -269,7 +269,7 @@ class PrivateGatherTab(GatherTab): self._last_hosting_state_query_time = now def _hosting_state_idle_response(self, - result: Optional[Dict[str, Any]]) -> None: + result: Optional[dict[str, Any]]) -> None: # This simply passes through to our standard response handler. # The one exception is if we've recently sent an action to the @@ -284,7 +284,7 @@ class PrivateGatherTab(GatherTab): return self._hosting_state_response(result) - def _hosting_state_response(self, result: Optional[Dict[str, + def _hosting_state_response(self, result: Optional[dict[str, Any]]) -> None: # Its possible for this to come back to us after our UI is dead; @@ -344,7 +344,7 @@ class PrivateGatherTab(GatherTab): # Kick off an update to get any needed messages sent/etc. ba.pushcall(self._update) - def _selwidgets(self) -> List[Optional[ba.Widget]]: + def _selwidgets(self) -> list[Optional[ba.Widget]]: """An indexed list of widgets we can use for saving/restoring sel.""" return [ self._host_playlist_button, self._host_copy_button, @@ -844,7 +844,7 @@ class PrivateGatherTab(GatherTab): self._connect_to_party_code(code) - def _connect_response(self, result: Optional[Dict[str, Any]]) -> None: + def _connect_response(self, result: Optional[dict[str, Any]]) -> None: try: self._connect_press_time = None if result is None: diff --git a/assets/src/ba_data/python/bastd/ui/gather/publictab.py b/assets/src/ba_data/python/bastd/ui/gather/publictab.py index 7a6999b5..b2c1b647 100644 --- a/assets/src/ba_data/python/bastd/ui/gather/publictab.py +++ b/assets/src/ba_data/python/bastd/ui/gather/publictab.py @@ -17,7 +17,7 @@ import ba from bastd.ui.gather import GatherTab if TYPE_CHECKING: - from typing import Callable, Any, Optional, Dict, Union, Tuple, List + from typing import Callable, Any, Optional, Union from bastd.ui.gather import GatherWindow # Print a bit of info about pings, queries, etc. @@ -182,7 +182,7 @@ class UIRow: class State: """State saved/restored only while the app is running.""" sub_tab: SubTabType = SubTabType.JOIN - parties: Optional[List[Tuple[str, PartyEntry]]] = None + parties: Optional[list[tuple[str, PartyEntry]]] = None next_entry_index: int = 0 filter_value: str = '' have_server_list_response: bool = False @@ -312,26 +312,26 @@ class PublicGatherTab(GatherTab): self._host_max_party_size_plus_button: (Optional[ba.Widget]) = None self._host_status_text: Optional[ba.Widget] = None self._signed_in = False - self._ui_rows: List[UIRow] = [] + self._ui_rows: list[UIRow] = [] self._refresh_ui_row = 0 self._have_user_selected_row = False self._first_valid_server_list_time: Optional[float] = None # Parties indexed by id: - self._parties: Dict[str, PartyEntry] = {} + self._parties: dict[str, PartyEntry] = {} # Parties sorted in display order: - self._parties_sorted: List[Tuple[str, PartyEntry]] = [] + self._parties_sorted: list[tuple[str, PartyEntry]] = [] self._party_lists_dirty = True # Sorted parties with filter applied: - self._parties_displayed: Dict[str, PartyEntry] = {} + self._parties_displayed: dict[str, PartyEntry] = {} self._next_entry_index = 0 self._have_server_list_response = False self._have_valid_server_list = False self._filter_value = '' - self._pending_party_infos: List[Dict[str, Any]] = [] + self._pending_party_infos: list[dict[str, Any]] = [] self._last_sub_scroll_height = 0.0 def on_activate( @@ -715,7 +715,7 @@ class PublicGatherTab(GatherTab): self._do_status_check() def _on_public_party_query_result( - self, result: Optional[Dict[str, Any]]) -> None: + self, result: Optional[dict[str, Any]]) -> None: starttime = time.time() self._have_server_list_response = True @@ -1100,7 +1100,7 @@ class PublicGatherTab(GatherTab): self._local_address = str(val) def _on_public_party_accessible_response( - self, data: Optional[Dict[str, Any]]) -> None: + self, data: Optional[dict[str, Any]]) -> None: # If we've got status text widgets, update them. text = self._host_status_text diff --git a/assets/src/ba_data/python/bastd/ui/getcurrency.py b/assets/src/ba_data/python/bastd/ui/getcurrency.py index ef9f7118..d2674060 100644 --- a/assets/src/ba_data/python/bastd/ui/getcurrency.py +++ b/assets/src/ba_data/python/bastd/ui/getcurrency.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Tuple, Union, Dict + from typing import Any, Optional, Union class GetCurrencyWindow(ba.Window): @@ -38,7 +38,7 @@ class GetCurrencyWindow(ba.Window): self._ad_time_text = None # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -102,8 +102,8 @@ class GetCurrencyWindow(ba.Window): self._ad_button = None def _add_button(item: str, - position: Tuple[float, float], - size: Tuple[float, float], + position: tuple[float, float], + size: tuple[float, float], label: ba.Lstr, price: str = None, tex_name: str = None, @@ -528,7 +528,7 @@ class GetCurrencyWindow(ba.Window): item)) def _purchase_check_result(self, item: str, - result: Optional[Dict[str, Any]]) -> None: + result: Optional[dict[str, Any]]) -> None: if result is None: ba.playsound(ba.getsound('error')) ba.screenmessage( diff --git a/assets/src/ba_data/python/bastd/ui/helpui.py b/assets/src/ba_data/python/bastd/ui/helpui.py index 2fda7f8a..77594b0a 100644 --- a/assets/src/ba_data/python/bastd/ui/helpui.py +++ b/assets/src/ba_data/python/bastd/ui/helpui.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Optional, Tuple + from typing import Optional class HelpWindow(ba.Window): @@ -25,7 +25,7 @@ class HelpWindow(ba.Window): ba.set_analytics_screen('Help Window') # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() diff --git a/assets/src/ba_data/python/bastd/ui/iconpicker.py b/assets/src/ba_data/python/bastd/ui/iconpicker.py index 1d1820f4..6c6f07db 100644 --- a/assets/src/ba_data/python/bastd/ui/iconpicker.py +++ b/assets/src/ba_data/python/bastd/ui/iconpicker.py @@ -12,7 +12,7 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Any, Tuple, Sequence + from typing import Any, Sequence class IconPicker(popup.PopupWindow): @@ -20,10 +20,10 @@ class IconPicker(popup.PopupWindow): def __init__(self, parent: ba.Widget, - position: Tuple[float, float] = (0.0, 0.0), + position: tuple[float, float] = (0.0, 0.0), delegate: Any = None, scale: float = None, - offset: Tuple[float, float] = (0.0, 0.0), + offset: tuple[float, float] = (0.0, 0.0), tint_color: Sequence[float] = (1.0, 1.0, 1.0), tint2_color: Sequence[float] = (1.0, 1.0, 1.0), selected_icon: str = None): diff --git a/assets/src/ba_data/python/bastd/ui/league/rankbutton.py b/assets/src/ba_data/python/bastd/ui/league/rankbutton.py index f299f5ff..d7ab53e2 100644 --- a/assets/src/ba_data/python/bastd/ui/league/rankbutton.py +++ b/assets/src/ba_data/python/bastd/ui/league/rankbutton.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Tuple, Optional, Callable, Dict, Union + from typing import Any, Optional, Callable, Union class LeagueRankButton: @@ -18,13 +18,13 @@ class LeagueRankButton: def __init__(self, parent: ba.Widget, - position: Tuple[float, float], - size: Tuple[float, float], + position: tuple[float, float], + size: tuple[float, float], scale: float, on_activate_call: Callable[[], Any] = None, transition_delay: float = None, - color: Tuple[float, float, float] = None, - textcolor: Tuple[float, float, float] = None, + color: tuple[float, float, float] = None, + textcolor: tuple[float, float, float] = None, smooth_update_delay: float = None): if on_activate_call is None: on_activate_call = ba.WeakCall(self._default_on_activate_call) @@ -42,7 +42,7 @@ class LeagueRankButton: self._textcolor = textcolor self._header_color = (0.8, 0.8, 2.0) self._parent = parent - self._position: Tuple[float, float] = (0.0, 0.0) + self._position: tuple[float, float] = (0.0, 0.0) self._button = ba.buttonwidget(parent=parent, size=size, @@ -211,7 +211,7 @@ class LeagueRankButton: ba.print_exception('Error doing smooth update.') self._smooth_update_timer = None - def _update_for_league_rank_data(self, data: Optional[Dict[str, + def _update_for_league_rank_data(self, data: Optional[dict[str, Any]]) -> None: # pylint: disable=too-many-branches # pylint: disable=too-many-statements @@ -325,7 +325,7 @@ class LeagueRankButton: ba.textwidget(edit=self._value_text, text=status_text) def _on_power_ranking_query_response( - self, data: Optional[Dict[str, Any]]) -> None: + self, data: Optional[dict[str, Any]]) -> None: self._doing_power_ranking_query = False ba.app.accounts.cache_league_rank_data(data) self._update_for_league_rank_data(data) @@ -357,7 +357,7 @@ class LeagueRankButton: from bastd.ui.league.rankwindow import LeagueRankWindow LeagueRankWindow(modal=True, origin_widget=self._button) - def set_position(self, position: Tuple[float, float]) -> None: + def set_position(self, position: tuple[float, float]) -> None: """Set the button's position.""" self._position = position if not self._button: diff --git a/assets/src/ba_data/python/bastd/ui/league/rankwindow.py b/assets/src/ba_data/python/bastd/ui/league/rankwindow.py index 48bb1667..d1e31c46 100644 --- a/assets/src/ba_data/python/bastd/ui/league/rankwindow.py +++ b/assets/src/ba_data/python/bastd/ui/league/rankwindow.py @@ -12,7 +12,7 @@ import ba from bastd.ui import popup as popup_ui if TYPE_CHECKING: - from typing import Any, Optional, Tuple, List, Dict, Union + from typing import Any, Optional, Union class LeagueRankWindow(ba.Window): @@ -24,11 +24,11 @@ class LeagueRankWindow(ba.Window): origin_widget: ba.Widget = None): ba.set_analytics_screen('League Rank Window') - self._league_rank_data: Optional[Dict[str, Any]] = None + self._league_rank_data: Optional[dict[str, Any]] = None self._modal = modal # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -111,7 +111,7 @@ class LeagueRankWindow(ba.Window): self._subcontainer: Optional[ba.Widget] = None self._subcontainerwidth = 800 self._subcontainerheight = 483 - self._power_ranking_score_widgets: List[ba.Widget] = [] + self._power_ranking_score_widgets: list[ba.Widget] = [] self._season_popup_menu: Optional[popup_ui.PopupMenu] = None self._requested_season: Optional[str] = None @@ -192,7 +192,7 @@ class LeagueRankWindow(ba.Window): ba.playsound(ba.getsound('error')) def _on_power_ranking_query_response( - self, data: Optional[Dict[str, Any]]) -> None: + self, data: Optional[dict[str, Any]]) -> None: self._doing_power_ranking_query = False # important: *only* cache this if we requested the current season.. if data is not None and data.get('s', None) is None: @@ -587,7 +587,7 @@ class LeagueRankWindow(ba.Window): '/highscores?list=powerRankings&v=2' + league_str + season_str + '&player=' + our_login_id) - def _update_for_league_rank_data(self, data: Optional[Dict[str, + def _update_for_league_rank_data(self, data: Optional[dict[str, Any]]) -> None: # pylint: disable=too-many-statements # pylint: disable=too-many-branches diff --git a/assets/src/ba_data/python/bastd/ui/mainmenu.py b/assets/src/ba_data/python/bastd/ui/mainmenu.py index c82c7eb1..420b6cf6 100644 --- a/assets/src/ba_data/python/bastd/ui/mainmenu.py +++ b/assets/src/ba_data/python/bastd/ui/mainmenu.py @@ -11,7 +11,7 @@ import ba import _ba if TYPE_CHECKING: - from typing import Any, Callable, List, Dict, Tuple, Optional, Union + from typing import Any, Callable, Optional, Union class MainMenuWindow(ba.Window): @@ -190,7 +190,7 @@ class MainMenuWindow(ba.Window): input_device.is_connected_to_remote_player() if input_device else False) - positions: List[Tuple[float, float, float]] = [] + positions: list[tuple[float, float, float]] = [] self._p_index = 0 if self._in_game: @@ -412,8 +412,8 @@ class MainMenuWindow(ba.Window): scale=3.0 * t_scale) def _refresh_not_in_game( - self, positions: List[Tuple[float, float, - float]]) -> Tuple[float, float, float]: + self, positions: list[tuple[float, float, + float]]) -> tuple[float, float, float]: # pylint: disable=too-many-branches # pylint: disable=too-many-locals # pylint: disable=too-many-statements @@ -675,12 +675,12 @@ class MainMenuWindow(ba.Window): return h, v, scale def _refresh_in_game( - self, positions: List[Tuple[float, float, - float]]) -> Tuple[float, float, float]: + self, positions: list[tuple[float, float, + float]]) -> tuple[float, float, float]: # pylint: disable=too-many-branches # pylint: disable=too-many-locals # pylint: disable=too-many-statements - custom_menu_entries: List[Dict[str, Any]] = [] + custom_menu_entries: list[dict[str, Any]] = [] session = _ba.get_foreground_host_session() if session is not None: try: diff --git a/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py b/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py index d5ad875a..4a446a3c 100644 --- a/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py +++ b/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py @@ -12,7 +12,7 @@ from ba import charstr from ba import SpecialChar as SpCh if TYPE_CHECKING: - from typing import List, Tuple, Optional + from typing import Optional class OnScreenKeyboardWindow(ba.Window): @@ -78,14 +78,14 @@ class OnScreenKeyboardWindow(ba.Window): self._double_press_shift = False self._num_mode_button: Optional[ba.Widget] = None self._emoji_button: Optional[ba.Widget] = None - self._char_keys: List[ba.Widget] = [] + self._char_keys: list[ba.Widget] = [] self._keyboard_index = 0 self._last_space_press = 0.0 self._double_space_interval = 0.3 self._keyboard: ba.Keyboard - self._chars: List[str] - self._modes: List[str] + self._chars: list[str] + self._modes: list[str] self._mode: str self._mode_index: int self._load_keyboard() @@ -116,7 +116,7 @@ class OnScreenKeyboardWindow(ba.Window): # dummy data just used for row/column lengths... we don't actually # set things until refresh - chars: List[Tuple[str, ...]] = self._keyboard.chars + chars: list[tuple[str, ...]] = self._keyboard.chars for row_num, row in enumerate(chars): h = row_starts[row_num] @@ -244,7 +244,7 @@ class OnScreenKeyboardWindow(ba.Window): return kbclass() def _refresh(self) -> None: - chars: Optional[List[str]] = None + chars: Optional[list[str]] = None if self._mode in ['normal', 'caps']: chars = list(self._chars) if self._mode == 'caps': diff --git a/assets/src/ba_data/python/bastd/ui/party.py b/assets/src/ba_data/python/bastd/ui/party.py index 041fc4f7..307b5704 100644 --- a/assets/src/ba_data/python/bastd/ui/party.py +++ b/assets/src/ba_data/python/bastd/ui/party.py @@ -13,7 +13,7 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import List, Sequence, Optional, Dict, Any + from typing import Sequence, Optional, Any class PartyWindow(ba.Window): @@ -113,7 +113,7 @@ class PartyWindow(ba.Window): h_align='center', v_align='center', text=ba.Lstr(resource='chatMutedText')) - self._chat_texts: List[ba.Widget] = [] + self._chat_texts: list[ba.Widget] = [] # add all existing messages if chat is not muted if not ba.app.config.resolve('Chat Muted'): @@ -153,8 +153,8 @@ class PartyWindow(ba.Window): position=(self._width - 70, 35), on_activate_call=self._send_chat_message) ba.textwidget(edit=txt, on_return_press_call=btn.activate) - self._name_widgets: List[ba.Widget] = [] - self._roster: Optional[List[Dict[str, Any]]] = None + self._name_widgets: list[ba.Widget] = [] + self._roster: Optional[list[dict[str, Any]]] = None self._update_timer = ba.Timer(1.0, ba.WeakCall(self._update), repeat=True, diff --git a/assets/src/ba_data/python/bastd/ui/partyqueue.py b/assets/src/ba_data/python/bastd/ui/partyqueue.py index fd8df48b..f1b5a235 100644 --- a/assets/src/ba_data/python/bastd/ui/partyqueue.py +++ b/assets/src/ba_data/python/bastd/ui/partyqueue.py @@ -12,7 +12,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Sequence, List, Dict + from typing import Any, Optional, Sequence class PartyQueueWindow(ba.Window): @@ -181,8 +181,8 @@ class PartyQueueWindow(ba.Window): self._boost_price: Optional[ba.Widget] = None self._boost_label: Optional[ba.Widget] = None self._field_shown = False - self._dudes: List[PartyQueueWindow.Dude] = [] - self._dudes_by_id: Dict[int, PartyQueueWindow.Dude] = {} + self._dudes: list[PartyQueueWindow.Dude] = [] + self._dudes_by_id: dict[int, PartyQueueWindow.Dude] = {} self._line_left = 40.0 self._line_width = self._width - 190 self._line_bottom = self._height * 0.4 @@ -292,7 +292,7 @@ class PartyQueueWindow(ba.Window): """Close the ui.""" ba.containerwidget(edit=self._root_widget, transition='out_scale') - def _update_field(self, response: Dict[str, Any]) -> None: + def _update_field(self, response: dict[str, Any]) -> None: if self._angry_computer_image is None: self._angry_computer_image = ba.imagewidget( parent=self._root_widget, @@ -356,7 +356,7 @@ class PartyQueueWindow(ba.Window): self._dudes = [] self._dudes_by_id = {} - def on_update_response(self, response: Optional[Dict[str, Any]]) -> None: + def on_update_response(self, response: Optional[dict[str, Any]]) -> None: """We've received a response from an update to the server.""" # pylint: disable=too-many-branches if not self._root_widget: diff --git a/assets/src/ba_data/python/bastd/ui/play.py b/assets/src/ba_data/python/bastd/ui/play.py index 620b7a04..adfeb3e9 100644 --- a/assets/src/ba_data/python/bastd/ui/play.py +++ b/assets/src/ba_data/python/bastd/ui/play.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Optional, Tuple + from typing import Optional class PlayWindow(ba.Window): @@ -37,7 +37,7 @@ class PlayWindow(ba.Window): height = 550 button_width = 400 - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -476,8 +476,8 @@ class PlayWindow(ba.Window): sessiontype=ba.FreeForAllSession).get_root_widget()) def _draw_dude(self, i: int, btn: ba.Widget, hoffs: float, v: float, - scl: float, position: Tuple[float, float], - color: Tuple[float, float, float]) -> None: + scl: float, position: tuple[float, float], + color: tuple[float, float, float]) -> None: h_extra = -100 v_extra = 130 eye_color = (0.7 * 1.0 + 0.3 * color[0], 0.7 * 1.0 + 0.3 * color[1], diff --git a/assets/src/ba_data/python/bastd/ui/playlist/__init__.py b/assets/src/ba_data/python/bastd/ui/playlist/__init__.py index 483008c9..5aeadf67 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/__init__.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/__init__.py @@ -9,17 +9,17 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Type + pass # FIXME: Could change this to be a classmethod of session types? class PlaylistTypeVars: """Defines values for a playlist type (config names to use, etc).""" - def __init__(self, sessiontype: Type[ba.Session]): + def __init__(self, sessiontype: type[ba.Session]): from ba.internal import (get_default_teams_playlist, get_default_free_for_all_playlist) - self.sessiontype: Type[ba.Session] + self.sessiontype: type[ba.Session] if issubclass(sessiontype, ba.DualTeamSession): play_mode_name = ba.Lstr(resource='playModes.teamsText', diff --git a/assets/src/ba_data/python/bastd/ui/playlist/addgame.py b/assets/src/ba_data/python/bastd/ui/playlist/addgame.py index af51c57e..f12f26bf 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/addgame.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/addgame.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Type, Optional + from typing import Optional from bastd.ui.playlist.editcontroller import PlaylistEditController @@ -112,7 +112,7 @@ class PlaylistAddGameWindow(ba.Window): ba.containerwidget(edit=self._root_widget, cancel_button=self._back_button, start_button=select_button) - self._selected_game_type: Optional[Type[ba.GameActivity]] = None + self._selected_game_type: Optional[type[ba.GameActivity]] = None ba.containerwidget(edit=self._root_widget, selected_child=self._scrollwidget) @@ -193,7 +193,7 @@ class PlaylistAddGameWindow(ba.Window): assert self._selected_game_type is not None self._editcontroller.add_game_type_selected(self._selected_game_type) - def _set_selected_game_type(self, gametype: Type[ba.GameActivity]) -> None: + def _set_selected_game_type(self, gametype: type[ba.GameActivity]) -> None: self._selected_game_type = gametype ba.textwidget(edit=self._selected_title_text, text=gametype.get_display_string()) diff --git a/assets/src/ba_data/python/bastd/ui/playlist/browser.py b/assets/src/ba_data/python/bastd/ui/playlist/browser.py index 0a3c7ef9..7646b3ff 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/browser.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/browser.py @@ -12,14 +12,14 @@ import _ba import ba if TYPE_CHECKING: - from typing import Type, Optional, Tuple, Union + from typing import Optional, Union class PlaylistBrowserWindow(ba.Window): """Window for starting teams games.""" def __init__(self, - sessiontype: Type[ba.Session], + sessiontype: type[ba.Session], transition: Optional[str] = 'in_right', origin_widget: ba.Widget = None): # pylint: disable=too-many-statements @@ -27,7 +27,7 @@ class PlaylistBrowserWindow(ba.Window): from bastd.ui.playlist import PlaylistTypeVars # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -432,7 +432,7 @@ class PlaylistBrowserWindow(ba.Window): mark_unowned=True) for entry in playlist: mapname = entry['settings']['map'] - maptype: Optional[Type[ba.Map]] + maptype: Optional[type[ba.Map]] try: maptype = get_map_class(mapname) except ba.NotFoundError: diff --git a/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py b/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py index 4ee5b297..917e65ed 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py @@ -12,14 +12,14 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Type, Optional, Tuple, List, Dict + from typing import Any, Optional class PlaylistCustomizeBrowserWindow(ba.Window): """Window for viewing a playlist.""" def __init__(self, - sessiontype: Type[ba.Session], + sessiontype: type[ba.Session], transition: str = 'in_right', select_playlist: str = None, origin_widget: ba.Widget = None): @@ -28,7 +28,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window): # pylint: disable=too-many-statements # pylint: disable=cyclic-import from bastd.ui import playlist - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -86,7 +86,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window): h = 41 + x_inset b_color = (0.6, 0.53, 0.63) b_textcolor = (0.75, 0.7, 0.8) - self._lock_images: List[ba.Widget] = [] + self._lock_images: list[ba.Widget] = [] lock_tex = ba.gettexture('lock') scl = (1.1 if uiscale is ba.UIScale.SMALL else @@ -236,7 +236,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window): self._selected_playlist_name: Optional[str] = None self._selected_playlist_index: Optional[int] = None - self._playlist_widgets: List[ba.Widget] = [] + self._playlist_widgets: list[ba.Widget] = [] self._refresh(select_playlist=select_playlist) @@ -539,7 +539,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window): return if self._selected_playlist_name is None: return - plst: Optional[List[Dict[str, Any]]] + plst: Optional[list[dict[str, Any]]] if self._selected_playlist_name == '__default__': plst = self._pvars.get_default_list_call() else: diff --git a/assets/src/ba_data/python/bastd/ui/playlist/edit.py b/assets/src/ba_data/python/bastd/ui/playlist/edit.py index cb5388a2..2b9e4c4b 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/edit.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/edit.py @@ -10,7 +10,7 @@ import ba import _ba if TYPE_CHECKING: - from typing import Optional, List + from typing import Optional from bastd.ui.playlist.editcontroller import PlaylistEditController @@ -106,7 +106,7 @@ class PlaylistEditWindow(ba.Window): on_return_press_call=self._save_press_with_sound) ba.widget(edit=cancel_button, down_widget=self._text_field) - self._list_widgets: List[ba.Widget] = [] + self._list_widgets: list[ba.Widget] = [] h = 40 + x_inset v = self._height - 172.0 diff --git a/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py b/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py index 5c37c539..bf3e8326 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py @@ -10,17 +10,17 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, Type, List, Dict, Optional + from typing import Any, Optional class PlaylistEditController: """Coordinates various UIs involved in playlist editing.""" def __init__(self, - sessiontype: Type[ba.Session], + sessiontype: type[ba.Session], existing_playlist_name: str = None, transition: str = 'in_right', - playlist: List[Dict[str, Any]] = None, + playlist: list[dict[str, Any]] = None, playlist_name: str = None): from ba.internal import preload_map_preview_media, filter_playlist from bastd.ui.playlist import PlaylistTypeVars @@ -34,7 +34,7 @@ class PlaylistEditController: self._sessiontype = sessiontype self._editing_game = False - self._editing_game_type: Optional[Type[ba.GameActivity]] = None + self._editing_game_type: Optional[type[ba.GameActivity]] = None self._pvars = PlaylistTypeVars(sessiontype) self._existing_playlist_name = existing_playlist_name self._config_name_full = self._pvars.config_name + ' Playlists' @@ -106,15 +106,15 @@ class PlaylistEditController: """(internal)""" self._name = name - def get_playlist(self) -> List[Dict[str, Any]]: + def get_playlist(self) -> list[dict[str, Any]]: """Return the current state of the edited playlist.""" return copy.deepcopy(self._playlist) - def set_playlist(self, playlist: List[Dict[str, Any]]) -> None: + def set_playlist(self, playlist: list[dict[str, Any]]) -> None: """Set the playlist contents.""" self._playlist = copy.deepcopy(playlist) - def get_session_type(self) -> Type[ba.Session]: + def get_session_type(self) -> type[ba.Session]: """Return the ba.Session type for this edit-session.""" return self._sessiontype @@ -155,19 +155,19 @@ class PlaylistEditController: PlaylistEditWindow(editcontroller=self, transition='in_left').get_root_widget()) - def _show_edit_ui(self, gametype: Type[ba.GameActivity], - settings: Optional[Dict[str, Any]]) -> None: + def _show_edit_ui(self, gametype: type[ba.GameActivity], + settings: Optional[dict[str, Any]]) -> None: self._editing_game = (settings is not None) self._editing_game_type = gametype assert self._sessiontype is not None gametype.create_settings_ui(self._sessiontype, copy.deepcopy(settings), self._edit_game_done) - def add_game_type_selected(self, gametype: Type[ba.GameActivity]) -> None: + def add_game_type_selected(self, gametype: type[ba.GameActivity]) -> None: """(internal)""" self._show_edit_ui(gametype=gametype, settings=None) - def _edit_game_done(self, config: Optional[Dict[str, Any]]) -> None: + def _edit_game_done(self, config: Optional[dict[str, Any]]) -> None: from bastd.ui.playlist.edit import PlaylistEditWindow from bastd.ui.playlist.addgame import PlaylistAddGameWindow from ba.internal import get_type_name diff --git a/assets/src/ba_data/python/bastd/ui/playlist/editgame.py b/assets/src/ba_data/python/bastd/ui/playlist/editgame.py index 8533cc11..98441087 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/editgame.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/editgame.py @@ -12,20 +12,20 @@ import _ba import ba if TYPE_CHECKING: - from typing import Type, Any, Dict, Callable, Optional, Union, List + from typing import Any, Callable, Optional, Union class PlaylistEditGameWindow(ba.Window): """Window for editing a game config.""" def __init__(self, - gametype: Type[ba.GameActivity], - sessiontype: Type[ba.Session], - config: Optional[Dict[str, Any]], - completion_call: Callable[[Optional[Dict[str, Any]]], Any], + gametype: type[ba.GameActivity], + sessiontype: type[ba.Session], + config: Optional[dict[str, Any]], + completion_call: Callable[[Optional[dict[str, Any]]], Any], default_selection: str = None, transition: str = 'in_right', - edit_info: Dict[str, Any] = None): + edit_info: dict[str, Any] = None): # pylint: disable=too-many-branches # pylint: disable=too-many-statements # pylint: disable=too-many-locals @@ -86,7 +86,7 @@ class PlaylistEditGameWindow(ba.Window): else: self._settings = {} - self._choice_selections: Dict[str, int] = {} + self._choice_selections: dict[str, int] = {} uiscale = ba.app.ui.uiscale width = 720 if uiscale is ba.UIScale.SMALL else 620 @@ -176,7 +176,7 @@ class PlaylistEditGameWindow(ba.Window): # Keep track of all the selectable widgets we make so we can wire # them up conveniently. - widget_column: List[List[ba.Widget]] = [] + widget_column: list[list[ba.Widget]] = [] # Map select button. ba.textwidget(parent=self._subcontainer, @@ -392,7 +392,7 @@ class PlaylistEditGameWindow(ba.Window): # Ok now wire up the column. try: # pylint: disable=unsubscriptable-object - prev_widgets: Optional[List[ba.Widget]] = None + prev_widgets: Optional[list[ba.Widget]] = None for cwdg in widget_column: if prev_widgets is not None: # Wire our rightmost to their rightmost. @@ -458,7 +458,7 @@ class PlaylistEditGameWindow(ba.Window): resource='offText')) self._settings[setting_name] = value - def _getconfig(self) -> Dict[str, Any]: + def _getconfig(self) -> dict[str, Any]: settings = copy.deepcopy(self._settings) settings['map'] = self._map return {'settings': settings} @@ -468,7 +468,7 @@ class PlaylistEditGameWindow(ba.Window): def _inc(self, ctrl: ba.Widget, min_val: Union[int, float], max_val: Union[int, float], increment: Union[int, float], - setting_type: Type, setting_name: str) -> None: + setting_type: type, setting_name: str) -> None: if setting_type == float: val = float(cast(str, ba.textwidget(query=ctrl))) else: diff --git a/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py b/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py index 2381f6c5..fc79ce76 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py @@ -11,18 +11,18 @@ import _ba import ba if TYPE_CHECKING: - from typing import Type, Any, Callable, Dict, List, Tuple, Optional + from typing import Any, Callable, Optional class PlaylistMapSelectWindow(ba.Window): """Window to select a map.""" def __init__(self, - gametype: Type[ba.GameActivity], - sessiontype: Type[ba.Session], - config: Dict[str, Any], - edit_info: Dict[str, Any], - completion_call: Callable[[Optional[Dict[str, Any]]], Any], + gametype: type[ba.GameActivity], + sessiontype: type[ba.Session], + config: dict[str, Any], + edit_info: dict[str, Any], + completion_call: Callable[[Optional[dict[str, Any]]], Any], transition: str = 'in_right'): from ba.internal import get_filtered_map_name self._gametype = gametype @@ -30,7 +30,7 @@ class PlaylistMapSelectWindow(ba.Window): self._config = config self._completion_call = completion_call self._edit_info = edit_info - self._maps: List[Tuple[str, ba.Texture]] = [] + self._maps: list[tuple[str, ba.Texture]] = [] try: self._previous_map = get_filtered_map_name( config['settings']['map']) diff --git a/assets/src/ba_data/python/bastd/ui/playlist/share.py b/assets/src/ba_data/python/bastd/ui/playlist/share.py index 0cd1ea4b..8355c39a 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/share.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/share.py @@ -12,7 +12,7 @@ import ba from bastd.ui import promocode if TYPE_CHECKING: - from typing import Any, Callable, Dict, Optional, Tuple + from typing import Any, Callable, Optional class SharePlaylistImportWindow(promocode.PromoCodeWindow): @@ -26,7 +26,7 @@ class SharePlaylistImportWindow(promocode.PromoCodeWindow): origin_widget=origin_widget) self._on_success_callback = on_success_callback - def _on_import_response(self, response: Optional[Dict[str, Any]]) -> None: + def _on_import_response(self, response: Optional[dict[str, Any]]) -> None: if response is None: ba.screenmessage(ba.Lstr(resource='errorText'), color=(1, 0, 0)) ba.playsound(ba.getsound('error')) @@ -67,7 +67,7 @@ class SharePlaylistResultsWindow(ba.Window): def __init__(self, name: str, data: str, - origin: Tuple[float, float] = (0.0, 0.0)): + origin: tuple[float, float] = (0.0, 0.0)): del origin # unused arg self._width = 450 self._height = 300 diff --git a/assets/src/ba_data/python/bastd/ui/playoptions.py b/assets/src/ba_data/python/bastd/ui/playoptions.py index af6725d9..e4b16d5a 100644 --- a/assets/src/ba_data/python/bastd/ui/playoptions.py +++ b/assets/src/ba_data/python/bastd/ui/playoptions.py @@ -11,16 +11,16 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Any, Type, Tuple, Optional, Union + from typing import Any, Optional, Union class PlayOptionsWindow(popup.PopupWindow): """A popup window for configuring play options.""" def __init__(self, - sessiontype: Type[ba.Session], + sessiontype: type[ba.Session], playlist: str, - scale_origin: Tuple[float, float], + scale_origin: tuple[float, float], delegate: Any = None): # FIXME: Tidy this up. # pylint: disable=too-many-branches @@ -90,7 +90,7 @@ class PlayOptionsWindow(popup.PopupWindow): game_count = len(plst) for entry in plst: mapname = entry['settings']['map'] - maptype: Optional[Type[ba.Map]] + maptype: Optional[type[ba.Map]] try: maptype = get_map_class(mapname) except ba.NotFoundError: diff --git a/assets/src/ba_data/python/bastd/ui/popup.py b/assets/src/ba_data/python/bastd/ui/popup.py index 500c3796..d89374b2 100644 --- a/assets/src/ba_data/python/bastd/ui/popup.py +++ b/assets/src/ba_data/python/bastd/ui/popup.py @@ -11,20 +11,20 @@ import _ba import ba if TYPE_CHECKING: - from typing import Tuple, Any, Sequence, Callable, Optional, List, Union + from typing import Any, Sequence, Callable, Optional, Union class PopupWindow: """A transient window that positions and scales itself for visibility.""" def __init__(self, - position: Tuple[float, float], - size: Tuple[float, float], + position: tuple[float, float], + size: tuple[float, float], scale: float = 1.0, - offset: Tuple[float, float] = (0, 0), - bg_color: Tuple[float, float, float] = (0.35, 0.55, 0.15), - focus_position: Tuple[float, float] = (0, 0), - focus_size: Tuple[float, float] = None, + offset: tuple[float, float] = (0, 0), + bg_color: tuple[float, float, float] = (0.35, 0.55, 0.15), + focus_position: tuple[float, float] = (0, 0), + focus_size: tuple[float, float] = None, toolbar_visibility: str = 'menu_minimal_no_back'): # pylint: disable=too-many-locals if focus_size is None: @@ -101,7 +101,7 @@ class PopupMenuWindow(PopupWindow): """A menu built using popup-window functionality.""" def __init__(self, - position: Tuple[float, float], + position: tuple[float, float], choices: Sequence[str], current_choice: str, delegate: Any = None, @@ -121,7 +121,7 @@ class PopupMenuWindow(PopupWindow): # FIXME: For the moment we base our width on these strings so # we need to flatten them. - choices_display_fin: List[str] = [] + choices_display_fin: list[str] = [] for choice_display in choices_display: choices_display_fin.append(choice_display.evaluate()) @@ -264,7 +264,7 @@ class PopupMenu: def __init__(self, parent: ba.Widget, - position: Tuple[float, float], + position: tuple[float, float], choices: Sequence[str], current_choice: str = None, on_value_change_call: Callable[[str], Any] = None, @@ -275,7 +275,7 @@ class PopupMenu: scale: float = None, choices_disabled: Sequence[str] = None, choices_display: Sequence[ba.Lstr] = None, - button_size: Tuple[float, float] = (160.0, 50.0), + button_size: tuple[float, float] = (160.0, 50.0), autoselect: bool = True): # pylint: disable=too-many-locals if choices_disabled is None: diff --git a/assets/src/ba_data/python/bastd/ui/profile/browser.py b/assets/src/ba_data/python/bastd/ui/profile/browser.py index e82fd29d..8d0ac7e7 100644 --- a/assets/src/ba_data/python/bastd/ui/profile/browser.py +++ b/assets/src/ba_data/python/bastd/ui/profile/browser.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Tuple, List, Dict + from typing import Any, Optional class ProfileBrowserWindow(ba.Window): @@ -39,7 +39,7 @@ class ProfileBrowserWindow(ba.Window): ba.app.pause() # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -162,9 +162,9 @@ class ProfileBrowserWindow(ba.Window): border=2, margin=0) v -= 255 - self._profiles: Optional[Dict[str, Dict[str, Any]]] = None + self._profiles: Optional[dict[str, dict[str, Any]]] = None self._selected_profile = selected_profile - self._profile_widgets: List[ba.Widget] = [] + self._profile_widgets: list[ba.Widget] = [] self._refresh() self._restore_state() diff --git a/assets/src/ba_data/python/bastd/ui/profile/edit.py b/assets/src/ba_data/python/bastd/ui/profile/edit.py index c63cd165..d7df39ac 100644 --- a/assets/src/ba_data/python/bastd/ui/profile/edit.py +++ b/assets/src/ba_data/python/bastd/ui/profile/edit.py @@ -11,7 +11,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Tuple, Optional, List + from typing import Optional from bastd.ui.colorpicker import ColorPicker @@ -38,9 +38,9 @@ class EditProfileWindow(ba.Window): self._in_main_menu = in_main_menu self._existing_profile = existing_profile self._r = 'editProfileWindow' - self._spazzes: List[str] = [] - self._icon_textures: List[ba.Texture] = [] - self._icon_tint_textures: List[ba.Texture] = [] + self._spazzes: list[str] = [] + self._icon_textures: list[ba.Texture] = [] + self._icon_tint_textures: list[ba.Texture] = [] # Grab profile colors or pick random ones. self._color, self._highlight = get_player_profile_colors( @@ -523,7 +523,7 @@ class EditProfileWindow(ba.Window): tint_color=self._color, tint2_color=self._highlight) - def _make_picker(self, picker_type: str, origin: Tuple[float, + def _make_picker(self, picker_type: str, origin: tuple[float, float]) -> None: from bastd.ui import colorpicker if picker_type == 'color': @@ -550,12 +550,12 @@ class EditProfileWindow(ba.Window): selected_profile=self._existing_profile, in_main_menu=self._in_main_menu).get_root_widget()) - def _set_color(self, color: Tuple[float, float, float]) -> None: + def _set_color(self, color: tuple[float, float, float]) -> None: self._color = color if self._color_button: ba.buttonwidget(edit=self._color_button, color=color) - def _set_highlight(self, color: Tuple[float, float, float]) -> None: + def _set_highlight(self, color: tuple[float, float, float]) -> None: self._highlight = color if self._highlight_button: ba.buttonwidget(edit=self._highlight_button, color=color) @@ -575,7 +575,7 @@ class EditProfileWindow(ba.Window): print('color_picker_closing got unknown tag ' + str(tag)) def color_picker_selected_color(self, picker: ColorPicker, - color: Tuple[float, float, float]) -> None: + color: tuple[float, float, float]) -> None: """Called when a color is selected in a color picker.""" if not self._root_widget: return diff --git a/assets/src/ba_data/python/bastd/ui/profile/upgrade.py b/assets/src/ba_data/python/bastd/ui/profile/upgrade.py index c28777fd..5d2c8f16 100644 --- a/assets/src/ba_data/python/bastd/ui/profile/upgrade.py +++ b/assets/src/ba_data/python/bastd/ui/profile/upgrade.py @@ -12,7 +12,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Dict + from typing import Any, Optional from bastd.ui.profile.edit import EditProfileWindow @@ -134,7 +134,7 @@ class ProfileUpgradeWindow(ba.Window): repeat=True) self._update() - def _profile_check_result(self, result: Optional[Dict[str, Any]]) -> None: + def _profile_check_result(self, result: Optional[dict[str, Any]]) -> None: if result is None: ba.textwidget( edit=self._status_text, diff --git a/assets/src/ba_data/python/bastd/ui/promocode.py b/assets/src/ba_data/python/bastd/ui/promocode.py index dfd1fddd..ce416a54 100644 --- a/assets/src/ba_data/python/bastd/ui/promocode.py +++ b/assets/src/ba_data/python/bastd/ui/promocode.py @@ -11,7 +11,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Optional, Tuple + from typing import Optional class PromoCodeWindow(ba.Window): @@ -19,7 +19,7 @@ class PromoCodeWindow(ba.Window): def __init__(self, modal: bool = False, origin_widget: ba.Widget = None): - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() diff --git a/assets/src/ba_data/python/bastd/ui/purchase.py b/assets/src/ba_data/python/bastd/ui/purchase.py index 519fb489..c516b43e 100644 --- a/assets/src/ba_data/python/bastd/ui/purchase.py +++ b/assets/src/ba_data/python/bastd/ui/purchase.py @@ -10,14 +10,14 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Dict, List, Optional + from typing import Any, Optional class PurchaseWindow(ba.Window): """Window for purchasing one or more items.""" def __init__(self, - items: List[str], + items: list[str], transition: str = 'in_right', header_text: ba.Lstr = None): from ba.internal import get_store_item_display_size @@ -50,7 +50,7 @@ class PurchaseWindow(ba.Window): scale=1.2, color=(1, 0.8, 0.3, 1)) size = get_store_item_display_size(items[0]) - display: Dict[str, Any] = {} + display: dict[str, Any] = {} storeitemui.instantiate_store_item_display( items[0], display, diff --git a/assets/src/ba_data/python/bastd/ui/radiogroup.py b/assets/src/ba_data/python/bastd/ui/radiogroup.py index 20d3f9cc..39f2aff7 100644 --- a/assets/src/ba_data/python/bastd/ui/radiogroup.py +++ b/assets/src/ba_data/python/bastd/ui/radiogroup.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import List, Any, Callable, Sequence + from typing import Any, Callable, Sequence def make_radio_group(check_boxes: Sequence[ba.Widget], @@ -17,7 +17,7 @@ def make_radio_group(check_boxes: Sequence[ba.Widget], value_change_call: Callable[[str], Any]) -> None: """Link the provided check_boxes together into a radio group.""" - def _radio_press(check_string: str, other_check_boxes: List[ba.Widget], + def _radio_press(check_string: str, other_check_boxes: list[ba.Widget], val: int) -> None: if val == 1: value_change_call(check_string) diff --git a/assets/src/ba_data/python/bastd/ui/serverdialog.py b/assets/src/ba_data/python/bastd/ui/serverdialog.py index 17565036..1f98ef7b 100644 --- a/assets/src/ba_data/python/bastd/ui/serverdialog.py +++ b/assets/src/ba_data/python/bastd/ui/serverdialog.py @@ -10,13 +10,13 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Dict, Optional + from typing import Any, Optional class ServerDialogWindow(ba.Window): """A dialog window driven by the master-server.""" - def __init__(self, data: Dict[str, Any]): + def __init__(self, data: dict[str, Any]): self._dialog_id = data['dialogID'] txt = ba.Lstr(translate=('serverResponses', data['text']), subs=data.get('subs', [])).evaluate() diff --git a/assets/src/ba_data/python/bastd/ui/settings/advanced.py b/assets/src/ba_data/python/bastd/ui/settings/advanced.py index 5d428cb7..d281b4f3 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/advanced.py +++ b/assets/src/ba_data/python/bastd/ui/settings/advanced.py @@ -11,7 +11,7 @@ import ba from bastd.ui import popup as popup_ui if TYPE_CHECKING: - from typing import Tuple, Any, Optional, List, Dict + from typing import Any, Optional class AdvancedSettingsWindow(ba.Window): @@ -31,7 +31,7 @@ class AdvancedSettingsWindow(ba.Window): app = ba.app # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -57,8 +57,8 @@ class AdvancedSettingsWindow(ba.Window): 1.4 if uiscale is ba.UIScale.MEDIUM else 1.0), stack_offset=(0, -25) if uiscale is ba.UIScale.SMALL else (0, 0))) self._prev_lang = '' - self._prev_lang_list: List[str] = [] - self._complete_langs_list: Optional[List] = None + self._prev_lang_list: list[str] = [] + self._complete_langs_list: Optional[list] = None self._complete_langs_error = False self._language_popup: Optional[popup_ui.PopupMenu] = None @@ -693,7 +693,7 @@ class AdvancedSettingsWindow(ba.Window): self._save_state() ba.timer(0.1, ba.WeakCall(self._rebuild), timetype=ba.TimeType.REAL) - def _completed_langs_cb(self, results: Optional[Dict[str, Any]]) -> None: + def _completed_langs_cb(self, results: Optional[dict[str, Any]]) -> None: if results is not None and results['langs'] is not None: self._complete_langs_list = results['langs'] self._complete_langs_error = False diff --git a/assets/src/ba_data/python/bastd/ui/settings/allsettings.py b/assets/src/ba_data/python/bastd/ui/settings/allsettings.py index ede3823d..cf44b215 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/allsettings.py +++ b/assets/src/ba_data/python/bastd/ui/settings/allsettings.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Tuple, Optional, Union + from typing import Optional, Union class AllSettingsWindow(ba.Window): @@ -28,7 +28,7 @@ class AllSettingsWindow(ba.Window): threading.Thread(target=self._preload_modules).start() ba.set_analytics_screen('Settings Window') - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() diff --git a/assets/src/ba_data/python/bastd/ui/settings/audio.py b/assets/src/ba_data/python/bastd/ui/settings/audio.py index 99f98d93..0e27e38f 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/audio.py +++ b/assets/src/ba_data/python/bastd/ui/settings/audio.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Tuple, Optional + from typing import Optional class AudioSettingsWindow(ba.Window): @@ -28,7 +28,7 @@ class AudioSettingsWindow(ba.Window): music = ba.app.music # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() diff --git a/assets/src/ba_data/python/bastd/ui/settings/controls.py b/assets/src/ba_data/python/bastd/ui/settings/controls.py index ee06d279..81aa0715 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/controls.py +++ b/assets/src/ba_data/python/bastd/ui/settings/controls.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Tuple, Optional + from typing import Optional class ControlsSettingsWindow(ba.Window): @@ -27,7 +27,7 @@ class ControlsSettingsWindow(ba.Window): from bastd.ui import popup as popup_ui self._have_selected_child = False - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] # If they provided an origin-widget, scale up from that. if origin_widget is not None: diff --git a/assets/src/ba_data/python/bastd/ui/settings/gamepad.py b/assets/src/ba_data/python/bastd/ui/settings/gamepad.py index 4c345094..b9511382 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/gamepad.py +++ b/assets/src/ba_data/python/bastd/ui/settings/gamepad.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Dict, Any, Optional, Union, Tuple, Callable + from typing import Any, Optional, Union, Callable class GamepadSettingsWindow(ba.Window): @@ -62,7 +62,7 @@ class GamepadSettingsWindow(ba.Window): for widget in self._root_widget.get_children(): widget.delete() - self._textwidgets: Dict[str, ba.Widget] = {} + self._textwidgets: dict[str, ba.Widget] = {} # If we were supplied with settings, we're a secondary joystick and # just operate on that. in the other (normal) case we make our own. @@ -348,7 +348,7 @@ class GamepadSettingsWindow(ba.Window): """(internal)""" return self._is_secondary - def get_settings(self) -> Dict[str, Any]: + def get_settings(self) -> dict[str, Any]: """(internal)""" assert self._settings is not None return self._settings @@ -528,7 +528,7 @@ class GamepadSettingsWindow(ba.Window): return self._input.get_button_name(self._settings[control]) return ba.Lstr(resource=self._r + '.unsetText') - def _gamepad_event(self, control: str, event: Dict[str, Any], + def _gamepad_event(self, control: str, event: dict[str, Any], dialog: AwaitGamepadInputWindow) -> None: # pylint: disable=too-many-nested-blocks # pylint: disable=too-many-branches @@ -647,8 +647,8 @@ class GamepadSettingsWindow(ba.Window): dialog.die() def _capture_button(self, - pos: Tuple[float, float], - color: Tuple[float, float, float], + pos: tuple[float, float], + color: tuple[float, float, float], texture: ba.Texture, button: str, scale: float = 1.0, @@ -713,7 +713,7 @@ class GamepadSettingsWindow(ba.Window): assert self._settings is not None if self._input: dst = get_input_device_config(self._input, default=True) - dst2: Dict[str, Any] = dst[0][dst[1]] + dst2: dict[str, Any] = dst[0][dst[1]] dst2.clear() # Store any values that aren't -1. @@ -752,7 +752,7 @@ class AwaitGamepadInputWindow(ba.Window): self, gamepad: ba.InputDevice, button: str, - callback: Callable[[str, Dict[str, Any], AwaitGamepadInputWindow], + callback: Callable[[str, dict[str, Any], AwaitGamepadInputWindow], Any], message: ba.Lstr = None, message2: ba.Lstr = None): @@ -815,7 +815,7 @@ class AwaitGamepadInputWindow(ba.Window): if self._root_widget: ba.containerwidget(edit=self._root_widget, transition='out_scale') - def _event_callback(self, event: Dict[str, Any]) -> None: + def _event_callback(self, event: dict[str, Any]) -> None: input_device = event['input_device'] assert isinstance(input_device, ba.InputDevice) diff --git a/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py b/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py index 07c1074d..116d0fec 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py +++ b/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Dict, Tuple, Optional, Any + from typing import Optional, Any from bastd.ui.settings import gamepad as gpsui @@ -27,7 +27,7 @@ class GamepadAdvancedSettingsWindow(ba.Window): self._width = 900 if uiscale is ba.UIScale.SMALL else 700 self._x_inset = x_inset = 100 if uiscale is ba.UIScale.SMALL else 0 self._height = 402 if uiscale is ba.UIScale.SMALL else 512 - self._textwidgets: Dict[str, ba.Widget] = {} + self._textwidgets: dict[str, ba.Widget] = {} super().__init__(root_widget=ba.containerwidget( transition='in_scale', size=(self._width, self._height), @@ -331,10 +331,10 @@ class GamepadAdvancedSettingsWindow(ba.Window): def _capture_button( self, - pos: Tuple[float, float], + pos: tuple[float, float], name: ba.Lstr, control: str, - message: Optional[ba.Lstr] = None) -> Tuple[ba.Widget, ba.Widget]: + message: Optional[ba.Lstr] = None) -> tuple[ba.Widget, ba.Widget]: if message is None: message = ba.Lstr(resource=self._parent_window.get_r() + '.pressAnyButtonText') @@ -398,13 +398,13 @@ class GamepadAdvancedSettingsWindow(ba.Window): self, name: ba.Lstr, control: str, - position: Tuple[float, float], + position: tuple[float, float], min_val: float = 0.0, max_val: float = 100.0, increment: float = 1.0, change_sound: bool = True, x_offset: float = 0.0, - displayname: ba.Lstr = None) -> Tuple[ba.Widget, ba.Widget]: + displayname: ba.Lstr = None) -> tuple[ba.Widget, ba.Widget]: if displayname is None: displayname = name @@ -455,7 +455,7 @@ class GamepadAdvancedSettingsWindow(ba.Window): ba.textwidget(edit=self._textwidgets[control], text=self._parent_window.get_control_value_name(control)) - def _gamepad_event(self, control: str, event: Dict[str, Any], + def _gamepad_event(self, control: str, event: dict[str, Any], dialog: gpsui.AwaitGamepadInputWindow) -> None: ext = self._parent_window.get_ext() if control in ['triggerRun1' + ext, 'triggerRun2' + ext]: diff --git a/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py b/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py index 71b867c8..8053fe30 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py +++ b/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py @@ -10,10 +10,10 @@ import _ba import ba if TYPE_CHECKING: - from typing import Dict, Any + from typing import Any -def gamepad_configure_callback(event: Dict[str, Any]) -> None: +def gamepad_configure_callback(event: dict[str, Any]) -> None: """Respond to a gamepad button press during config selection.""" from ba.internal import get_remote_app_name from bastd.ui.settings import gamepad diff --git a/assets/src/ba_data/python/bastd/ui/settings/graphics.py b/assets/src/ba_data/python/bastd/ui/settings/graphics.py index df3e89ca..b4e5955a 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/graphics.py +++ b/assets/src/ba_data/python/bastd/ui/settings/graphics.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Tuple, Optional + from typing import Optional class GraphicsSettingsWindow(ba.Window): @@ -25,7 +25,7 @@ class GraphicsSettingsWindow(ba.Window): from bastd.ui import popup from bastd.ui.config import ConfigCheckBox, ConfigNumberEdit # if they provided an origin-widget, scale up from that - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() diff --git a/assets/src/ba_data/python/bastd/ui/settings/keyboard.py b/assets/src/ba_data/python/bastd/ui/settings/keyboard.py index 7482381c..42c634cb 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/keyboard.py +++ b/assets/src/ba_data/python/bastd/ui/settings/keyboard.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Dict, Tuple, Any, Optional + from typing import Any, Optional class ConfigKeyboardWindow(ba.Window): @@ -47,7 +47,7 @@ class ConfigKeyboardWindow(ba.Window): widget.delete() # Fill our temp config with present values. - self._settings: Dict[str, int] = {} + self._settings: dict[str, int] = {} for button in [ 'buttonJump', 'buttonPunch', 'buttonBomb', 'buttonPickUp', 'buttonStart', 'buttonStart2', 'buttonUp', 'buttonDown', @@ -165,8 +165,8 @@ class ConfigKeyboardWindow(ba.Window): scale=1.0) def _capture_button(self, - pos: Tuple[float, float], - color: Tuple[float, float, float], + pos: tuple[float, float], + color: tuple[float, float, float], texture: ba.Texture, button: str, scale: float = 1.0) -> None: @@ -224,7 +224,7 @@ class ConfigKeyboardWindow(ba.Window): return dst = get_input_device_config(self._input, default=False) - dst2: Dict[str, Any] = dst[0][dst[1]] + dst2: dict[str, Any] = dst[0][dst[1]] dst2.clear() # Store any values that aren't -1. @@ -292,7 +292,7 @@ class AwaitKeyboardInputWindow(ba.Window): if self._root_widget: ba.containerwidget(edit=self._root_widget, transition='out_left') - def _button_callback(self, event: Dict[str, Any]) -> None: + def _button_callback(self, event: dict[str, Any]) -> None: self._settings[self._capture_button] = event['button'] if event['type'] == 'BUTTONDOWN': bname = event['input_device'].get_button_name(event['button']) diff --git a/assets/src/ba_data/python/bastd/ui/settings/plugins.py b/assets/src/ba_data/python/bastd/ui/settings/plugins.py index 72e44805..13706eff 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/plugins.py +++ b/assets/src/ba_data/python/bastd/ui/settings/plugins.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Tuple, Optional, Dict + from typing import Optional class PluginSettingsWindow(ba.Window): @@ -22,7 +22,7 @@ class PluginSettingsWindow(ba.Window): app = ba.app # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -98,7 +98,7 @@ class PluginSettingsWindow(ba.Window): color=(1, 0, 0)) ba.playsound(ba.getsound('error')) pluglist = ba.app.plugins.potential_plugins - plugstates: Dict[str, Dict] = ba.app.config.setdefault('Plugins', {}) + plugstates: dict[str, dict] = ba.app.config.setdefault('Plugins', {}) assert isinstance(plugstates, dict) for i, availplug in enumerate(pluglist): active = availplug.class_path in ba.app.plugins.active_plugins @@ -134,7 +134,7 @@ class PluginSettingsWindow(ba.Window): ba.screenmessage( ba.Lstr(resource='settingsWindowAdvanced.mustRestartText'), color=(1.0, 0.5, 0.0)) - plugstates: Dict[str, Dict] = ba.app.config.setdefault('Plugins', {}) + plugstates: dict[str, dict] = ba.app.config.setdefault('Plugins', {}) assert isinstance(plugstates, dict) plugstate = plugstates.setdefault(plug.class_path, {}) plugstate['enabled'] = value diff --git a/assets/src/ba_data/python/bastd/ui/settings/testing.py b/assets/src/ba_data/python/bastd/ui/settings/testing.py index 810311da..51f237e8 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/testing.py +++ b/assets/src/ba_data/python/bastd/ui/settings/testing.py @@ -11,7 +11,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Dict, List + from typing import Any class TestingWindow(ba.Window): @@ -19,7 +19,7 @@ class TestingWindow(ba.Window): def __init__(self, title: ba.Lstr, - entries: List[Dict[str, Any]], + entries: list[dict[str, Any]], transition: str = 'in_right'): uiscale = ba.app.ui.uiscale self._width = 600 @@ -146,7 +146,7 @@ class TestingWindow(ba.Window): right_widget=btn, on_activate_call=self._on_reset_press) - def _get_entry(self, name: str) -> Dict[str, Any]: + def _get_entry(self, name: str) -> dict[str, Any]: for entry in self._entries: if entry['name'] == name: return entry diff --git a/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py b/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py index 7065d463..a899caac 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py +++ b/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py @@ -10,7 +10,7 @@ import ba from bastd.ui.settings import testing if TYPE_CHECKING: - from typing import Any, Dict, List + from typing import Any class VRTestingWindow(testing.TestingWindow): @@ -18,7 +18,7 @@ class VRTestingWindow(testing.TestingWindow): def __init__(self, transition: str = 'in_right'): - entries: List[Dict[str, Any]] = [] + entries: list[dict[str, Any]] = [] app = ba.app # these are gear-vr only if app.platform == 'android' and app.subplatform == 'oculus': diff --git a/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py b/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py index 7989d329..cc125175 100644 --- a/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py +++ b/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py @@ -11,7 +11,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, List, Tuple, Dict + from typing import Any, Optional class SoundtrackBrowserWindow(ba.Window): @@ -24,7 +24,7 @@ class SoundtrackBrowserWindow(ba.Window): # pylint: disable=too-many-statements # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -81,7 +81,7 @@ class SoundtrackBrowserWindow(ba.Window): b_color = (0.6, 0.53, 0.63) b_textcolor = (0.75, 0.7, 0.8) lock_tex = ba.gettexture('lock') - self._lock_images: List[ba.Widget] = [] + self._lock_images: list[ba.Widget] = [] scl = (1.0 if uiscale is ba.UIScale.SMALL else 1.13 if uiscale is ba.UIScale.MEDIUM else 1.4) @@ -195,10 +195,10 @@ class SoundtrackBrowserWindow(ba.Window): if ba.app.ui.use_toolbars else self._scrollwidget) self._col = ba.columnwidget(parent=scrollwidget, border=2, margin=0) - self._soundtracks: Optional[Dict[str, Any]] = None + self._soundtracks: Optional[dict[str, Any]] = None self._selected_soundtrack: Optional[str] = None self._selected_soundtrack_index: Optional[int] = None - self._soundtrack_widgets: List[ba.Widget] = [] + self._soundtrack_widgets: list[ba.Widget] = [] self._allow_changing_soundtracks = False self._refresh() if self._back_button is not None: @@ -259,7 +259,7 @@ class SoundtrackBrowserWindow(ba.Window): if self._selected_soundtrack is None: return - sdtk: Dict[str, Any] + sdtk: dict[str, Any] if self._selected_soundtrack == '__default__': sdtk = {} else: diff --git a/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py b/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py index e264d115..7e08f0f0 100644 --- a/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py +++ b/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py @@ -11,14 +11,14 @@ from typing import TYPE_CHECKING, cast import ba if TYPE_CHECKING: - from typing import Any, Dict, Union, Optional + from typing import Any, Union, Optional class SoundtrackEditWindow(ba.Window): """Window for editing a soundtrack.""" def __init__(self, - existing_soundtrack: Optional[Union[str, Dict[str, Any]]], + existing_soundtrack: Optional[Union[str, dict[str, Any]]], transition: str = 'in_right'): # pylint: disable=too-many-statements appconfig = ba.app.config @@ -147,7 +147,7 @@ class SoundtrackEditWindow(ba.Window): claims_tab=True, selection_loops_to_parent=True) - self._song_type_buttons: Dict[str, ba.Widget] = {} + self._song_type_buttons: dict[str, ba.Widget] = {} self._refresh() ba.buttonwidget(edit=cancel_button, on_activate_call=self._cancel) ba.containerwidget(edit=self._root_widget, cancel_button=cancel_button) @@ -266,7 +266,7 @@ class SoundtrackEditWindow(ba.Window): prev_test_button = btn @classmethod - def _restore_editor(cls, state: Dict[str, Any], musictype: str, + def _restore_editor(cls, state: dict[str, Any], musictype: str, entry: Any) -> None: music = ba.app.music diff --git a/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py b/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py index 1f149b02..ff50e6b9 100644 --- a/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py +++ b/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, List, Optional, Callable + from typing import Any, Optional, Callable class MacMusicAppPlaylistSelectWindow(ba.Window): @@ -66,7 +66,7 @@ class MacMusicAppPlaylistSelectWindow(ba.Window): ba.containerwidget(edit=self._root_widget, selected_child=self._scrollwidget) - def _playlists_cb(self, playlists: List[str]) -> None: + def _playlists_cb(self, playlists: list[str]) -> None: if self._column: for widget in self._column.get_children(): widget.delete() diff --git a/assets/src/ba_data/python/bastd/ui/specialoffer.py b/assets/src/ba_data/python/bastd/ui/specialoffer.py index 3e3a5421..5b2c2ab6 100644 --- a/assets/src/ba_data/python/bastd/ui/specialoffer.py +++ b/assets/src/ba_data/python/bastd/ui/specialoffer.py @@ -11,13 +11,13 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Dict, Optional, Union + from typing import Any, Optional, Union class SpecialOfferWindow(ba.Window): """Window for presenting sales/etc.""" - def __init__(self, offer: Dict[str, Any], transition: str = 'in_right'): + def __init__(self, offer: dict[str, Any], transition: str = 'in_right'): # pylint: disable=too-many-statements # pylint: disable=too-many-branches # pylint: disable=too-many-locals @@ -159,7 +159,7 @@ class SpecialOfferWindow(ba.Window): timetype=ba.TimeType.REAL) size = get_store_item_display_size(self._offer_item) - display: Dict[str, Any] = {} + display: dict[str, Any] = {} storeitemui.instantiate_store_item_display( self._offer_item, display, diff --git a/assets/src/ba_data/python/bastd/ui/store/browser.py b/assets/src/ba_data/python/bastd/ui/store/browser.py index 990f4067..6d757c2a 100644 --- a/assets/src/ba_data/python/bastd/ui/store/browser.py +++ b/assets/src/ba_data/python/bastd/ui/store/browser.py @@ -14,8 +14,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import (Any, Callable, Optional, Tuple, Dict, Union, Sequence, - List) + from typing import Any, Callable, Optional, Union, Sequence class StoreBrowserWindow(ba.Window): @@ -46,7 +45,7 @@ class StoreBrowserWindow(ba.Window): ba.set_analytics_screen('Store Window') - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] # If they provided an origin-widget, scale up from that. if origin_widget is not None: @@ -57,7 +56,7 @@ class StoreBrowserWindow(ba.Window): self._transition_out = 'out_right' scale_origin = None - self.button_infos: Optional[Dict[str, Dict[str, Any]]] = None + self.button_infos: Optional[dict[str, dict[str, Any]]] = None self.update_buttons_timer: Optional[ba.Timer] = None self._status_textwidget_update_timer = None @@ -185,8 +184,8 @@ class StoreBrowserWindow(ba.Window): size=(self._width - tab_buffer_h, 50), on_select_call=self._set_tab) - self._purchasable_count_widgets: Dict[StoreBrowserWindow.TabID, - Dict[str, Any]] = {} + self._purchasable_count_widgets: dict[StoreBrowserWindow.TabID, + dict[str, Any]] = {} # Create our purchasable-items tags and have them update over time. for tab_id, tab in self._tab_row.tabs.items(): @@ -388,7 +387,7 @@ class StoreBrowserWindow(ba.Window): ba.WeakCall(self._on_response, data), timetype=ba.TimeType.REAL) - def _on_response(self, data: Optional[Dict[str, Any]]) -> None: + def _on_response(self, data: Optional[dict[str, Any]]) -> None: # FIXME: clean this up. # pylint: disable=protected-access window = self._window() @@ -402,7 +401,7 @@ class StoreBrowserWindow(ba.Window): # Actually start the purchase locally. def _purchase_check_result(self, item: str, is_ticket_purchase: bool, - result: Optional[Dict[str, Any]]) -> None: + result: Optional[dict[str, Any]]) -> None: if result is None: ba.playsound(ba.getsound('error')) ba.screenmessage( @@ -685,7 +684,7 @@ class StoreBrowserWindow(ba.Window): ba.textwidget(edit=b_info['descriptionText'], color=description_color) - def _on_response(self, data: Optional[Dict[str, Any]]) -> None: + def _on_response(self, data: Optional[dict[str, Any]]) -> None: # pylint: disable=too-many-statements # clear status text.. @@ -710,7 +709,7 @@ class StoreBrowserWindow(ba.Window): class _Store: def __init__(self, store_window: StoreBrowserWindow, - sdata: Dict[str, Any], width: float): + sdata: dict[str, Any], width: float): from ba.internal import (get_store_item_display_size, get_store_layout) self._store_window = store_window @@ -855,7 +854,7 @@ class StoreBrowserWindow(ba.Window): maxwidth=700, transition_delay=0.4) - prev_row_buttons: Optional[List] = None + prev_row_buttons: Optional[list] = None this_row_buttons = [] delay = 0.3 @@ -881,7 +880,7 @@ class StoreBrowserWindow(ba.Window): math.floor((self._width - boffs_h - 20) / (b_width + button_spacing))) col = 0 - item: Dict[str, Any] + item: dict[str, Any] assert self._store_window.button_infos is not None for i, item_name in enumerate(section['items']): item = self._store_window.button_infos[ diff --git a/assets/src/ba_data/python/bastd/ui/store/item.py b/assets/src/ba_data/python/bastd/ui/store/item.py index 841ae1f2..ea49deda 100644 --- a/assets/src/ba_data/python/bastd/ui/store/item.py +++ b/assets/src/ba_data/python/bastd/ui/store/item.py @@ -9,13 +9,13 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Tuple, Dict, Optional + from typing import Any, Optional def instantiate_store_item_display(item_name: str, - item: Dict[str, Any], + item: dict[str, Any], parent_widget: ba.Widget, - b_pos: Tuple[float, float], + b_pos: tuple[float, float], b_width: float, b_height: float, boffs_h: float = 0.0, diff --git a/assets/src/ba_data/python/bastd/ui/tabs.py b/assets/src/ba_data/python/bastd/ui/tabs.py index 62e8a2fd..b3dc38a0 100644 --- a/assets/src/ba_data/python/bastd/ui/tabs.py +++ b/assets/src/ba_data/python/bastd/ui/tabs.py @@ -10,15 +10,15 @@ from typing import TYPE_CHECKING, TypeVar, Generic import ba if TYPE_CHECKING: - from typing import Any, Callable, Dict, Tuple, List, Sequence, Optional + from typing import Any, Callable, Optional @dataclass class Tab: """Info for an individual tab in a TabRow""" button: ba.Widget - position: Tuple[float, float] - size: Tuple[float, float] + position: tuple[float, float] + size: tuple[float, float] T = TypeVar('T') @@ -32,13 +32,13 @@ class TabRow(Generic[T]): def __init__(self, parent: ba.Widget, - tabdefs: List[Tuple[T, ba.Lstr]], - pos: Tuple[float, float], - size: Tuple[float, float], + tabdefs: list[tuple[T, ba.Lstr]], + pos: tuple[float, float], + size: tuple[float, float], on_select_call: Callable[[T], None] = None) -> None: if not tabdefs: raise ValueError('At least one tab def is required') - self.tabs: Dict[T, Tab] = {} + self.tabs: dict[T, Tab] = {} tab_pos_v = pos[1] tab_button_width = float(size[0]) / len(tabdefs) tab_spacing = (250.0 - tab_button_width) * 0.06 diff --git a/assets/src/ba_data/python/bastd/ui/teamnamescolors.py b/assets/src/ba_data/python/bastd/ui/teamnamescolors.py index 9f8450e7..fc789717 100644 --- a/assets/src/ba_data/python/bastd/ui/teamnamescolors.py +++ b/assets/src/ba_data/python/bastd/ui/teamnamescolors.py @@ -10,14 +10,14 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Tuple, List, Sequence + from typing import Sequence from bastd.ui.colorpicker import ColorPicker class TeamNamesColorsWindow(popup.PopupWindow): """A popup window for customizing team names and colors.""" - def __init__(self, scale_origin: Tuple[float, float]): + def __init__(self, scale_origin: tuple[float, float]): from ba.internal import DEFAULT_TEAM_COLORS, DEFAULT_TEAM_NAMES self._width = 500 self._height = 330 @@ -44,8 +44,8 @@ class TeamNamesColorsWindow(popup.PopupWindow): self._colors = list( appconfig.get('Custom Team Colors', DEFAULT_TEAM_COLORS)) - self._color_buttons: List[ba.Widget] = [] - self._color_text_fields: List[ba.Widget] = [] + self._color_buttons: list[ba.Widget] = [] + self._color_text_fields: list[ba.Widget] = [] resetbtn = ba.buttonwidget( parent=self.root_widget, @@ -145,7 +145,7 @@ class TeamNamesColorsWindow(popup.PopupWindow): # either the default raw value or its translation we consider it # default. (the fact that team names get translated makes this # situation a bit sloppy) - new_names: List[str] = [] + new_names: list[str] = [] is_default = True for i in range(2): name = cast(str, ba.textwidget(query=self._color_text_fields[i])) diff --git a/assets/src/ba_data/python/bastd/ui/tournamententry.py b/assets/src/ba_data/python/bastd/ui/tournamententry.py index 12ed8b3a..17373870 100644 --- a/assets/src/ba_data/python/bastd/ui/tournamententry.py +++ b/assets/src/ba_data/python/bastd/ui/tournamententry.py @@ -11,7 +11,7 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Any, Tuple, Callable, Optional, Dict + from typing import Any, Callable, Optional class TournamentEntryWindow(popup.PopupWindow): @@ -20,10 +20,10 @@ class TournamentEntryWindow(popup.PopupWindow): def __init__(self, tournament_id: str, tournament_activity: ba.Activity = None, - position: Tuple[float, float] = (0.0, 0.0), + position: tuple[float, float] = (0.0, 0.0), delegate: Any = None, scale: float = None, - offset: Tuple[float, float] = (0.0, 0.0), + offset: tuple[float, float] = (0.0, 0.0), on_close_call: Callable[[], Any] = None): # Needs some tidying. # pylint: disable=too-many-branches @@ -302,7 +302,7 @@ class TournamentEntryWindow(popup.PopupWindow): self._update() self._restore_state() - def _on_tournament_query_response(self, data: Optional[Dict[str, + def _on_tournament_query_response(self, data: Optional[dict[str, Any]]) -> None: accounts = ba.app.accounts self._running_query = False diff --git a/assets/src/ba_data/python/bastd/ui/tournamentscores.py b/assets/src/ba_data/python/bastd/ui/tournamentscores.py index e162b47b..ec704d93 100644 --- a/assets/src/ba_data/python/bastd/ui/tournamentscores.py +++ b/assets/src/ba_data/python/bastd/ui/tournamentscores.py @@ -11,7 +11,7 @@ import ba from bastd.ui import popup as popup_ui if TYPE_CHECKING: - from typing import Any, Tuple, Sequence, Callable, Dict, Optional, List + from typing import Any, Sequence, Callable, Optional class TournamentScoresWindow(popup_ui.PopupWindow): @@ -20,9 +20,9 @@ class TournamentScoresWindow(popup_ui.PopupWindow): def __init__(self, tournament_id: str, tournament_activity: ba.GameActivity = None, - position: Tuple[float, float] = (0.0, 0.0), + position: tuple[float, float] = (0.0, 0.0), scale: float = None, - offset: Tuple[float, float] = (0.0, 0.0), + offset: tuple[float, float] = (0.0, 0.0), tint_color: Sequence[float] = (1.0, 1.0, 1.0), tint2_color: Sequence[float] = (1.0, 1.0, 1.0), selected_character: str = None, @@ -107,11 +107,11 @@ class TournamentScoresWindow(popup_ui.PopupWindow): callback=ba.WeakCall( self._on_tournament_query_response)) - def _on_tournament_query_response(self, data: Optional[Dict[str, + def _on_tournament_query_response(self, data: Optional[dict[str, Any]]) -> None: if data is not None: # this used to be the whole payload - data_t: List[Dict[str, Any]] = data['t'] + data_t: list[dict[str, Any]] = data['t'] # kill our loading text if we've got scores.. otherwise just # replace it with 'no scores yet' if data_t[0]['scores']: diff --git a/assets/src/ba_data/python/bastd/ui/trophies.py b/assets/src/ba_data/python/bastd/ui/trophies.py index 4763172c..4e0ceac8 100644 --- a/assets/src/ba_data/python/bastd/ui/trophies.py +++ b/assets/src/ba_data/python/bastd/ui/trophies.py @@ -10,15 +10,15 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Any, Tuple, Dict, List + from typing import Any class TrophiesWindow(popup.PopupWindow): """Popup window for viewing trophies.""" def __init__(self, - position: Tuple[float, float], - data: Dict[str, Any], + position: tuple[float, float], + data: dict[str, Any], scale: float = None): self._data = data uiscale = ba.app.ui.uiscale @@ -110,7 +110,7 @@ class TrophiesWindow(popup.PopupWindow): def _create_trophy_type_widgets(self, eq_text: str, incr: int, multi_txt: str, sub_height: int, sub_width: int, - trophy_types: List[List[str]]) -> int: + trophy_types: list[list[str]]) -> int: from ba.internal import get_trophy_string pts = 0 for i, trophy_type in enumerate(trophy_types): diff --git a/assets/src/ba_data/python/bastd/ui/watch.py b/assets/src/ba_data/python/bastd/ui/watch.py index b27a381a..c7e871e6 100644 --- a/assets/src/ba_data/python/bastd/ui/watch.py +++ b/assets/src/ba_data/python/bastd/ui/watch.py @@ -12,7 +12,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Tuple, Dict + from typing import Any, Optional class WatchWindow(ba.Window): @@ -30,7 +30,7 @@ class WatchWindow(ba.Window): # pylint: disable=too-many-statements from bastd.ui.tabs import TabRow ba.set_analytics_screen('Watch Window') - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -39,7 +39,7 @@ class WatchWindow(ba.Window): self._transition_out = 'out_right' scale_origin = None ba.app.ui.set_main_menu_location('Watch') - self._tab_data: Dict[str, Any] = {} + self._tab_data: dict[str, Any] = {} self._my_replays_scroll_width: Optional[float] = None self._my_replays_watch_replay_button: Optional[ba.Widget] = None self._scrollwidget: Optional[ba.Widget] = None diff --git a/assets/src/server/ballisticacore_server.py b/assets/src/server/ballisticacore_server.py index 9267d190..50492300 100755 --- a/assets/src/server/ballisticacore_server.py +++ b/assets/src/server/ballisticacore_server.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.8 +#!/usr/bin/env python3.9 # Released under the MIT License. See LICENSE for details. # """BallisticaCore server manager.""" @@ -28,7 +28,7 @@ from efro.error import CleanError from efro.terminal import Clr if TYPE_CHECKING: - from typing import Optional, List, Dict, Union, Tuple + from typing import Optional, Union from types import FrameType from bacommon.servermanager import ServerCommand @@ -81,7 +81,7 @@ class ServerManagerApp: self._interactive = sys.stdin.isatty() self._wrapper_shutdown_desired = False self._done = False - self._subprocess_commands: List[Union[str, ServerCommand]] = [] + self._subprocess_commands: list[Union[str, ServerCommand]] = [] self._subprocess_commands_lock = Lock() self._subprocess_force_kill_time: Optional[float] = None self._auto_restart = True @@ -251,8 +251,8 @@ class ServerManagerApp: def screenmessage(self, message: str, - color: Optional[Tuple[float, float, float]] = None, - clients: Optional[List[int]] = None) -> None: + color: Optional[tuple[float, float, float]] = None, + clients: Optional[list[int]] = None) -> None: """Display a screen-message. This will have no name attached and not show up in chat history. @@ -265,7 +265,7 @@ class ServerManagerApp: def chatmessage(self, message: str, - clients: Optional[List[int]] = None) -> None: + clients: Optional[list[int]] = None) -> None: """Send a chat message from the server. This will have the server's name attached and will be logged @@ -533,7 +533,7 @@ class ServerManagerApp: flush=True) return out - def _enable_tab_completion(self, locs: Dict) -> None: + def _enable_tab_completion(self, locs: dict) -> None: """Enable tab-completion on platforms where available (linux/mac).""" try: import readline diff --git a/ballisticacore-cmake/.idea/dictionaries/ericf.xml b/ballisticacore-cmake/.idea/dictionaries/ericf.xml index b4e73a88..680dfd01 100644 --- a/ballisticacore-cmake/.idea/dictionaries/ericf.xml +++ b/ballisticacore-cmake/.idea/dictionaries/ericf.xml @@ -4,6 +4,7 @@ NOMINMAX aabb abcdefghijklmnopqrstuvwxyz + abcdefghjkmnpqrtuvwxy abouttab absval accel @@ -51,6 +52,7 @@ anyval aosp apientry + apost appconfig appname appnameupper @@ -120,6 +122,7 @@ boostrapping bootconfig bootstrappy + bootsubprocess bouyancy bppv bresult @@ -192,6 +195,7 @@ cmath cmds cmdvals + cmodules codedata codewarrior codewarrior's @@ -271,6 +275,7 @@ dirslash dlfcn dlife + dliwk dllpath dmake dname @@ -332,6 +337,7 @@ ewww ewwww ewwwww + exargs exctype execinfo execing @@ -351,6 +357,7 @@ fastlsolve fastltsolve fbos + fcntl fdata fdirx fdiry @@ -454,6 +461,7 @@ googleplaytab gpgs gqualstr + graphlib grav grisha gstate @@ -566,12 +574,16 @@ lasti lastline lastvalid + lbzip leaderboard leaderboards lenval lgui lhalf + libbz + libbzip libutf + libuuid lightshad linearsize linearstep @@ -597,6 +609,7 @@ lsync ltypes lubyte + luuid lvec lvoid macbuild @@ -757,6 +770,7 @@ optin ortho osis + ossaudiodev osssssssssss ostype ourcode @@ -791,6 +805,7 @@ pname podcast podcasts + popd portaudio positivex positivey @@ -1055,6 +1070,7 @@ tempvec tenum testint + testinternalcapi testnode texel texqualstr @@ -1105,6 +1121,7 @@ twst typeobj typestr + tzpath uber uibounds uiid @@ -1127,6 +1144,7 @@ uppercased userspace uther + uuidmodule uuids uval uxxxx @@ -1168,6 +1186,7 @@ wdeprecated weakref weakthis + weeeird welp whaaaaaaa wheee @@ -1195,6 +1214,9 @@ xmmintrin xoffset xtweak + xxlimited + xxsubinterpreters + xxtestfuzz yclamped ydiff ydist @@ -1207,6 +1229,7 @@ zmin zoffset zomg + zoneinfo zoomable zrot diff --git a/ballisticacore-cmake/CMakeLists.txt b/ballisticacore-cmake/CMakeLists.txt index 3a9ba470..f0457266 100644 --- a/ballisticacore-cmake/CMakeLists.txt +++ b/ballisticacore-cmake/CMakeLists.txt @@ -27,12 +27,12 @@ if (APPLE) # to load a 3.X library from within it which doesn't exist. So we need # to be a bit more explicit telling it where to look. Note: this was last # tested with 3.7; should revisit sometime to make sure still applies. - execute_process(COMMAND "python3.8-config" "--prefix" + execute_process(COMMAND "python3.9-config" "--prefix" OUTPUT_VARIABLE Python_ROOT_DIR OUTPUT_STRIP_TRAILING_WHITESPACE) endif () -find_package (Python 3.8 REQUIRED EXACT COMPONENTS Development) +find_package (Python 3.9 REQUIRED EXACT COMPONENTS Development) if (HEADLESS) diff --git a/config/toolconfigsrc/pylintrc b/config/toolconfigsrc/pylintrc index cbe6f4f0..bf42b893 100644 --- a/config/toolconfigsrc/pylintrc +++ b/config/toolconfigsrc/pylintrc @@ -5,6 +5,8 @@ load-plugins=efrotools.pylintplugins persistent=no +extension-pkg-allow-list=math, readline, zlib, binascii + __EFRO_PYLINT_INIT__ [REPORTS] diff --git a/docs/ba_module.md b/docs/ba_module.md index 25acdaa2..1354e171 100644 --- a/docs/ba_module.md +++ b/docs/ba_module.md @@ -1,5 +1,5 @@ -

last updated on 2021-10-14 for Ballistica version 1.6.5 build 20393

+

last updated on 2021-10-23 for Ballistica version 1.6.5 build 20395

This page documents the Python classes and functions in the 'ba' module, which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please let me know. Happy modding!


@@ -323,7 +323,7 @@

create_display()

-

create_display(self, x: 'float', y: 'float', delay: 'float', outdelay: 'float' = None, color: 'Sequence[float]' = None, style: 'str' = 'post_game') -> 'List[ba.Actor]'

+

create_display(self, x: 'float', y: 'float', delay: 'float', outdelay: 'float' = None, color: 'Sequence[float]' = None, style: 'str' = 'post_game') -> 'list[ba.Actor]'

Create a display for the Achievement.

@@ -383,7 +383,7 @@ actually award achievements.

achievements_for_coop_level()

-

achievements_for_coop_level(self, level_name: str) -> List[Achievement]

+

achievements_for_coop_level(self, level_name: str) -> list[Achievement]

Given a level name, return achievements available for it.

@@ -439,14 +439,14 @@ actually award achievements.

players

-

List[PlayerType]

+

list[PlayerType]

The list of ba.Players in the Activity. This gets populated just before on_begin() is called and is updated automatically as players join or leave the game.

playertype

-

Type[PlayerType]

+

type[PlayerType]

The type of ba.Player this Activity is using.

@@ -458,7 +458,7 @@ join or leave the game.

settings_raw

-

Dict[str, Any]

+

dict[str, Any]

The settings dict passed in when the activity was made. This attribute is deprecated and should be avoided when possible; activities should pull all values they need from the 'settings' arg @@ -473,7 +473,7 @@ passed to the Activity __init__ call.

teams

-

List[TeamType]

+

list[TeamType]

The list of ba.Teams in the Activity. This gets populated just before before on_begin() is called and is updated automatically as players join or leave the game. (at least in free-for-all mode where every @@ -482,7 +482,7 @@ regardless of the player count).

teamtype

-

Type[TeamType]

+

type[TeamType]

The type of ba.Team this Activity is using.

@@ -939,7 +939,7 @@ likely result in errors.

ui_bounds

-

Tuple[float, float, float, float]

+

tuple[float, float, float, float]

Bounds of the 'safe' screen area in ui space.

This tuple contains: (x-min, x-max, y-min, y-max)

@@ -975,7 +975,7 @@ likely result in errors.

launch_coop_game()

-

launch_coop_game(self, game: str, force: bool = False, args: Dict = None) -> bool

+

launch_coop_game(self, game: str, force: bool = False, args: dict = None) -> bool

High level way to launch a local co-op session.

@@ -1065,7 +1065,7 @@ to resume.

builtin_keys()

-

builtin_keys(self) -> List[str]

+

builtin_keys(self) -> list[str]

Return the list of valid key names recognized by ba.AppConfig.

@@ -1134,7 +1134,7 @@ manually.

Methods:

create_default_game_settings_ui()

-

create_default_game_settings_ui(self, gameclass: Type[ba.GameActivity], sessiontype: Type[ba.Session], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None]) -> None

+

create_default_game_settings_ui(self, gameclass: type[ba.GameActivity], sessiontype: type[ba.Session], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None]) -> None

Launch a UI to configure the given game config.

@@ -1274,12 +1274,12 @@ mycall()
configdict, levels, name, sequential

configdict

-

Dict[str, Any]

+

dict[str, Any]

Return the live config dict for this campaign.

levels

-

List[ba.Level]

+

list[ba.Level]

The list of ba.Levels in the Campaign.

@@ -1366,7 +1366,7 @@ mycall()

Methods:

<constructor>

-

ba.ChoiceSetting(name: str, default: Any, choices: List[Tuple[str, Any]])

+

ba.ChoiceSetting(name: str, default: Any, choices: list[tuple[str, Any]])

@@ -1672,7 +1672,7 @@ start_long_action(callback_when_done=ba.ContextC

playertype

-

Type[PlayerType]

+

type[PlayerType]

The type of ba.Player this Activity is using.

@@ -1691,7 +1691,7 @@ start_long_action(callback_when_done=ba.ContextC

teamtype

-

Type[TeamType]

+

type[TeamType]

The type of ba.Team this Activity is using.

@@ -1752,7 +1752,7 @@ and it should begin its actual game logic.

supports_session_type()

<class method>
-

supports_session_type(sessiontype: Type[ba.Session]) -> bool

+

supports_session_type(sessiontype: type[ba.Session]) -> bool

Return whether this game supports the provided Session type.

@@ -1804,7 +1804,7 @@ there is no associated Campaign.

get_custom_menu_entries()

-

get_custom_menu_entries(self) -> List[Dict[str, Any]]

+

get_custom_menu_entries(self) -> list[dict[str, Any]]

Subclasses can override this to provide custom menu entries.

@@ -1918,7 +1918,7 @@ the data object is requested and when it's value is accessed.

<constructor>, get_hash()

<constructor>

-

ba.Dependency(cls: Type[T], config: Any = None)

+

ba.Dependency(cls: type[T], config: Any = None)

Instantiate a Dependency given a ba.DependencyComponent type.

@@ -1960,7 +1960,7 @@ influence dependency calculation for the target class.

get_dynamic_deps()

<class method>
-

get_dynamic_deps(config: Any = None) -> List[Dependency]

+

get_dynamic_deps(config: Any = None) -> list[Dependency]

Return any dynamically-calculated deps for this component/config.

@@ -1983,7 +1983,7 @@ on the dep config value. (for instance a map required by a game type)

Attributes:

deps

-

List[ba.Dependency]

+

list[ba.Dependency]

The list of missing dependencies causing this error.

@@ -1993,7 +1993,7 @@ on the dep config value. (for instance a map required by a game type)

Methods Defined or Overridden:

<constructor>

-

ba.DependencyError(deps: List[ba.Dependency])

+

ba.DependencyError(deps: list[ba.Dependency])

@@ -2031,7 +2031,7 @@ on the dep config value. (for instance a map required by a game type)

get_asset_package_ids()

-

get_asset_package_ids(self) -> Set[str]

+

get_asset_package_ids(self) -> set[str]

Return the set of asset-package-ids required by this dep-set.

@@ -2291,7 +2291,7 @@ its time with lingering corpses, sound effects, etc.

Methods:

<constructor>

-

ba.FloatChoiceSetting(name: str, default: float, choices: List[Tuple[str, float]])

+

ba.FloatChoiceSetting(name: str, default: float, choices: list[tuple[str, float]])

@@ -2340,7 +2340,7 @@ its time with lingering corpses, sound effects, etc.

get_ffa_point_awards()

-

get_ffa_point_awards(self) -> Dict[int, int]

+

get_ffa_point_awards(self) -> dict[int, int]

Return the number of points awarded for different rankings.

@@ -2410,7 +2410,7 @@ its time with lingering corpses, sound effects, etc.

playertype

-

Type[PlayerType]

+

type[PlayerType]

The type of ba.Player this Activity is using.

@@ -2429,7 +2429,7 @@ its time with lingering corpses, sound effects, etc.

teamtype

-

Type[TeamType]

+

type[TeamType]

The type of ba.Team this Activity is using.

@@ -2454,7 +2454,7 @@ and calls either end_game or continue_game depending on the result

create_settings_ui()

<class method>
-

create_settings_ui(sessiontype: Type[ba.Session], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None]) -> None

+

create_settings_ui(sessiontype: type[ba.Session], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None]) -> None

Launch an in-game UI to configure settings for a game type.

@@ -2496,7 +2496,7 @@ yet; this way things like the standard time-limit

get_available_settings()

<class method>
-

get_available_settings(sessiontype: Type[ba.Session]) -> List[ba.Setting]

+

get_available_settings(sessiontype: type[ba.Session]) -> list[ba.Setting]

Return a list of settings relevant to this game type when running under the provided session type.

@@ -2504,7 +2504,7 @@ running under the provided session type.

get_description()

<class method>
-

get_description(sessiontype: Type[ba.Session]) -> str

+

get_description(sessiontype: type[ba.Session]) -> str

Get a str description of this game type.

@@ -2515,7 +2515,7 @@ can override this method.

get_description_display_string()

<class method>
-

get_description_display_string(sessiontype: Type[ba.Session]) -> ba.Lstr

+

get_description_display_string(sessiontype: type[ba.Session]) -> ba.Lstr

Return a translated version of get_description().

@@ -2524,7 +2524,7 @@ can override this method.

get_display_string()

<class method>
-

get_display_string(settings: Optional[Dict] = None) -> ba.Lstr

+

get_display_string(settings: Optional[dict] = None) -> ba.Lstr

Return a descriptive name for this game/settings combo.

@@ -2602,7 +2602,7 @@ of the screen, so it should be as concise as possible.

get_settings_display_string()

<class method>
-

get_settings_display_string(config: Dict[str, Any]) -> ba.Lstr

+

get_settings_display_string(config: dict[str, Any]) -> ba.Lstr

Given a game config dict, return a short description for it.

@@ -2612,7 +2612,7 @@ is up next in a series.

get_supported_maps()

<class method>
-

get_supported_maps(sessiontype: Type[ba.Session]) -> List[str]

+

get_supported_maps(sessiontype: type[ba.Session]) -> list[str]

Called by the default ba.GameActivity.create_settings_ui() implementation; should return a list of map names valid @@ -2748,7 +2748,7 @@ If the time-limit expires, end_game() will be called.

supports_session_type()

<class method>
-

supports_session_type(sessiontype: Type[ba.Session]) -> bool

+

supports_session_type(sessiontype: type[ba.Session]) -> bool

Return whether this game supports the provided Session type.

@@ -2775,7 +2775,7 @@ Results for a completed game.

playerinfos

-

List[ba.PlayerInfo]

+

list[ba.PlayerInfo]

Get info about the players represented by the results.

@@ -2790,12 +2790,12 @@ Results for a completed game.

sessionteams

-

List[ba.SessionTeam]

+

list[ba.SessionTeam]

Return all ba.SessionTeams in the results.

winnergroups

-

List[WinnerGroup]

+

list[WinnerGroup]

Get an ordered list of winner groups.

@@ -2886,7 +2886,7 @@ Results for a completed game.

get_source_player()

-

get_source_player(self, playertype: Type[PlayerType]) -> Optional[PlayerType]

+

get_source_player(self, playertype: type[PlayerType]) -> Optional[PlayerType]

Return the source-player if one exists and is the provided type.

@@ -3077,7 +3077,7 @@ prefs, etc.

Methods:

<constructor>

-

ba.IntChoiceSetting(name: str, default: int, choices: List[Tuple[str, int]])

+

ba.IntChoiceSetting(name: str, default: int, choices: list[tuple[str, int]])

@@ -3112,7 +3112,7 @@ prefs, etc.

chars, name, nums, pages

chars

-

List[Tuple[str, ...]]

+

list[tuple[str, ...]]

Used for row/column lengths.

@@ -3122,12 +3122,12 @@ prefs, etc.

nums

-

Tuple[str, ...]

+

tuple[str, ...]

The 'num' page.

pages

-

Dict[str, Tuple[str, ...]]

+

dict[str, tuple[str, ...]]

Extra chars like emojis.

@@ -3147,7 +3147,7 @@ prefs, etc.

available_languages, language, locale

available_languages

-

List[str]

+

list[str]

A list of all available languages.

Note that languages that may be present in game assets but which @@ -3239,7 +3239,7 @@ prefs, etc.

gametype

-

Type[ba.GameActivity]

+

type[ba.GameActivity]

The type of game used for this Level.

@@ -3271,7 +3271,7 @@ prefs, etc.

<constructor>, get_high_scores(), get_preview_texture(), get_score_version_string(), get_settings(), set_complete(), set_high_scores(), set_rating()

<constructor>

-

ba.Level(name: str, gametype: Type[ba.GameActivity], settings: dict, preview_texture_name: str, displayname: str = None)

+

ba.Level(name: str, gametype: type[ba.GameActivity], settings: dict, preview_texture_name: str, displayname: str = None)

get_high_scores()

@@ -3296,7 +3296,7 @@ can be changed to separate its new high score lists/etc. from the old.

get_settings()

-

get_settings(self) -> Dict[str, Any]

+

get_settings(self) -> dict[str, Any]

Returns the settings for this Level.

@@ -3308,7 +3308,7 @@ can be changed to separate its new high score lists/etc. from the old.

set_high_scores()

-

set_high_scores(self, high_scores: Dict) -> None

+

set_high_scores(self, high_scores: dict) -> None

Set high scores for this level.

@@ -3333,7 +3333,7 @@ can be changed to separate its new high score lists/etc. from the old.

sessionteams, use_team_colors

sessionteams

-

List[ba.SessionTeam]

+

list[ba.SessionTeam]

ba.SessionTeams available in this lobby.

@@ -3374,7 +3374,7 @@ Intended for use in initial joining-screens.

get_choosers()

-

get_choosers(self) -> List[Chooser]

+

get_choosers(self) -> list[Chooser]

Return the lobby's current choosers.

@@ -3558,7 +3558,7 @@ even if myactor is set to None.

get_def_bound_box()

-

get_def_bound_box(self, name: str) -> Optional[Tuple[float, float, float, float, float, float]]

+

get_def_bound_box(self, name: str) -> Optional[tuple[float, float, float, float, float, float]]

Return a 6 member bounds tuple or None if it is not defined.

@@ -3570,7 +3570,7 @@ even if myactor is set to None.

get_def_points()

-

get_def_points(self, name: str) -> List[Sequence[float]]

+

get_def_points(self, name: str) -> list[Sequence[float]]

Return a list of named points.

@@ -3607,7 +3607,7 @@ as far from these players as possible.

get_play_types()

<class method>
-

get_play_types() -> List[str]

+

get_play_types() -> list[str]

Return valid play types for this map.

@@ -3706,7 +3706,7 @@ add_actions() method to define what the material does.

Methods:

add_actions()

-

add_actions(actions: Tuple, conditions: Optional[Tuple] = None) +

add_actions(actions: tuple, conditions: Optional[tuple] = None) -> None

Add one or more actions to the material, optionally with conditions.

@@ -3861,7 +3861,7 @@ m.add_actions(conditions=('they_have_material',

get_game_types()

-

get_game_types(self) -> List[Type[ba.GameActivity]]

+

get_game_types(self) -> list[type[ba.GameActivity]]

Return available game types.

@@ -3873,7 +3873,7 @@ m.add_actions(conditions=('they_have_material',

get_unowned_game_types()

-

get_unowned_game_types(self) -> Set[Type[ba.GameActivity]]

+

get_unowned_game_types(self) -> set[type[ba.GameActivity]]

Return present game types not owned by the current account.

@@ -4114,7 +4114,7 @@ signify that the default soundtrack should be used..

do_play_music()

-

do_play_music(self, musictype: Union[MusicType, str, None], continuous: bool = False, mode: MusicPlayMode = <MusicPlayMode.REGULAR: regular>, testsoundtrack: Dict[str, Any] = None) -> None

+

do_play_music(self, musictype: Union[MusicType, str, None], continuous: bool = False, mode: MusicPlayMode = <MusicPlayMode.REGULAR: regular>, testsoundtrack: dict[str, Any] = None) -> None

Plays the requested music type/mode.

@@ -4290,7 +4290,7 @@ the right thing both for Node objects and values of None.

getdelegate()

-

getdelegate(type: Type, doraise: bool = False) -> <varies>

+

getdelegate(type: type, doraise: bool = False) -> <varies>

Return the node's current delegate object if it matches a certain type.

@@ -4552,7 +4552,7 @@ even if myactor is set to None.

assigninput(), exists(), get_icon(), getname(), is_alive(), on_expire(), resetinput()

assigninput()

-

assigninput(self, inputtype: Union[ba.InputType, Tuple[ba.InputType, ...]], call: Callable) -> None

+

assigninput(self, inputtype: Union[ba.InputType, tuple[ba.InputType, ...]], call: Callable) -> None

assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]], call: Callable) -> None

@@ -4575,9 +4575,9 @@ the right thing both for Player objects and values of None.

get_icon()

-

get_icon(self) -> Dict[str, Any]

+

get_icon(self) -> dict[str, Any]

-

get_icon() -> Dict[str, Any]

+

get_icon() -> dict[str, Any]

Returns the character's icon (images, colors, etc contained in a dict)

@@ -4653,7 +4653,7 @@ If False, they left the game or the round ended.

getkillerplayer()

-

getkillerplayer(self, playertype: Type[PlayerType]) -> Optional[PlayerType]

+

getkillerplayer(self, playertype: type[PlayerType]) -> Optional[PlayerType]

Return the ba.Player responsible for the killing, if any.

@@ -4661,7 +4661,7 @@ If False, they left the game or the round ended.

getplayer()

-

getplayer(self, playertype: Type[PlayerType]) -> PlayerType

+

getplayer(self, playertype: type[PlayerType]) -> PlayerType

Return the ba.Player that died.

@@ -4749,7 +4749,7 @@ the type-checker properly identifies the returned value as one.

get_icon()

-

get_icon(self) -> Dict[str, Any]

+

get_icon(self) -> dict[str, Any]

Get the icon for this instance's player.

@@ -5123,7 +5123,7 @@ to proceed past the initial joining screen.

sessionplayers

-

List[ba.SessionPlayer]

+

list[ba.SessionPlayer]

All ba.SessionPlayers in the Session. Most things should use the list of ba.Players in ba.Activity; not this. Some players, such as those who have not yet selected a character, will only be @@ -5131,7 +5131,7 @@ found on this list.

sessionteams

-

List[ba.SessionTeam]

+

list[ba.SessionTeam]

All the ba.SessionTeams in the Session. Most things should use the list of ba.Teams in ba.Activity; not this.

@@ -5192,7 +5192,7 @@ will replace the old.

get_custom_menu_entries()

-

get_custom_menu_entries(self) -> List[Dict[str, Any]]

+

get_custom_menu_entries(self) -> list[dict[str, Any]]

Subclasses can override this to provide custom menu entries.

@@ -5357,7 +5357,7 @@ is still in its lobby selecting a team/etc. then a
assigninput(), exists(), get_account_id(), get_icon(), getname(), remove_from_game(), resetinput(), setname()

assigninput()

-

assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]], +

assigninput(type: Union[ba.InputType, tuple[ba.InputType, ...]], call: Callable) -> None

Set the python callable to be run for one or more types of input.

@@ -5381,7 +5381,7 @@ joins (while verification occurs).

get_icon()

-

get_icon() -> Dict[str, Any]

+

get_icon() -> dict[str, Any]

Returns the character's icon (images, colors, etc contained in a dict)

@@ -5441,7 +5441,7 @@ other players.

color, customdata, id, name, players

color

-

Tuple[float, ...]

+

tuple[float, ...]

The team's color.

@@ -5464,7 +5464,7 @@ of the session.

players

-

List[ba.SessionPlayer]

+

list[ba.SessionPlayer]

The list of ba.SessionPlayers on the team.

@@ -5698,7 +5698,7 @@ of the session.

get_records()

-

get_records(self) -> Dict[str, ba.PlayerRecord]

+

get_records(self) -> dict[str, ba.PlayerRecord]

Get PlayerRecord corresponding to still-existing players.

@@ -5787,7 +5787,7 @@ of the session.

manual_init(), on_expire()

manual_init()

-

manual_init(self, team_id: int, name: Union[ba.Lstr, str], color: Tuple[float, ...]) -> None

+

manual_init(self, team_id: int, name: Union[ba.Lstr, str], color: tuple[float, ...]) -> None

Manually init a team for uses such as bots.

@@ -5846,7 +5846,7 @@ of the session.

playertype

-

Type[PlayerType]

+

type[PlayerType]

The type of ba.Player this Activity is using.

@@ -5865,7 +5865,7 @@ of the session.

teamtype

-

Type[TeamType]

+

type[TeamType]

The type of ba.Team this Activity is using.

@@ -5921,7 +5921,7 @@ on the ba.Player and their supports_session_type()
<class method>
-

supports_session_type(sessiontype: Type[ba.Session]) -> bool

+

supports_session_type(sessiontype: type[ba.Session]) -> bool

Class method override; returns True for ba.DualTeamSessions and ba.FreeForAllSessions; @@ -6331,13 +6331,13 @@ the right thing both for Widget objects and values of None.

get_children()

-

get_children() -> List[ba.Widget]

+

get_children() -> list[ba.Widget]

Returns any child Widgets of this Widget.

get_screen_space_center()

-

get_screen_space_center() -> Tuple[float, float]

+

get_screen_space_center() -> tuple[float, float]

Returns the coords of the Widget center relative to the center of the screen. This can be useful for placing pop-up windows and other special @@ -6394,7 +6394,7 @@ widgets.


ba.animate()

-

animate(node: ba.Node, attr: str, keys: Dict[float, float], loop: bool = False, offset: float = 0, timetype: ba.TimeType = <TimeType.SIM: 0>, timeformat: ba.TimeFormat = <TimeFormat.SECONDS: 0>, suppress_format_warning: bool = False) -> ba.Node

+

animate(node: ba.Node, attr: str, keys: dict[float, float], loop: bool = False, offset: float = 0, timetype: ba.TimeType = <TimeType.SIM: 0>, timeformat: ba.TimeFormat = <TimeFormat.SECONDS: 0>, suppress_format_warning: bool = False) -> ba.Node

Animate values on a target ba.Node.

@@ -6409,7 +6409,7 @@ but timeformat can also be set to MILLISECONDS to recreate the old behavior

ba.animate_array()

-

animate_array(node: ba.Node, attr: str, size: int, keys: Dict[float, Sequence[float]], loop: bool = False, offset: float = 0, timetype: ba.TimeType = <TimeType.SIM: 0>, timeformat: ba.TimeFormat = <TimeFormat.SECONDS: 0>, suppress_format_warning: bool = False) -> None

+

animate_array(node: ba.Node, attr: str, size: int, keys: dict[float, Sequence[float]], loop: bool = False, offset: float = 0, timetype: ba.TimeType = <TimeType.SIM: 0>, timeformat: ba.TimeFormat = <TimeFormat.SECONDS: 0>, suppress_format_warning: bool = False) -> None

Animate an array of values on a target ba.Node.

@@ -6724,7 +6724,7 @@ If doraise is False, None will be returned instead in that case.


ba.getclass()

-

getclass(name: str, subclassof: Type[T]) -> Type[T]

+

getclass(name: str, subclassof: type[T]) -> type[T]

Given a full class name such as foo.bar.MyClass, return the class.

@@ -6759,7 +6759,7 @@ in the background if necessary.


ba.getmaps()

-

getmaps(playtype: str) -> List[str]

+

getmaps(playtype: str) -> list[str]

Return a list of ba.Map types supporting a playtype str.

@@ -6948,7 +6948,7 @@ so in most cases you can just use that.


ba.newactivity()

-

newactivity(activity_type: Type[ba.Activity], +

newactivity(activity_type: type[ba.Activity], settings: dict = None) -> ba.Activity

Instantiates a ba.Activity given a type object.

@@ -6984,7 +6984,7 @@ object dies. 'owner' can be another node or a ba.Actor

ba.normalized_color()

-

normalized_color(color: Sequence[float]) -> Tuple[float, ...]

+

normalized_color(color: Sequence[float]) -> tuple[float, ...]

Scale a color so its largest value is 1; useful for coloring lights.

@@ -7110,7 +7110,7 @@ are applied to the Widget.


ba.safecolor()

safecolor(color: Sequence[float], target_intensity: float = 0.6) - -> Tuple[float, ...]

+ -> tuple[float, ...]

Given a color tuple, return a color safe to display as text.

@@ -7123,7 +7123,7 @@ dark colors, etc.

ba.screenmessage()

screenmessage(message: Union[str, ba.Lstr], color: Sequence[float] = None, top: bool = False, - image: Dict[str, Any] = None, log: bool = False, + image: dict[str, Any] = None, log: bool = False, clients: Sequence[int] = None, transient: bool = False) -> None

Print a message to the local client's screen, in a given color.

diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index 6d97a0db..d6fd206a 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -21,7 +21,7 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20393; +const int kAppBuildNumber = 20395; const char* kAppVersion = "1.6.5"; // Our standalone globals. diff --git a/src/ballistica/platform/windows/platform_windows.cc b/src/ballistica/platform/windows/platform_windows.cc index f7eb2b69..2948c519 100644 --- a/src/ballistica/platform/windows/platform_windows.cc +++ b/src/ballistica/platform/windows/platform_windows.cc @@ -18,9 +18,9 @@ #pragma comment(lib, "ws2_32.lib") #pragma comment(lib, "iphlpapi.lib") #if BA_DEBUG_BUILD -#pragma comment(lib, "python38_d.lib") +#pragma comment(lib, "python39_d.lib") #else -#pragma comment(lib, "python38.lib") +#pragma comment(lib, "python39.lib") #endif #if !BA_HEADLESS_BUILD diff --git a/src/ballistica/python/class/python_class_material.cc b/src/ballistica/python/class/python_class_material.cc index 16ac06a9..fb6717e1 100644 --- a/src/ballistica/python/class/python_class_material.cc +++ b/src/ballistica/python/class/python_class_material.cc @@ -275,7 +275,7 @@ auto PythonClassMaterial::AddActions(PythonClassMaterial* self, PyObject* args, PyMethodDef PythonClassMaterial::tp_methods[] = { {"add_actions", (PyCFunction)AddActions, METH_VARARGS | METH_KEYWORDS, - "add_actions(actions: Tuple, conditions: Optional[Tuple] = None)\n" + "add_actions(actions: tuple, conditions: Optional[tuple] = None)\n" " -> None\n" "\n" "Add one or more actions to the material, optionally with conditions.\n" diff --git a/src/ballistica/python/class/python_class_node.cc b/src/ballistica/python/class/python_class_node.cc index bc3b5df6..2b0d74df 100644 --- a/src/ballistica/python/class/python_class_node.cc +++ b/src/ballistica/python/class/python_class_node.cc @@ -402,7 +402,7 @@ PyMethodDef PythonClassNode::tp_methods[] = { "\n" "Return the name assigned to a Node; used mainly for debugging"}, {"getdelegate", (PyCFunction)GetDelegate, METH_VARARGS | METH_KEYWORDS, - "getdelegate(type: Type, doraise: bool = False) -> \n" + "getdelegate(type: type, doraise: bool = False) -> \n" "\n" "Return the node's current delegate object if it matches a certain type.\n" "\n" diff --git a/src/ballistica/python/class/python_class_session_player.cc b/src/ballistica/python/class/python_class_session_player.cc index cefc59f9..d1a45162 100644 --- a/src/ballistica/python/class/python_class_session_player.cc +++ b/src/ballistica/python/class/python_class_session_player.cc @@ -696,7 +696,7 @@ PyMethodDef PythonClassSessionPlayer::tp_methods[] = { "\n" "Return whether the underlying player is still in the game."}, {"assigninput", (PyCFunction)AssignInputCall, METH_VARARGS | METH_KEYWORDS, - "assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]],\n" + "assigninput(type: Union[ba.InputType, tuple[ba.InputType, ...]],\n" " call: Callable) -> None\n" "\n" "Set the python callable to be run for one or more types of input."}, @@ -732,11 +732,11 @@ PyMethodDef PythonClassSessionPlayer::tp_methods[] = { "\n" "(internal)"}, {"get_icon", (PyCFunction)GetIcon, METH_NOARGS, - "get_icon() -> Dict[str, Any]\n" + "get_icon() -> dict[str, Any]\n" "\n" "Returns the character's icon (images, colors, etc contained in a dict)"}, {"get_icon_info", (PyCFunction)GetIconInfo, METH_NOARGS, - "get_icon_info() -> Dict[str, Any]\n" + "get_icon_info() -> dict[str, Any]\n" "\n" "(internal)"}, {"__dir__", (PyCFunction)Dir, METH_NOARGS, diff --git a/src/ballistica/python/class/python_class_widget.cc b/src/ballistica/python/class/python_class_widget.cc index 92c60bc1..11d35d6b 100644 --- a/src/ballistica/python/class/python_class_widget.cc +++ b/src/ballistica/python/class/python_class_widget.cc @@ -256,11 +256,11 @@ PyMethodDef PythonClassWidget::tp_methods[] = { "\n" "Activates a widget; the same as if it had been clicked."}, {"get_children", (PyCFunction)GetChildren, METH_NOARGS, - "get_children() -> List[ba.Widget]\n" + "get_children() -> list[ba.Widget]\n" "\n" "Returns any child Widgets of this Widget."}, {"get_screen_space_center", (PyCFunction)GetScreenSpaceCenter, METH_NOARGS, - "get_screen_space_center() -> Tuple[float, float]\n" + "get_screen_space_center() -> tuple[float, float]\n" "\n" "Returns the coords of the Widget center relative to the center of the\n" "screen. This can be useful for placing pop-up windows and other special\n" diff --git a/src/ballistica/python/methods/python_methods_app.cc b/src/ballistica/python/methods/python_methods_app.cc index dcbca8f6..a2ae06a0 100644 --- a/src/ballistica/python/methods/python_methods_app.cc +++ b/src/ballistica/python/methods/python_methods_app.cc @@ -998,7 +998,7 @@ auto PythonMethodsApp::GetMethods() -> std::vector { METH_VARARGS | METH_KEYWORDS, "screenmessage(message: Union[str, ba.Lstr],\n" " color: Sequence[float] = None, top: bool = False,\n" - " image: Dict[str, Any] = None, log: bool = False,\n" + " image: dict[str, Any] = None, log: bool = False,\n" " clients: Sequence[int] = None, transient: bool = False) -> None\n" "\n" "Print a message to the local client's screen, in a given color.\n" @@ -1155,7 +1155,7 @@ auto PythonMethodsApp::GetMethods() -> std::vector { {"newactivity", (PyCFunction)PyNewActivity, METH_VARARGS | METH_KEYWORDS, - "newactivity(activity_type: Type[ba.Activity],\n" + "newactivity(activity_type: type[ba.Activity],\n" " settings: dict = None) -> ba.Activity\n" "\n" "Instantiates a ba.Activity given a type object.\n" @@ -1201,7 +1201,7 @@ auto PythonMethodsApp::GetMethods() -> std::vector { {"new_host_session", (PyCFunction)PyNewHostSession, METH_VARARGS | METH_KEYWORDS, - "new_host_session(sessiontype: Type[ba.Session],\n" + "new_host_session(sessiontype: type[ba.Session],\n" " benchmark_type: str = None) -> None\n" "\n" "(internal)"}, diff --git a/src/ballistica/python/methods/python_methods_gameplay.cc b/src/ballistica/python/methods/python_methods_gameplay.cc index d4d8825e..d5f63310 100644 --- a/src/ballistica/python/methods/python_methods_gameplay.cc +++ b/src/ballistica/python/methods/python_methods_gameplay.cc @@ -652,7 +652,7 @@ auto PythonMethodsGameplay::GetMethods() -> std::vector { {"get_game_roster", (PyCFunction)PyGetGameRoster, METH_VARARGS | METH_KEYWORDS, - "get_game_roster() -> List[Dict[str, Any]]\n" + "get_game_roster() -> list[dict[str, Any]]\n" "\n" "(internal)"}, @@ -667,7 +667,7 @@ auto PythonMethodsGameplay::GetMethods() -> std::vector { {"set_map_bounds", (PyCFunction)PySetMapBounds, METH_VARARGS | METH_KEYWORDS, - "set_map_bounds(bounds: Tuple[float, float, float, float, float, " + "set_map_bounds(bounds: tuple[float, float, float, float, float, " "float])\n" " -> None\n" "\n" diff --git a/src/ballistica/python/methods/python_methods_graphics.cc b/src/ballistica/python/methods/python_methods_graphics.cc index debe7a4c..8e642ec9 100644 --- a/src/ballistica/python/methods/python_methods_graphics.cc +++ b/src/ballistica/python/methods/python_methods_graphics.cc @@ -225,7 +225,7 @@ auto PyGetDisplayResolution(PyObject* self, PyObject* args) -> PyObject* { auto PythonMethodsGraphics::GetMethods() -> std::vector { return { {"get_display_resolution", PyGetDisplayResolution, METH_VARARGS, - "get_display_resolution() -> Optional[Tuple[int, int]]\n" + "get_display_resolution() -> Optional[tuple[int, int]]\n" "\n" "(internal)\n" "\n" @@ -290,7 +290,7 @@ auto PythonMethodsGraphics::GetMethods() -> std::vector { {"safecolor", (PyCFunction)PySafeColor, METH_VARARGS | METH_KEYWORDS, "safecolor(color: Sequence[float], target_intensity: float = 0.6)\n" - " -> Tuple[float, ...]\n" + " -> tuple[float, ...]\n" "\n" "Given a color tuple, return a color safe to display as text.\n" "\n" diff --git a/src/ballistica/python/methods/python_methods_media.cc b/src/ballistica/python/methods/python_methods_media.cc index 5c438ba0..cac8d070 100644 --- a/src/ballistica/python/methods/python_methods_media.cc +++ b/src/ballistica/python/methods/python_methods_media.cc @@ -412,7 +412,7 @@ auto PythonMethodsMedia::GetMethods() -> std::vector { {"mac_music_app_get_playlists", (PyCFunction)PyMacMusicAppGetPlaylists, METH_VARARGS | METH_KEYWORDS, - "mac_music_app_get_playlists() -> List[str]\n" + "mac_music_app_get_playlists() -> list[str]\n" "\n" "(internal)"}, diff --git a/src/ballistica/python/methods/python_methods_system.cc b/src/ballistica/python/methods/python_methods_system.cc index ed2d65cd..0a64f147 100644 --- a/src/ballistica/python/methods/python_methods_system.cc +++ b/src/ballistica/python/methods/python_methods_system.cc @@ -890,8 +890,8 @@ auto PythonMethodsSystem::GetMethods() -> std::vector { "Returns whether we're running the ouya-specific version"}, {"set_internal_language_keys", PySetInternalLanguageKeys, METH_VARARGS, - "set_internal_language_keys(listobj: List[Tuple[str, str]],\n" - " random_names_list: List[Tuple[str, str]]) -> None\n" + "set_internal_language_keys(listobj: list[tuple[str, str]],\n" + " random_names_list: list[tuple[str, str]]) -> None\n" "\n" "(internal)"}, @@ -987,7 +987,7 @@ auto PythonMethodsSystem::GetMethods() -> std::vector { {"get_appconfig_builtin_keys", (PyCFunction)PyAppConfigGetBuiltinKeys, METH_VARARGS | METH_KEYWORDS, - "get_appconfig_builtin_keys() -> List[str]\n" + "get_appconfig_builtin_keys() -> list[str]\n" "\n" "(internal)"}, diff --git a/src/ballistica/python/methods/python_methods_ui.cc b/src/ballistica/python/methods/python_methods_ui.cc index 5aa77f39..ee0ac6f7 100644 --- a/src/ballistica/python/methods/python_methods_ui.cc +++ b/src/ballistica/python/methods/python_methods_ui.cc @@ -2372,7 +2372,7 @@ auto PythonMethodsUI::GetMethods() -> std::vector { {"get_chat_messages", (PyCFunction)PyGetChatMessages, METH_VARARGS | METH_KEYWORDS, - "get_chat_messages() -> List[str]\n" + "get_chat_messages() -> list[str]\n" "\n" "(internal)"}, @@ -2456,7 +2456,7 @@ auto PythonMethodsUI::GetMethods() -> std::vector { "A workaround for some unintentional backgrounding that occurs on mac"}, {"uibounds", (PyCFunction)PyUIBounds, METH_VARARGS | METH_KEYWORDS, - "uibounds() -> Tuple[float, float, float, float]\n" + "uibounds() -> tuple[float, float, float, float]\n" "\n" "(internal)\n" "\n" diff --git a/src/ballistica/python/python.cc b/src/ballistica/python/python.cc index 5ed6f336..86ab60f4 100644 --- a/src/ballistica/python/python.cc +++ b/src/ballistica/python/python.cc @@ -945,8 +945,8 @@ void Python::Reset(bool do_init) { BA_PRECONDITION(main_dict_ = PyModule_GetDict(m)); const char* ver = Py_GetVersion(); - if (strncmp(ver, "3.8", 3) != 0) { - throw Exception("We require Python 3.8.x; instead found " + if (strncmp(ver, "3.9", 3) != 0) { + throw Exception("We require Python 3.9.x; instead found " + std::string(ver)); } diff --git a/src/external/windows/include/python/Python-ast.h b/src/external/windows/include/python/Python-ast.h index 9e7a621c..dfa0b1aa 100755 --- a/src/external/windows/include/python/Python-ast.h +++ b/src/external/windows/include/python/Python-ast.h @@ -6,6 +6,7 @@ extern "C" { #endif +#ifndef Py_LIMITED_API #include "asdl.h" #undef Yield /* undefine macro conflicting with */ @@ -16,10 +17,7 @@ typedef struct _stmt *stmt_ty; typedef struct _expr *expr_ty; -typedef enum _expr_context { Load=1, Store=2, Del=3, AugLoad=4, AugStore=5, - Param=6 } expr_context_ty; - -typedef struct _slice *slice_ty; +typedef enum _expr_context { Load=1, Store=2, Del=3 } expr_context_ty; typedef enum _boolop { And=1, Or=2 } boolop_ty; @@ -50,7 +48,7 @@ typedef struct _type_ignore *type_ignore_ty; enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3, - FunctionType_kind=4, Suite_kind=5}; + FunctionType_kind=4}; struct _mod { enum _mod_kind kind; union { @@ -72,10 +70,6 @@ struct _mod { expr_ty returns; } FunctionType; - struct { - asdl_seq *body; - } Suite; - } v; }; @@ -236,7 +230,7 @@ enum _expr_kind {BoolOp_kind=1, NamedExpr_kind=2, BinOp_kind=3, UnaryOp_kind=4, YieldFrom_kind=15, Compare_kind=16, Call_kind=17, FormattedValue_kind=18, JoinedStr_kind=19, Constant_kind=20, Attribute_kind=21, Subscript_kind=22, Starred_kind=23, - Name_kind=24, List_kind=25, Tuple_kind=26}; + Name_kind=24, List_kind=25, Tuple_kind=26, Slice_kind=27}; struct _expr { enum _expr_kind kind; union { @@ -349,7 +343,7 @@ struct _expr { struct { expr_ty value; - slice_ty slice; + expr_ty slice; expr_context_ty ctx; } Subscript; @@ -373,32 +367,17 @@ struct _expr { expr_context_ty ctx; } Tuple; - } v; - int lineno; - int col_offset; - int end_lineno; - int end_col_offset; -}; - -enum _slice_kind {Slice_kind=1, ExtSlice_kind=2, Index_kind=3}; -struct _slice { - enum _slice_kind kind; - union { struct { expr_ty lower; expr_ty upper; expr_ty step; } Slice; - struct { - asdl_seq *dims; - } ExtSlice; - - struct { - expr_ty value; - } Index; - } v; + int lineno; + int col_offset; + int end_lineno; + int end_col_offset; }; struct _comprehension { @@ -448,6 +427,10 @@ struct _arg { struct _keyword { identifier arg; expr_ty value; + int lineno; + int col_offset; + int end_lineno; + int end_col_offset; }; struct _alias { @@ -482,8 +465,6 @@ mod_ty _Py_Interactive(asdl_seq * body, PyArena *arena); mod_ty _Py_Expression(expr_ty body, PyArena *arena); #define FunctionType(a0, a1, a2) _Py_FunctionType(a0, a1, a2) mod_ty _Py_FunctionType(asdl_seq * argtypes, expr_ty returns, PyArena *arena); -#define Suite(a0, a1) _Py_Suite(a0, a1) -mod_ty _Py_Suite(asdl_seq * body, PyArena *arena); #define FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) _Py_FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) stmt_ty _Py_FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq * decorator_list, expr_ty returns, string @@ -653,7 +634,7 @@ expr_ty _Py_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); #define Subscript(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Subscript(a0, a1, a2, a3, a4, a5, a6, a7) -expr_ty _Py_Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int +expr_ty _Py_Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); #define Starred(a0, a1, a2, a3, a4, a5, a6) _Py_Starred(a0, a1, a2, a3, a4, a5, a6) @@ -672,12 +653,10 @@ expr_ty _Py_List(asdl_seq * elts, expr_context_ty ctx, int lineno, int expr_ty _Py_Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -#define Slice(a0, a1, a2, a3) _Py_Slice(a0, a1, a2, a3) -slice_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena); -#define ExtSlice(a0, a1) _Py_ExtSlice(a0, a1) -slice_ty _Py_ExtSlice(asdl_seq * dims, PyArena *arena); -#define Index(a0, a1) _Py_Index(a0, a1) -slice_ty _Py_Index(expr_ty value, PyArena *arena); +#define Slice(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Slice(a0, a1, a2, a3, a4, a5, a6, a7) +expr_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena + *arena); #define comprehension(a0, a1, a2, a3, a4) _Py_comprehension(a0, a1, a2, a3, a4) comprehension_ty _Py_comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, int is_async, PyArena *arena); @@ -695,8 +674,10 @@ arguments_ty _Py_arguments(asdl_seq * posonlyargs, asdl_seq * args, arg_ty arg_ty _Py_arg(identifier arg, expr_ty annotation, string type_comment, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -#define keyword(a0, a1, a2) _Py_keyword(a0, a1, a2) -keyword_ty _Py_keyword(identifier arg, expr_ty value, PyArena *arena); +#define keyword(a0, a1, a2, a3, a4, a5, a6) _Py_keyword(a0, a1, a2, a3, a4, a5, a6) +keyword_ty _Py_keyword(identifier arg, expr_ty value, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena + *arena); #define alias(a0, a1, a2) _Py_alias(a0, a1, a2) alias_ty _Py_alias(identifier name, identifier asname, PyArena *arena); #define withitem(a0, a1, a2) _Py_withitem(a0, a1, a2) @@ -708,6 +689,7 @@ type_ignore_ty _Py_TypeIgnore(int lineno, string tag, PyArena *arena); PyObject* PyAST_mod2obj(mod_ty t); mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode); int PyAST_Check(PyObject* obj); +#endif /* !Py_LIMITED_API */ #ifdef __cplusplus } diff --git a/src/external/windows/include/python/Python.h b/src/external/windows/include/python/Python.h index 7729fb07..613453db 100755 --- a/src/external/windows/include/python/Python.h +++ b/src/external/windows/include/python/Python.h @@ -63,13 +63,22 @@ #include "pyport.h" #include "pymacro.h" -/* A convenient way for code to know if clang's memory sanitizer is enabled. */ +/* A convenient way for code to know if sanitizers are enabled. */ #if defined(__has_feature) # if __has_feature(memory_sanitizer) # if !defined(_Py_MEMORY_SANITIZER) # define _Py_MEMORY_SANITIZER # endif # endif +# if __has_feature(address_sanitizer) +# if !defined(_Py_ADDRESS_SANITIZER) +# define _Py_ADDRESS_SANITIZER +# endif +# endif +#elif defined(__GNUC__) +# if defined(__SANITIZE_ADDRESS__) +# define _Py_ADDRESS_SANITIZER +# endif #endif /* Debug-mode build with pymalloc implies PYMALLOC_DEBUG. @@ -114,12 +123,15 @@ #include "classobject.h" #include "fileobject.h" #include "pycapsule.h" +#include "code.h" +#include "pyframe.h" #include "traceback.h" #include "sliceobject.h" #include "cellobject.h" #include "iterobject.h" #include "genobject.h" #include "descrobject.h" +#include "genericaliasobject.h" #include "warnings.h" #include "weakrefobject.h" #include "structseq.h" @@ -130,6 +142,7 @@ #include "pyerrors.h" #include "cpython/initconfig.h" +#include "pythread.h" #include "pystate.h" #include "context.h" @@ -152,7 +165,6 @@ #include "pyctype.h" #include "pystrtod.h" #include "pystrcmp.h" -#include "dtoa.h" #include "fileutils.h" #include "pyfpe.h" #include "tracemalloc.h" diff --git a/src/external/windows/include/python/abstract.h b/src/external/windows/include/python/abstract.h index fd85882a..2baa6981 100755 --- a/src/external/windows/include/python/abstract.h +++ b/src/external/windows/include/python/abstract.h @@ -141,6 +141,12 @@ extern "C" { #endif +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 +/* Call a callable Python object without any arguments */ +PyAPI_FUNC(PyObject *) PyObject_CallNoArgs(PyObject *func); +#endif + + /* Call a callable Python object 'callable' with arguments given by the tuple 'args' and keywords arguments given by the dictionary 'kwargs'. @@ -696,7 +702,7 @@ PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m); (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i)) /* Return a pointer to the underlying item array for - an object retured by PySequence_Fast */ + an object returned by PySequence_Fast */ #define PySequence_Fast_ITEMS(sf) \ (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \ : ((PyTupleObject *)(sf))->ob_item) diff --git a/src/external/windows/include/python/asdl.h b/src/external/windows/include/python/asdl.h index c8e49f0a..31db708b 100755 --- a/src/external/windows/include/python/asdl.h +++ b/src/external/windows/include/python/asdl.h @@ -1,11 +1,10 @@ +#ifndef Py_LIMITED_API #ifndef Py_ASDL_H #define Py_ASDL_H typedef PyObject * identifier; typedef PyObject * string; -typedef PyObject * bytes; typedef PyObject * object; -typedef PyObject * singleton; typedef PyObject * constant; /* It would be nice if the code generated by asdl_c.py was completely @@ -44,3 +43,4 @@ asdl_int_seq *_Py_asdl_int_seq_new(Py_ssize_t size, PyArena *arena); #endif #endif /* !Py_ASDL_H */ +#endif /* Py_LIMITED_API */ diff --git a/src/external/windows/include/python/ast.h b/src/external/windows/include/python/ast.h index 27f11b7a..389113a7 100755 --- a/src/external/windows/include/python/ast.h +++ b/src/external/windows/include/python/ast.h @@ -1,3 +1,4 @@ +#ifndef Py_LIMITED_API #ifndef Py_AST_H #define Py_AST_H #ifdef __cplusplus @@ -19,19 +20,16 @@ PyAPI_FUNC(mod_ty) PyAST_FromNodeObject( PyObject *filename, PyArena *arena); -#ifndef Py_LIMITED_API - /* _PyAST_ExprAsUnicode is defined in ast_unparse.c */ PyAPI_FUNC(PyObject *) _PyAST_ExprAsUnicode(expr_ty); /* Return the borrowed reference to the first literal string in the - sequence of statemnts or NULL if it doesn't start from a literal string. + sequence of statements or NULL if it doesn't start from a literal string. Doesn't set exception. */ PyAPI_FUNC(PyObject *) _PyAST_GetDocString(asdl_seq *); -#endif /* !Py_LIMITED_API */ - #ifdef __cplusplus } #endif #endif /* !Py_AST_H */ +#endif /* !Py_LIMITED_API */ diff --git a/src/external/windows/include/python/boolobject.h b/src/external/windows/include/python/boolobject.h index 79501fd9..e9e48673 100755 --- a/src/external/windows/include/python/boolobject.h +++ b/src/external/windows/include/python/boolobject.h @@ -9,7 +9,7 @@ extern "C" { PyAPI_DATA(PyTypeObject) PyBool_Type; -#define PyBool_Check(x) (Py_TYPE(x) == &PyBool_Type) +#define PyBool_Check(x) Py_IS_TYPE(x, &PyBool_Type) /* Py_False and Py_True are the only two bools in existence. Don't forget to apply Py_INCREF() when returning either!!! */ diff --git a/src/external/windows/include/python/bytearrayobject.h b/src/external/windows/include/python/bytearrayobject.h index 0d93e06b..1ef0cf3b 100755 --- a/src/external/windows/include/python/bytearrayobject.h +++ b/src/external/windows/include/python/bytearrayobject.h @@ -18,25 +18,13 @@ extern "C" { * to contain a char pointer, not an unsigned char pointer. */ -/* Object layout */ -#ifndef Py_LIMITED_API -typedef struct { - PyObject_VAR_HEAD - Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */ - char *ob_bytes; /* Physical backing buffer */ - char *ob_start; /* Logical start inside ob_bytes */ - /* XXX(nnorwitz): should ob_exports be Py_ssize_t? */ - int ob_exports; /* How many buffer exports */ -} PyByteArrayObject; -#endif - /* Type object */ PyAPI_DATA(PyTypeObject) PyByteArray_Type; PyAPI_DATA(PyTypeObject) PyByteArrayIter_Type; /* Type check macros */ #define PyByteArray_Check(self) PyObject_TypeCheck(self, &PyByteArray_Type) -#define PyByteArray_CheckExact(self) (Py_TYPE(self) == &PyByteArray_Type) +#define PyByteArray_CheckExact(self) Py_IS_TYPE(self, &PyByteArray_Type) /* Direct API functions */ PyAPI_FUNC(PyObject *) PyByteArray_FromObject(PyObject *); @@ -46,14 +34,10 @@ PyAPI_FUNC(Py_ssize_t) PyByteArray_Size(PyObject *); PyAPI_FUNC(char *) PyByteArray_AsString(PyObject *); PyAPI_FUNC(int) PyByteArray_Resize(PyObject *, Py_ssize_t); -/* Macros, trading safety for speed */ #ifndef Py_LIMITED_API -#define PyByteArray_AS_STRING(self) \ - (assert(PyByteArray_Check(self)), \ - Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_start : _PyByteArray_empty_string) -#define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self)) - -PyAPI_DATA(char) _PyByteArray_empty_string[]; +# define Py_CPYTHON_BYTEARRAYOBJECT_H +# include "cpython/bytearrayobject.h" +# undef Py_CPYTHON_BYTEARRAYOBJECT_H #endif #ifdef __cplusplus diff --git a/src/external/windows/include/python/bytesobject.h b/src/external/windows/include/python/bytesobject.h index fd08ba6e..3643f530 100755 --- a/src/external/windows/include/python/bytesobject.h +++ b/src/external/windows/include/python/bytesobject.h @@ -27,26 +27,12 @@ functions should be applied to nil objects. /* Caching the hash (ob_shash) saves recalculation of a string's hash value. This significantly speeds up dict lookups. */ -#ifndef Py_LIMITED_API -typedef struct { - PyObject_VAR_HEAD - Py_hash_t ob_shash; - char ob_sval[1]; - - /* Invariants: - * ob_sval contains space for 'ob_size+1' elements. - * ob_sval[ob_size] == 0. - * ob_shash is the hash of the string or -1 if not computed yet. - */ -} PyBytesObject; -#endif - PyAPI_DATA(PyTypeObject) PyBytes_Type; PyAPI_DATA(PyTypeObject) PyBytesIter_Type; #define PyBytes_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS) -#define PyBytes_CheckExact(op) (Py_TYPE(op) == &PyBytes_Type) +#define PyBytes_CheckExact(op) Py_IS_TYPE(op, &PyBytes_Type) PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t); PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *); @@ -60,40 +46,9 @@ PyAPI_FUNC(char *) PyBytes_AsString(PyObject *); PyAPI_FUNC(PyObject *) PyBytes_Repr(PyObject *, int); PyAPI_FUNC(void) PyBytes_Concat(PyObject **, PyObject *); PyAPI_FUNC(void) PyBytes_ConcatAndDel(PyObject **, PyObject *); -#ifndef Py_LIMITED_API -PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t); -PyAPI_FUNC(PyObject*) _PyBytes_FormatEx( - const char *format, - Py_ssize_t format_len, - PyObject *args, - int use_bytearray); -PyAPI_FUNC(PyObject*) _PyBytes_FromHex( - PyObject *string, - int use_bytearray); -#endif PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t, const char *, Py_ssize_t, const char *); -#ifndef Py_LIMITED_API -/* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */ -PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t, - const char *, Py_ssize_t, - const char *, - const char **); -#endif - -/* Macro, trading safety for speed */ -#ifndef Py_LIMITED_API -#define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \ - (((PyBytesObject *)(op))->ob_sval)) -#define PyBytes_GET_SIZE(op) (assert(PyBytes_Check(op)),Py_SIZE(op)) -#endif - -/* _PyBytes_Join(sep, x) is like sep.join(x). sep must be PyBytesObject*, - x must be an iterable object. */ -#ifndef Py_LIMITED_API -PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x); -#endif /* Provides access to the internal data buffer and size of a string object or the default encoded version of a Unicode object. Passing @@ -108,28 +63,6 @@ PyAPI_FUNC(int) PyBytes_AsStringAndSize( strings) */ ); -/* Using the current locale, insert the thousands grouping - into the string pointed to by buffer. For the argument descriptions, - see Objects/stringlib/localeutil.h */ -#ifndef Py_LIMITED_API -PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGroupingLocale(char *buffer, - Py_ssize_t n_buffer, - char *digits, - Py_ssize_t n_digits, - Py_ssize_t min_width); - -/* Using explicit passed-in values, insert the thousands grouping - into the string pointed to by buffer. For the argument descriptions, - see Objects/stringlib/localeutil.h */ -PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer, - Py_ssize_t n_buffer, - char *digits, - Py_ssize_t n_digits, - Py_ssize_t min_width, - const char *grouping, - const char *thousands_sep); -#endif - /* Flags used by string formatting */ #define F_LJUST (1<<0) #define F_SIGN (1<<1) @@ -138,85 +71,10 @@ PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer, #define F_ZERO (1<<4) #ifndef Py_LIMITED_API -/* The _PyBytesWriter structure is big: it contains an embedded "stack buffer". - A _PyBytesWriter variable must be declared at the end of variables in a - function to optimize the memory allocation on the stack. */ -typedef struct { - /* bytes, bytearray or NULL (when the small buffer is used) */ - PyObject *buffer; - - /* Number of allocated size. */ - Py_ssize_t allocated; - - /* Minimum number of allocated bytes, - incremented by _PyBytesWriter_Prepare() */ - Py_ssize_t min_size; - - /* If non-zero, use a bytearray instead of a bytes object for buffer. */ - int use_bytearray; - - /* If non-zero, overallocate the buffer (default: 0). - This flag must be zero if use_bytearray is non-zero. */ - int overallocate; - - /* Stack buffer */ - int use_small_buffer; - char small_buffer[512]; -} _PyBytesWriter; - -/* Initialize a bytes writer - - By default, the overallocation is disabled. Set the overallocate attribute - to control the allocation of the buffer. */ -PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer); - -/* Get the buffer content and reset the writer. - Return a bytes object, or a bytearray object if use_bytearray is non-zero. - Raise an exception and return NULL on error. */ -PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer, - void *str); - -/* Deallocate memory of a writer (clear its internal buffer). */ -PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer); - -/* Allocate the buffer to write size bytes. - Return the pointer to the beginning of buffer data. - Raise an exception and return NULL on error. */ -PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer, - Py_ssize_t size); - -/* Ensure that the buffer is large enough to write *size* bytes. - Add size to the writer minimum size (min_size attribute). - - str is the current pointer inside the buffer. - Return the updated current pointer inside the buffer. - Raise an exception and return NULL on error. */ -PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer, - void *str, - Py_ssize_t size); - -/* Resize the buffer to make it larger. - The new buffer may be larger than size bytes because of overallocation. - Return the updated current pointer inside the buffer. - Raise an exception and return NULL on error. - - Note: size must be greater than the number of allocated bytes in the writer. - - This function doesn't use the writer minimum size (min_size attribute). - - See also _PyBytesWriter_Prepare(). - */ -PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer, - void *str, - Py_ssize_t size); - -/* Write bytes. - Raise an exception and return NULL on error. */ -PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer, - void *str, - const void *bytes, - Py_ssize_t size); -#endif /* Py_LIMITED_API */ +# define Py_CPYTHON_BYTESOBJECT_H +# include "cpython/bytesobject.h" +# undef Py_CPYTHON_BYTESOBJECT_H +#endif #ifdef __cplusplus } diff --git a/src/external/windows/include/python/cellobject.h b/src/external/windows/include/python/cellobject.h index d38bf130..00749aed 100755 --- a/src/external/windows/include/python/cellobject.h +++ b/src/external/windows/include/python/cellobject.h @@ -13,7 +13,7 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyCell_Type; -#define PyCell_Check(op) (Py_TYPE(op) == &PyCell_Type) +#define PyCell_Check(op) Py_IS_TYPE(op, &PyCell_Type) PyAPI_FUNC(PyObject *) PyCell_New(PyObject *); PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *); diff --git a/src/external/windows/include/python/ceval.h b/src/external/windows/include/python/ceval.h index 31b92ffa..1b32417e 100755 --- a/src/external/windows/include/python/ceval.h +++ b/src/external/windows/include/python/ceval.h @@ -8,52 +8,30 @@ extern "C" { /* Interface to random parts in ceval.c */ /* PyEval_CallObjectWithKeywords(), PyEval_CallObject(), PyEval_CallFunction - * and PyEval_CallMethod are kept for backward compatibility: PyObject_Call(), - * PyObject_CallFunction() and PyObject_CallMethod() are recommended to call - * a callable object. + * and PyEval_CallMethod are deprecated. Since they are officially part of the + * stable ABI (PEP 384), they must be kept for backward compatibility. + * PyObject_Call(), PyObject_CallFunction() and PyObject_CallMethod() are + * recommended to call a callable object. */ -PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords( +Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords( PyObject *callable, PyObject *args, PyObject *kwargs); -/* Inline this */ +/* Deprecated since PyEval_CallObjectWithKeywords is deprecated */ #define PyEval_CallObject(callable, arg) \ PyEval_CallObjectWithKeywords(callable, arg, (PyObject *)NULL) -PyAPI_FUNC(PyObject *) PyEval_CallFunction(PyObject *callable, - const char *format, ...); -PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj, - const char *name, - const char *format, ...); - -#ifndef Py_LIMITED_API -PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *); -PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *); -PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth(int new_depth); -PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void); -PyAPI_FUNC(void) _PyEval_SetAsyncGenFirstiter(PyObject *); -PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void); -PyAPI_FUNC(void) _PyEval_SetAsyncGenFinalizer(PyObject *); -PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void); -#endif - -struct _frame; /* Avoid including frameobject.h */ +Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallFunction( + PyObject *callable, const char *format, ...); +Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallMethod( + PyObject *obj, const char *name, const char *format, ...); PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void); PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void); PyAPI_FUNC(PyObject *) PyEval_GetLocals(void); -PyAPI_FUNC(struct _frame *) PyEval_GetFrame(void); - -#ifndef Py_LIMITED_API -/* Helper to look up a builtin object */ -PyAPI_FUNC(PyObject *) _PyEval_GetBuiltinId(_Py_Identifier *); -/* Look at the current frame's (if any) code's co_flags, and turn on - the corresponding compiler flags in cf->cf_flags. Return 1 if any - flag was set, else return 0. */ -PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf); -#endif +PyAPI_FUNC(PyFrameObject *) PyEval_GetFrame(void); PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg); PyAPI_FUNC(int) Py_MakePendingCalls(void); @@ -86,41 +64,8 @@ PyAPI_FUNC(int) Py_MakePendingCalls(void); PyAPI_FUNC(void) Py_SetRecursionLimit(int); PyAPI_FUNC(int) Py_GetRecursionLimit(void); -#define Py_EnterRecursiveCall(where) \ - (_Py_MakeRecCheck(PyThreadState_GET()->recursion_depth) && \ - _Py_CheckRecursiveCall(where)) -#define Py_LeaveRecursiveCall() \ - do{ if(_Py_MakeEndRecCheck(PyThreadState_GET()->recursion_depth)) \ - PyThreadState_GET()->overflowed = 0; \ - } while(0) -PyAPI_FUNC(int) _Py_CheckRecursiveCall(const char *where); - -/* Due to the macros in which it's used, _Py_CheckRecursionLimit is in - the stable ABI. It should be removed therefrom when possible. -*/ -PyAPI_DATA(int) _Py_CheckRecursionLimit; - -#ifdef USE_STACKCHECK -/* With USE_STACKCHECK, trigger stack checks in _Py_CheckRecursiveCall() - on every 64th call to Py_EnterRecursiveCall. -*/ -# define _Py_MakeRecCheck(x) \ - (++(x) > _Py_CheckRecursionLimit || \ - ++(PyThreadState_GET()->stackcheck_counter) > 64) -#else -# define _Py_MakeRecCheck(x) (++(x) > _Py_CheckRecursionLimit) -#endif - -/* Compute the "lower-water mark" for a recursion limit. When - * Py_LeaveRecursiveCall() is called with a recursion depth below this mark, - * the overflowed flag is reset to 0. */ -#define _Py_RecursionLimitLowerWaterMark(limit) \ - (((limit) > 200) \ - ? ((limit) - 50) \ - : (3 * ((limit) >> 2))) - -#define _Py_MakeEndRecCheck(x) \ - (--(x) < _Py_RecursionLimitLowerWaterMark(_Py_CheckRecursionLimit)) +PyAPI_FUNC(int) Py_EnterRecursiveCall(const char *where); +PyAPI_FUNC(void) Py_LeaveRecursiveCall(void); #define Py_ALLOW_RECURSION \ do { unsigned char _old = PyThreadState_GET()->recursion_critical;\ @@ -133,11 +78,8 @@ PyAPI_DATA(int) _Py_CheckRecursionLimit; PyAPI_FUNC(const char *) PyEval_GetFuncName(PyObject *); PyAPI_FUNC(const char *) PyEval_GetFuncDesc(PyObject *); -PyAPI_FUNC(PyObject *) PyEval_EvalFrame(struct _frame *); -PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(struct _frame *f, int exc); -#ifndef Py_LIMITED_API -PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(struct _frame *f, int exc); -#endif +PyAPI_FUNC(PyObject *) PyEval_EvalFrame(PyFrameObject *); +PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(PyFrameObject *f, int exc); /* Interface for threads. @@ -177,9 +119,6 @@ PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(struct _frame *f, int exc); WARNING: NEVER NEST CALLS TO Py_BEGIN_ALLOW_THREADS AND Py_END_ALLOW_THREADS!!! - The function PyEval_InitThreads() should be called only from - init_thread() in "_threadmodule.c". - Note that not yet all candidates have been converted to use this mechanism! */ @@ -187,22 +126,17 @@ PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(struct _frame *f, int exc); PyAPI_FUNC(PyThreadState *) PyEval_SaveThread(void); PyAPI_FUNC(void) PyEval_RestoreThread(PyThreadState *); -PyAPI_FUNC(int) PyEval_ThreadsInitialized(void); -PyAPI_FUNC(void) PyEval_InitThreads(void); +Py_DEPRECATED(3.9) PyAPI_FUNC(int) PyEval_ThreadsInitialized(void); +Py_DEPRECATED(3.9) PyAPI_FUNC(void) PyEval_InitThreads(void); +/* PyEval_AcquireLock() and PyEval_ReleaseLock() are part of stable ABI. + * They will be removed from this header file in the future version. + * But they will be remained in ABI until Python 4.0. + */ Py_DEPRECATED(3.2) PyAPI_FUNC(void) PyEval_AcquireLock(void); -/* Py_DEPRECATED(3.2) */ PyAPI_FUNC(void) PyEval_ReleaseLock(void); +Py_DEPRECATED(3.2) PyAPI_FUNC(void) PyEval_ReleaseLock(void); PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate); PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate); -#ifndef Py_LIMITED_API -PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds); -PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void); -#endif - -#ifndef Py_LIMITED_API -PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc); -#endif - #define Py_BEGIN_ALLOW_THREADS { \ PyThreadState *_save; \ _save = PyEval_SaveThread(); @@ -211,11 +145,6 @@ PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc); #define Py_END_ALLOW_THREADS PyEval_RestoreThread(_save); \ } -#ifndef Py_LIMITED_API -PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *); -PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *); -#endif - /* Masks and values used by FORMAT_VALUE opcode. */ #define FVC_MASK 0x3 #define FVC_NONE 0x0 @@ -225,6 +154,12 @@ PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *); #define FVS_MASK 0x4 #define FVS_HAVE_SPEC 0x4 +#ifndef Py_LIMITED_API +# define Py_CPYTHON_CEVAL_H +# include "cpython/ceval.h" +# undef Py_CPYTHON_CEVAL_H +#endif + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/classobject.h b/src/external/windows/include/python/classobject.h index 4c513eb3..5ee99b3b 100755 --- a/src/external/windows/include/python/classobject.h +++ b/src/external/windows/include/python/classobject.h @@ -19,7 +19,7 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyMethod_Type; -#define PyMethod_Check(op) ((op)->ob_type == &PyMethod_Type) +#define PyMethod_Check(op) Py_IS_TYPE(op, &PyMethod_Type) PyAPI_FUNC(PyObject *) PyMethod_New(PyObject *, PyObject *); @@ -33,8 +33,6 @@ PyAPI_FUNC(PyObject *) PyMethod_Self(PyObject *); #define PyMethod_GET_SELF(meth) \ (((PyMethodObject *)meth) -> im_self) -PyAPI_FUNC(int) PyMethod_ClearFreeList(void); - typedef struct { PyObject_HEAD PyObject *func; @@ -42,7 +40,7 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyInstanceMethod_Type; -#define PyInstanceMethod_Check(op) ((op)->ob_type == &PyInstanceMethod_Type) +#define PyInstanceMethod_Check(op) Py_IS_TYPE(op, &PyInstanceMethod_Type) PyAPI_FUNC(PyObject *) PyInstanceMethod_New(PyObject *); PyAPI_FUNC(PyObject *) PyInstanceMethod_Function(PyObject *); diff --git a/src/external/windows/include/python/code.h b/src/external/windows/include/python/code.h index 6c79cf19..1f948e52 100755 --- a/src/external/windows/include/python/code.h +++ b/src/external/windows/include/python/code.h @@ -1,180 +1,20 @@ /* Definitions for bytecode */ -#ifndef Py_LIMITED_API #ifndef Py_CODE_H #define Py_CODE_H #ifdef __cplusplus extern "C" { #endif -typedef uint16_t _Py_CODEUNIT; - -#ifdef WORDS_BIGENDIAN -# define _Py_OPCODE(word) ((word) >> 8) -# define _Py_OPARG(word) ((word) & 255) -#else -# define _Py_OPCODE(word) ((word) & 255) -# define _Py_OPARG(word) ((word) >> 8) -#endif - -typedef struct _PyOpcache _PyOpcache; - -/* Bytecode object */ -typedef struct { - PyObject_HEAD - int co_argcount; /* #arguments, except *args */ - int co_posonlyargcount; /* #positional only arguments */ - int co_kwonlyargcount; /* #keyword only arguments */ - int co_nlocals; /* #local variables */ - int co_stacksize; /* #entries needed for evaluation stack */ - int co_flags; /* CO_..., see below */ - int co_firstlineno; /* first source line number */ - PyObject *co_code; /* instruction opcodes */ - PyObject *co_consts; /* list (constants used) */ - PyObject *co_names; /* list of strings (names used) */ - PyObject *co_varnames; /* tuple of strings (local variable names) */ - PyObject *co_freevars; /* tuple of strings (free variable names) */ - PyObject *co_cellvars; /* tuple of strings (cell variable names) */ - /* The rest aren't used in either hash or comparisons, except for co_name, - used in both. This is done to preserve the name and line number - for tracebacks and debuggers; otherwise, constant de-duplication - would collapse identical functions/lambdas defined on different lines. - */ - Py_ssize_t *co_cell2arg; /* Maps cell vars which are arguments. */ - PyObject *co_filename; /* unicode (where it was loaded from) */ - PyObject *co_name; /* unicode (name, for reference) */ - PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) See - Objects/lnotab_notes.txt for details. */ - void *co_zombieframe; /* for optimization only (see frameobject.c) */ - PyObject *co_weakreflist; /* to support weakrefs to code objects */ - /* Scratch space for extra data relating to the code object. - Type is a void* to keep the format private in codeobject.c to force - people to go through the proper APIs. */ - void *co_extra; - - /* Per opcodes just-in-time cache - * - * To reduce cache size, we use indirect mapping from opcode index to - * cache object: - * cache = co_opcache[co_opcache_map[next_instr - first_instr] - 1] - */ - - // co_opcache_map is indexed by (next_instr - first_instr). - // * 0 means there is no cache for this opcode. - // * n > 0 means there is cache in co_opcache[n-1]. - unsigned char *co_opcache_map; - _PyOpcache *co_opcache; - int co_opcache_flag; // used to determine when create a cache. - unsigned char co_opcache_size; // length of co_opcache. -} PyCodeObject; - -/* Masks for co_flags above */ -#define CO_OPTIMIZED 0x0001 -#define CO_NEWLOCALS 0x0002 -#define CO_VARARGS 0x0004 -#define CO_VARKEYWORDS 0x0008 -#define CO_NESTED 0x0010 -#define CO_GENERATOR 0x0020 -/* The CO_NOFREE flag is set if there are no free or cell variables. - This information is redundant, but it allows a single flag test - to determine whether there is any extra work to be done when the - call frame it setup. -*/ -#define CO_NOFREE 0x0040 - -/* The CO_COROUTINE flag is set for coroutine functions (defined with - ``async def`` keywords) */ -#define CO_COROUTINE 0x0080 -#define CO_ITERABLE_COROUTINE 0x0100 -#define CO_ASYNC_GENERATOR 0x0200 - -/* bpo-39562: These constant values are changed in Python 3.9 - to prevent collision with compiler flags. CO_FUTURE_ and PyCF_ - constants must be kept unique. PyCF_ constants can use bits from - 0x0100 to 0x10000. CO_FUTURE_ constants use bits starting at 0x20000. */ -#define CO_FUTURE_DIVISION 0x20000 -#define CO_FUTURE_ABSOLUTE_IMPORT 0x40000 /* do absolute imports by default */ -#define CO_FUTURE_WITH_STATEMENT 0x80000 -#define CO_FUTURE_PRINT_FUNCTION 0x100000 -#define CO_FUTURE_UNICODE_LITERALS 0x200000 - -#define CO_FUTURE_BARRY_AS_BDFL 0x400000 -#define CO_FUTURE_GENERATOR_STOP 0x800000 -#define CO_FUTURE_ANNOTATIONS 0x1000000 - -/* This value is found in the co_cell2arg array when the associated cell - variable does not correspond to an argument. */ -#define CO_CELL_NOT_AN_ARG (-1) - -/* This should be defined if a future statement modifies the syntax. - For example, when a keyword is added. -*/ -#define PY_PARSER_REQUIRES_FUTURE_KEYWORD - -#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */ - -PyAPI_DATA(PyTypeObject) PyCode_Type; - -#define PyCode_Check(op) (Py_TYPE(op) == &PyCode_Type) -#define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars)) - -/* Public interface */ -PyAPI_FUNC(PyCodeObject *) PyCode_New( - int, int, int, int, int, PyObject *, PyObject *, - PyObject *, PyObject *, PyObject *, PyObject *, - PyObject *, PyObject *, int, PyObject *); - -PyAPI_FUNC(PyCodeObject *) PyCode_NewWithPosOnlyArgs( - int, int, int, int, int, int, PyObject *, PyObject *, - PyObject *, PyObject *, PyObject *, PyObject *, - PyObject *, PyObject *, int, PyObject *); - /* same as struct above */ - -/* Creates a new empty code object with the specified source location. */ -PyAPI_FUNC(PyCodeObject *) -PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno); - -/* Return the line number associated with the specified bytecode index - in this code object. If you just need the line number of a frame, - use PyFrame_GetLineNumber() instead. */ -PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int); - -/* for internal use only */ -typedef struct _addr_pair { - int ap_lower; - int ap_upper; -} PyAddrPair; +typedef struct PyCodeObject PyCodeObject; #ifndef Py_LIMITED_API -/* Update *bounds to describe the first and one-past-the-last instructions in the - same line as lasti. Return the number of that line. -*/ -PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co, - int lasti, PyAddrPair *bounds); - -/* Create a comparable key used to compare constants taking in account the - * object type. It is used to make sure types are not coerced (e.g., float and - * complex) _and_ to distinguish 0.0 from -0.0 e.g. on IEEE platforms - * - * Return (type(obj), obj, ...): a tuple with variable size (at least 2 items) - * depending on the type and the value. The type is the first item to not - * compare bytes and str which can raise a BytesWarning exception. */ -PyAPI_FUNC(PyObject*) _PyCode_ConstantKey(PyObject *obj); -#endif - -PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts, - PyObject *names, PyObject *lnotab); - - -#ifndef Py_LIMITED_API -PyAPI_FUNC(int) _PyCode_GetExtra(PyObject *code, Py_ssize_t index, - void **extra); -PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index, - void *extra); +# define Py_CPYTHON_CODE_H +# include "cpython/code.h" +# undef Py_CPYTHON_CODE_H #endif #ifdef __cplusplus } #endif #endif /* !Py_CODE_H */ -#endif /* Py_LIMITED_API */ diff --git a/src/external/windows/include/python/compile.h b/src/external/windows/include/python/compile.h index eac3d9b5..4d6a0f6c 100755 --- a/src/external/windows/include/python/compile.h +++ b/src/external/windows/include/python/compile.h @@ -2,7 +2,6 @@ #define Py_COMPILE_H #ifndef Py_LIMITED_API -#include "code.h" #ifdef __cplusplus extern "C" { @@ -10,6 +9,9 @@ extern "C" { /* Public interface */ struct _node; /* Declare the existence of this type */ +#ifndef Py_BUILD_CORE +Py_DEPRECATED(3.9) +#endif PyAPI_FUNC(PyCodeObject *) PyNode_Compile(struct _node *, const char *); /* XXX (ncoghlan): Unprefixed type name in a public API! */ @@ -89,7 +91,12 @@ PyAPI_FUNC(PyObject*) _Py_Mangle(PyObject *p, PyObject *name); PyAPI_FUNC(int) PyCompile_OpcodeStackEffect(int opcode, int oparg); PyAPI_FUNC(int) PyCompile_OpcodeStackEffectWithJump(int opcode, int oparg, int jump); -PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, int optimize); +typedef struct { + int optimize; + int ff_features; +} _PyASTOptimizeState; + +PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, _PyASTOptimizeState *state); #ifdef __cplusplus } @@ -103,4 +110,7 @@ PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, int optimize); #define Py_eval_input 258 #define Py_func_type_input 345 +/* This doesn't need to match anything */ +#define Py_fstring_input 800 + #endif /* !Py_COMPILE_H */ diff --git a/src/external/windows/include/python/complexobject.h b/src/external/windows/include/python/complexobject.h index a189212d..a912a55f 100755 --- a/src/external/windows/include/python/complexobject.h +++ b/src/external/windows/include/python/complexobject.h @@ -39,7 +39,7 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyComplex_Type; #define PyComplex_Check(op) PyObject_TypeCheck(op, &PyComplex_Type) -#define PyComplex_CheckExact(op) (Py_TYPE(op) == &PyComplex_Type) +#define PyComplex_CheckExact(op) Py_IS_TYPE(op, &PyComplex_Type) #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyComplex_FromCComplex(Py_complex); diff --git a/src/external/windows/include/python/context.h b/src/external/windows/include/python/context.h index cb21c429..e1a0f0fb 100755 --- a/src/external/windows/include/python/context.h +++ b/src/external/windows/include/python/context.h @@ -17,9 +17,9 @@ PyAPI_DATA(PyTypeObject) PyContextToken_Type; typedef struct _pycontexttokenobject PyContextToken; -#define PyContext_CheckExact(o) (Py_TYPE(o) == &PyContext_Type) -#define PyContextVar_CheckExact(o) (Py_TYPE(o) == &PyContextVar_Type) -#define PyContextToken_CheckExact(o) (Py_TYPE(o) == &PyContextToken_Type) +#define PyContext_CheckExact(o) Py_IS_TYPE(o, &PyContext_Type) +#define PyContextVar_CheckExact(o) Py_IS_TYPE(o, &PyContextVar_Type) +#define PyContextToken_CheckExact(o) Py_IS_TYPE(o, &PyContextToken_Type) PyAPI_FUNC(PyObject *) PyContext_New(void); @@ -73,9 +73,6 @@ PyAPI_FUNC(int) PyContextVar_Reset(PyObject *var, PyObject *token); PyAPI_FUNC(PyObject *) _PyContext_NewHamtForTests(void); -PyAPI_FUNC(int) PyContext_ClearFreeList(void); - - #endif /* !Py_LIMITED_API */ #ifdef __cplusplus diff --git a/src/external/windows/include/python/cpython/abstract.h b/src/external/windows/include/python/cpython/abstract.h index 8b921dae..91c15448 100755 --- a/src/external/windows/include/python/cpython/abstract.h +++ b/src/external/windows/include/python/cpython/abstract.h @@ -26,28 +26,10 @@ PyAPI_FUNC(PyObject *) _PyStack_AsDict( PyObject *const *values, PyObject *kwnames); -/* Convert (args, nargs, kwargs: dict) into a (stack, nargs, kwnames: tuple). - - Return 0 on success, raise an exception and return -1 on error. - - Write the new stack into *p_stack. If *p_stack is differen than args, it - must be released by PyMem_Free(). - - The stack uses borrowed references. - - The type of keyword keys is not checked, these checks should be done - later (ex: _PyArg_ParseStackAndKeywords). */ -PyAPI_FUNC(int) _PyStack_UnpackDict( - PyObject *const *args, - Py_ssize_t nargs, - PyObject *kwargs, - PyObject *const **p_stack, - PyObject **p_kwnames); - /* Suggested size (number of positional arguments) for arrays of PyObject* allocated on a C stack to avoid allocating memory on the heap memory. Such array is used to pass positional arguments to call functions of the - _PyObject_Vectorcall() family. + PyObject_Vectorcall() family. The size is chosen to not abuse the C stack and so limit the risk of stack overflow. The size is also chosen to allow using the small stack for most @@ -55,16 +37,19 @@ PyAPI_FUNC(int) _PyStack_UnpackDict( 40 bytes on the stack. */ #define _PY_FASTCALL_SMALL_STACK 5 -PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(PyObject *callable, - PyObject *result, - const char *where); +PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult( + PyThreadState *tstate, + PyObject *callable, + PyObject *result, + const char *where); /* === Vectorcall protocol (PEP 590) ============================= */ -/* Call callable using tp_call. Arguments are like _PyObject_Vectorcall() - or _PyObject_FastCallDict() (both forms are supported), +/* Call callable using tp_call. Arguments are like PyObject_Vectorcall() + or PyObject_FastCallDict() (both forms are supported), except that nargs is plainly the number of arguments without flags. */ PyAPI_FUNC(PyObject *) _PyObject_MakeTpCall( + PyThreadState *tstate, PyObject *callable, PyObject *const *args, Py_ssize_t nargs, PyObject *keywords); @@ -78,18 +63,22 @@ PyVectorcall_NARGS(size_t n) } static inline vectorcallfunc -_PyVectorcall_Function(PyObject *callable) +PyVectorcall_Function(PyObject *callable) { - PyTypeObject *tp = Py_TYPE(callable); - Py_ssize_t offset = tp->tp_vectorcall_offset; - vectorcallfunc *ptr; - if (!PyType_HasFeature(tp, _Py_TPFLAGS_HAVE_VECTORCALL)) { + PyTypeObject *tp; + Py_ssize_t offset; + vectorcallfunc ptr; + + assert(callable != NULL); + tp = Py_TYPE(callable); + if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) { return NULL; } assert(PyCallable_Check(callable)); + offset = tp->tp_vectorcall_offset; assert(offset > 0); - ptr = (vectorcallfunc*)(((char *)callable) + offset); - return *ptr; + memcpy(&ptr, (char *) callable + offset, sizeof(ptr)); + return ptr; } /* Call the callable object 'callable' with the "vectorcall" calling @@ -106,31 +95,51 @@ _PyVectorcall_Function(PyObject *callable) of keyword arguments does not change nargsf). kwnames can also be NULL if there are no keyword arguments. - keywords must only contains str strings (no subclass), and all keys must - be unique. + keywords must only contain strings and all keys must be unique. Return the result on success. Raise an exception and return NULL on error. */ static inline PyObject * -_PyObject_Vectorcall(PyObject *callable, PyObject *const *args, - size_t nargsf, PyObject *kwnames) +_PyObject_VectorcallTstate(PyThreadState *tstate, PyObject *callable, + PyObject *const *args, size_t nargsf, + PyObject *kwnames) { - PyObject *res; vectorcallfunc func; + PyObject *res; + assert(kwnames == NULL || PyTuple_Check(kwnames)); assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0); - func = _PyVectorcall_Function(callable); + + func = PyVectorcall_Function(callable); if (func == NULL) { Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); - return _PyObject_MakeTpCall(callable, args, nargs, kwnames); + return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwnames); } res = func(callable, args, nargsf, kwnames); - return _Py_CheckFunctionResult(callable, res, NULL); + return _Py_CheckFunctionResult(tstate, callable, res, NULL); } -/* Same as _PyObject_Vectorcall except that keyword arguments are passed as +static inline PyObject * +PyObject_Vectorcall(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames) +{ + PyThreadState *tstate = PyThreadState_GET(); + return _PyObject_VectorcallTstate(tstate, callable, + args, nargsf, kwnames); +} + +// Backwards compatibility aliases for API that was provisional in Python 3.8 +#define _PyObject_Vectorcall PyObject_Vectorcall +#define _PyObject_VectorcallMethod PyObject_VectorcallMethod +#define _PyObject_FastCallDict PyObject_VectorcallDict +#define _PyVectorcall_Function PyVectorcall_Function +#define _PyObject_CallOneArg PyObject_CallOneArg +#define _PyObject_CallMethodNoArgs PyObject_CallMethodNoArgs +#define _PyObject_CallMethodOneArg PyObject_CallMethodOneArg + +/* Same as PyObject_Vectorcall except that keyword arguments are passed as dict, which may be NULL if there are no keyword arguments. */ -PyAPI_FUNC(PyObject *) _PyObject_FastCallDict( +PyAPI_FUNC(PyObject *) PyObject_VectorcallDict( PyObject *callable, PyObject *const *args, size_t nargsf, @@ -140,30 +149,65 @@ PyAPI_FUNC(PyObject *) _PyObject_FastCallDict( "tuple" and keyword arguments "dict". "dict" may also be NULL */ PyAPI_FUNC(PyObject *) PyVectorcall_Call(PyObject *callable, PyObject *tuple, PyObject *dict); -/* Same as _PyObject_Vectorcall except without keyword arguments */ +static inline PyObject * +_PyObject_FastCallTstate(PyThreadState *tstate, PyObject *func, PyObject *const *args, Py_ssize_t nargs) +{ + return _PyObject_VectorcallTstate(tstate, func, args, (size_t)nargs, NULL); +} + +/* Same as PyObject_Vectorcall except without keyword arguments */ static inline PyObject * _PyObject_FastCall(PyObject *func, PyObject *const *args, Py_ssize_t nargs) { - return _PyObject_Vectorcall(func, args, (size_t)nargs, NULL); + PyThreadState *tstate = PyThreadState_GET(); + return _PyObject_FastCallTstate(tstate, func, args, nargs); } -/* Call a callable without any arguments */ +/* Call a callable without any arguments + Private static inline function variant of public function + PyObject_CallNoArgs(). */ static inline PyObject * _PyObject_CallNoArg(PyObject *func) { - return _PyObject_Vectorcall(func, NULL, 0, NULL); + PyThreadState *tstate = PyThreadState_GET(); + return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL); } -PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend( - PyObject *callable, - PyObject *obj, - PyObject *args, - PyObject *kwargs); +static inline PyObject * +PyObject_CallOneArg(PyObject *func, PyObject *arg) +{ + PyObject *_args[2]; + PyObject **args; + PyThreadState *tstate; + size_t nargsf; -PyAPI_FUNC(PyObject *) _PyObject_FastCall_Prepend( - PyObject *callable, - PyObject *obj, - PyObject *const *args, - Py_ssize_t nargs); + assert(arg != NULL); + args = _args + 1; // For PY_VECTORCALL_ARGUMENTS_OFFSET + args[0] = arg; + tstate = PyThreadState_GET(); + nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET; + return _PyObject_VectorcallTstate(tstate, func, args, nargsf, NULL); +} + +PyAPI_FUNC(PyObject *) PyObject_VectorcallMethod( + PyObject *name, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + +static inline PyObject * +PyObject_CallMethodNoArgs(PyObject *self, PyObject *name) +{ + return PyObject_VectorcallMethod(name, &self, + 1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +} + +static inline PyObject * +PyObject_CallMethodOneArg(PyObject *self, PyObject *name, PyObject *arg) +{ + PyObject *args[2] = {self, arg}; + + assert(arg != NULL); + return PyObject_VectorcallMethod(name, args, + 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +} /* Like PyObject_CallMethod(), but expect a _Py_Identifier* as the method name. */ @@ -181,6 +225,35 @@ PyAPI_FUNC(PyObject *) _PyObject_CallMethodIdObjArgs( struct _Py_Identifier *name, ...); +static inline PyObject * +_PyObject_VectorcallMethodId( + _Py_Identifier *name, PyObject *const *args, + size_t nargsf, PyObject *kwnames) +{ + PyObject *oname = _PyUnicode_FromId(name); /* borrowed */ + if (!oname) { + return NULL; + } + return PyObject_VectorcallMethod(oname, args, nargsf, kwnames); +} + +static inline PyObject * +_PyObject_CallMethodIdNoArgs(PyObject *self, _Py_Identifier *name) +{ + return _PyObject_VectorcallMethodId(name, &self, + 1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +} + +static inline PyObject * +_PyObject_CallMethodIdOneArg(PyObject *self, _Py_Identifier *name, PyObject *arg) +{ + PyObject *args[2] = {self, arg}; + + assert(arg != NULL); + return _PyObject_VectorcallMethodId(name, args, + 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +} + PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o); /* Guess the size of object 'o' using len(o) or o.__length_hint__(). @@ -191,9 +264,7 @@ PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o, Py_ssize_t); /* === New Buffer API ============================================ */ /* Return 1 if the getbuffer function is available, otherwise return 0. */ -#define PyObject_CheckBuffer(obj) \ - (((obj)->ob_type->tp_as_buffer != NULL) && \ - ((obj)->ob_type->tp_as_buffer->bf_getbuffer != NULL)) +PyAPI_FUNC(int) PyObject_CheckBuffer(PyObject *obj); /* This is a C-API version of the getbuffer function call. It checks to make sure object has the required function pointer and issues the @@ -209,7 +280,7 @@ PyAPI_FUNC(void *) PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices); /* Return the implied itemsize of the data-format area from a struct-style description. */ -PyAPI_FUNC(int) PyBuffer_SizeFromFormat(const char *); +PyAPI_FUNC(Py_ssize_t) PyBuffer_SizeFromFormat(const char *format); /* Implementation in memoryobject.c */ PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, Py_buffer *view, @@ -261,14 +332,8 @@ PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *view); /* ==== Iterators ================================================ */ #define PyIter_Check(obj) \ - ((obj)->ob_type->tp_iternext != NULL && \ - (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented) - -/* === Number Protocol ================================================== */ - -#define PyIndex_Check(obj) \ - ((obj)->ob_type->tp_as_number != NULL && \ - (obj)->ob_type->tp_as_number->nb_index != NULL) + (Py_TYPE(obj)->tp_iternext != NULL && \ + Py_TYPE(obj)->tp_iternext != &_PyObject_NextNotImplemented) /* === Sequence protocol ================================================ */ diff --git a/src/external/windows/include/python/cpython/bytearrayobject.h b/src/external/windows/include/python/cpython/bytearrayobject.h new file mode 100755 index 00000000..061de138 --- /dev/null +++ b/src/external/windows/include/python/cpython/bytearrayobject.h @@ -0,0 +1,20 @@ +#ifndef Py_CPYTHON_BYTEARRAYOBJECT_H +# error "this header file must not be included directly" +#endif + +/* Object layout */ +typedef struct { + PyObject_VAR_HEAD + Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */ + char *ob_bytes; /* Physical backing buffer */ + char *ob_start; /* Logical start inside ob_bytes */ + Py_ssize_t ob_exports; /* How many buffer exports */ +} PyByteArrayObject; + +/* Macros, trading safety for speed */ +#define PyByteArray_AS_STRING(self) \ + (assert(PyByteArray_Check(self)), \ + Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_start : _PyByteArray_empty_string) +#define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self)) + +PyAPI_DATA(char) _PyByteArray_empty_string[]; diff --git a/src/external/windows/include/python/cpython/bytesobject.h b/src/external/windows/include/python/cpython/bytesobject.h new file mode 100755 index 00000000..370513c0 --- /dev/null +++ b/src/external/windows/include/python/cpython/bytesobject.h @@ -0,0 +1,118 @@ +#ifndef Py_CPYTHON_BYTESOBJECT_H +# error "this header file must not be included directly" +#endif + +typedef struct { + PyObject_VAR_HEAD + Py_hash_t ob_shash; + char ob_sval[1]; + + /* Invariants: + * ob_sval contains space for 'ob_size+1' elements. + * ob_sval[ob_size] == 0. + * ob_shash is the hash of the string or -1 if not computed yet. + */ +} PyBytesObject; + +PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t); +PyAPI_FUNC(PyObject*) _PyBytes_FormatEx( + const char *format, + Py_ssize_t format_len, + PyObject *args, + int use_bytearray); +PyAPI_FUNC(PyObject*) _PyBytes_FromHex( + PyObject *string, + int use_bytearray); + +/* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */ +PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t, + const char *, const char **); + +/* Macro, trading safety for speed */ +#define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \ + (((PyBytesObject *)(op))->ob_sval)) +#define PyBytes_GET_SIZE(op) (assert(PyBytes_Check(op)),Py_SIZE(op)) + +/* _PyBytes_Join(sep, x) is like sep.join(x). sep must be PyBytesObject*, + x must be an iterable object. */ +PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x); + + +/* The _PyBytesWriter structure is big: it contains an embedded "stack buffer". + A _PyBytesWriter variable must be declared at the end of variables in a + function to optimize the memory allocation on the stack. */ +typedef struct { + /* bytes, bytearray or NULL (when the small buffer is used) */ + PyObject *buffer; + + /* Number of allocated size. */ + Py_ssize_t allocated; + + /* Minimum number of allocated bytes, + incremented by _PyBytesWriter_Prepare() */ + Py_ssize_t min_size; + + /* If non-zero, use a bytearray instead of a bytes object for buffer. */ + int use_bytearray; + + /* If non-zero, overallocate the buffer (default: 0). + This flag must be zero if use_bytearray is non-zero. */ + int overallocate; + + /* Stack buffer */ + int use_small_buffer; + char small_buffer[512]; +} _PyBytesWriter; + +/* Initialize a bytes writer + + By default, the overallocation is disabled. Set the overallocate attribute + to control the allocation of the buffer. */ +PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer); + +/* Get the buffer content and reset the writer. + Return a bytes object, or a bytearray object if use_bytearray is non-zero. + Raise an exception and return NULL on error. */ +PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer, + void *str); + +/* Deallocate memory of a writer (clear its internal buffer). */ +PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer); + +/* Allocate the buffer to write size bytes. + Return the pointer to the beginning of buffer data. + Raise an exception and return NULL on error. */ +PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer, + Py_ssize_t size); + +/* Ensure that the buffer is large enough to write *size* bytes. + Add size to the writer minimum size (min_size attribute). + + str is the current pointer inside the buffer. + Return the updated current pointer inside the buffer. + Raise an exception and return NULL on error. */ +PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer, + void *str, + Py_ssize_t size); + +/* Resize the buffer to make it larger. + The new buffer may be larger than size bytes because of overallocation. + Return the updated current pointer inside the buffer. + Raise an exception and return NULL on error. + + Note: size must be greater than the number of allocated bytes in the writer. + + This function doesn't use the writer minimum size (min_size attribute). + + See also _PyBytesWriter_Prepare(). + */ +PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer, + void *str, + Py_ssize_t size); + +/* Write bytes. + Raise an exception and return NULL on error. */ +PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer, + void *str, + const void *bytes, + Py_ssize_t size); diff --git a/src/external/windows/include/python/cpython/ceval.h b/src/external/windows/include/python/cpython/ceval.h new file mode 100755 index 00000000..ce4fdfe3 --- /dev/null +++ b/src/external/windows/include/python/cpython/ceval.h @@ -0,0 +1,38 @@ +#ifndef Py_CPYTHON_CEVAL_H +# error "this header file must not be included directly" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *); +PyAPI_DATA(int) _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg); +PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *); +PyAPI_FUNC(int) _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg); +PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void); +PyAPI_FUNC(int) _PyEval_SetAsyncGenFirstiter(PyObject *); +PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void); +PyAPI_FUNC(int) _PyEval_SetAsyncGenFinalizer(PyObject *); +PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void); + +/* Helper to look up a builtin object */ +PyAPI_FUNC(PyObject *) _PyEval_GetBuiltinId(_Py_Identifier *); +/* Look at the current frame's (if any) code's co_flags, and turn on + the corresponding compiler flags in cf->cf_flags. Return 1 if any + flag was set, else return 0. */ +PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf); + +PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int exc); + +PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds); +PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void); + +PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc); + +PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *); +PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *); + +#ifdef __cplusplus +} +#endif diff --git a/src/external/windows/include/python/cpython/code.h b/src/external/windows/include/python/cpython/code.h new file mode 100755 index 00000000..e0d1f1cb --- /dev/null +++ b/src/external/windows/include/python/cpython/code.h @@ -0,0 +1,165 @@ +#ifndef Py_CPYTHON_CODE_H +# error "this header file must not be included directly" +#endif + +typedef uint16_t _Py_CODEUNIT; + +#ifdef WORDS_BIGENDIAN +# define _Py_OPCODE(word) ((word) >> 8) +# define _Py_OPARG(word) ((word) & 255) +#else +# define _Py_OPCODE(word) ((word) & 255) +# define _Py_OPARG(word) ((word) >> 8) +#endif + +typedef struct _PyOpcache _PyOpcache; + +/* Bytecode object */ +struct PyCodeObject { + PyObject_HEAD + int co_argcount; /* #arguments, except *args */ + int co_posonlyargcount; /* #positional only arguments */ + int co_kwonlyargcount; /* #keyword only arguments */ + int co_nlocals; /* #local variables */ + int co_stacksize; /* #entries needed for evaluation stack */ + int co_flags; /* CO_..., see below */ + int co_firstlineno; /* first source line number */ + PyObject *co_code; /* instruction opcodes */ + PyObject *co_consts; /* list (constants used) */ + PyObject *co_names; /* list of strings (names used) */ + PyObject *co_varnames; /* tuple of strings (local variable names) */ + PyObject *co_freevars; /* tuple of strings (free variable names) */ + PyObject *co_cellvars; /* tuple of strings (cell variable names) */ + /* The rest aren't used in either hash or comparisons, except for co_name, + used in both. This is done to preserve the name and line number + for tracebacks and debuggers; otherwise, constant de-duplication + would collapse identical functions/lambdas defined on different lines. + */ + Py_ssize_t *co_cell2arg; /* Maps cell vars which are arguments. */ + PyObject *co_filename; /* unicode (where it was loaded from) */ + PyObject *co_name; /* unicode (name, for reference) */ + PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) See + Objects/lnotab_notes.txt for details. */ + void *co_zombieframe; /* for optimization only (see frameobject.c) */ + PyObject *co_weakreflist; /* to support weakrefs to code objects */ + /* Scratch space for extra data relating to the code object. + Type is a void* to keep the format private in codeobject.c to force + people to go through the proper APIs. */ + void *co_extra; + + /* Per opcodes just-in-time cache + * + * To reduce cache size, we use indirect mapping from opcode index to + * cache object: + * cache = co_opcache[co_opcache_map[next_instr - first_instr] - 1] + */ + + // co_opcache_map is indexed by (next_instr - first_instr). + // * 0 means there is no cache for this opcode. + // * n > 0 means there is cache in co_opcache[n-1]. + unsigned char *co_opcache_map; + _PyOpcache *co_opcache; + int co_opcache_flag; // used to determine when create a cache. + unsigned char co_opcache_size; // length of co_opcache. +}; + +/* Masks for co_flags above */ +#define CO_OPTIMIZED 0x0001 +#define CO_NEWLOCALS 0x0002 +#define CO_VARARGS 0x0004 +#define CO_VARKEYWORDS 0x0008 +#define CO_NESTED 0x0010 +#define CO_GENERATOR 0x0020 +/* The CO_NOFREE flag is set if there are no free or cell variables. + This information is redundant, but it allows a single flag test + to determine whether there is any extra work to be done when the + call frame it setup. +*/ +#define CO_NOFREE 0x0040 + +/* The CO_COROUTINE flag is set for coroutine functions (defined with + ``async def`` keywords) */ +#define CO_COROUTINE 0x0080 +#define CO_ITERABLE_COROUTINE 0x0100 +#define CO_ASYNC_GENERATOR 0x0200 + +/* bpo-39562: These constant values are changed in Python 3.9 + to prevent collision with compiler flags. CO_FUTURE_ and PyCF_ + constants must be kept unique. PyCF_ constants can use bits from + 0x0100 to 0x10000. CO_FUTURE_ constants use bits starting at 0x20000. */ +#define CO_FUTURE_DIVISION 0x20000 +#define CO_FUTURE_ABSOLUTE_IMPORT 0x40000 /* do absolute imports by default */ +#define CO_FUTURE_WITH_STATEMENT 0x80000 +#define CO_FUTURE_PRINT_FUNCTION 0x100000 +#define CO_FUTURE_UNICODE_LITERALS 0x200000 + +#define CO_FUTURE_BARRY_AS_BDFL 0x400000 +#define CO_FUTURE_GENERATOR_STOP 0x800000 +#define CO_FUTURE_ANNOTATIONS 0x1000000 + +/* This value is found in the co_cell2arg array when the associated cell + variable does not correspond to an argument. */ +#define CO_CELL_NOT_AN_ARG (-1) + +/* This should be defined if a future statement modifies the syntax. + For example, when a keyword is added. +*/ +#define PY_PARSER_REQUIRES_FUTURE_KEYWORD + +#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */ + +PyAPI_DATA(PyTypeObject) PyCode_Type; + +#define PyCode_Check(op) Py_IS_TYPE(op, &PyCode_Type) +#define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars)) + +/* Public interface */ +PyAPI_FUNC(PyCodeObject *) PyCode_New( + int, int, int, int, int, PyObject *, PyObject *, + PyObject *, PyObject *, PyObject *, PyObject *, + PyObject *, PyObject *, int, PyObject *); + +PyAPI_FUNC(PyCodeObject *) PyCode_NewWithPosOnlyArgs( + int, int, int, int, int, int, PyObject *, PyObject *, + PyObject *, PyObject *, PyObject *, PyObject *, + PyObject *, PyObject *, int, PyObject *); + /* same as struct above */ + +/* Creates a new empty code object with the specified source location. */ +PyAPI_FUNC(PyCodeObject *) +PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno); + +/* Return the line number associated with the specified bytecode index + in this code object. If you just need the line number of a frame, + use PyFrame_GetLineNumber() instead. */ +PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int); + +/* for internal use only */ +typedef struct _addr_pair { + int ap_lower; + int ap_upper; +} PyAddrPair; + +/* Update *bounds to describe the first and one-past-the-last instructions in the + same line as lasti. Return the number of that line. +*/ +PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co, + int lasti, PyAddrPair *bounds); + +/* Create a comparable key used to compare constants taking in account the + * object type. It is used to make sure types are not coerced (e.g., float and + * complex) _and_ to distinguish 0.0 from -0.0 e.g. on IEEE platforms + * + * Return (type(obj), obj, ...): a tuple with variable size (at least 2 items) + * depending on the type and the value. The type is the first item to not + * compare bytes and str which can raise a BytesWarning exception. */ +PyAPI_FUNC(PyObject*) _PyCode_ConstantKey(PyObject *obj); + +PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts, + PyObject *names, PyObject *lnotab); + + +PyAPI_FUNC(int) _PyCode_GetExtra(PyObject *code, Py_ssize_t index, + void **extra); +PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index, + void *extra); diff --git a/src/external/windows/include/python/cpython/dictobject.h b/src/external/windows/include/python/cpython/dictobject.h index e8c94964..3a0869de 100755 --- a/src/external/windows/include/python/cpython/dictobject.h +++ b/src/external/windows/include/python/cpython/dictobject.h @@ -62,8 +62,6 @@ PyObject *_PyDict_Pop_KnownHash(PyObject *, PyObject *, Py_hash_t, PyObject *); PyObject *_PyDict_FromKeys(PyObject *, PyObject *, PyObject *); #define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL) -PyAPI_FUNC(int) PyDict_ClearFreeList(void); - /* Like PyDict_Merge, but override can be 0, 1 or 2. If override is 0, the first occurrence of a key wins, if override is 1, the last occurrence of a key wins, if override is 2, a KeyError with conflicting key as diff --git a/src/external/windows/include/python/cpython/fileobject.h b/src/external/windows/include/python/cpython/fileobject.h index 7752c056..9aa0ead5 100755 --- a/src/external/windows/include/python/cpython/fileobject.h +++ b/src/external/windows/include/python/cpython/fileobject.h @@ -8,14 +8,6 @@ extern "C" { PyAPI_FUNC(char *) Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 -PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors; -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 -PyAPI_DATA(int) Py_UTF8Mode; -#endif - /* The std printer acts as a preliminary sys.stderr until the new io infrastructure is in place. */ PyAPI_FUNC(PyObject *) PyFile_NewStdPrinter(int); diff --git a/src/external/windows/include/python/cpython/fileutils.h b/src/external/windows/include/python/cpython/fileutils.h new file mode 100755 index 00000000..08139cf7 --- /dev/null +++ b/src/external/windows/include/python/cpython/fileutils.h @@ -0,0 +1,165 @@ +#ifndef Py_CPYTHON_FILEUTILS_H +# error "this header file must not be included directly" +#endif + +typedef enum { + _Py_ERROR_UNKNOWN=0, + _Py_ERROR_STRICT, + _Py_ERROR_SURROGATEESCAPE, + _Py_ERROR_REPLACE, + _Py_ERROR_IGNORE, + _Py_ERROR_BACKSLASHREPLACE, + _Py_ERROR_SURROGATEPASS, + _Py_ERROR_XMLCHARREFREPLACE, + _Py_ERROR_OTHER +} _Py_error_handler; + +PyAPI_FUNC(_Py_error_handler) _Py_GetErrorHandler(const char *errors); + +PyAPI_FUNC(int) _Py_DecodeLocaleEx( + const char *arg, + wchar_t **wstr, + size_t *wlen, + const char **reason, + int current_locale, + _Py_error_handler errors); + +PyAPI_FUNC(int) _Py_EncodeLocaleEx( + const wchar_t *text, + char **str, + size_t *error_pos, + const char **reason, + int current_locale, + _Py_error_handler errors); + + +PyAPI_FUNC(PyObject *) _Py_device_encoding(int); + +#if defined(MS_WINDOWS) || defined(__APPLE__) + /* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611). + On macOS 10.13, read() and write() with more than INT_MAX bytes + fail with EINVAL (bpo-24658). */ +# define _PY_READ_MAX INT_MAX +# define _PY_WRITE_MAX INT_MAX +#else + /* write() should truncate the input to PY_SSIZE_T_MAX bytes, + but it's safer to do it ourself to have a portable behaviour */ +# define _PY_READ_MAX PY_SSIZE_T_MAX +# define _PY_WRITE_MAX PY_SSIZE_T_MAX +#endif + +#ifdef MS_WINDOWS +struct _Py_stat_struct { + unsigned long st_dev; + uint64_t st_ino; + unsigned short st_mode; + int st_nlink; + int st_uid; + int st_gid; + unsigned long st_rdev; + __int64 st_size; + time_t st_atime; + int st_atime_nsec; + time_t st_mtime; + int st_mtime_nsec; + time_t st_ctime; + int st_ctime_nsec; + unsigned long st_file_attributes; + unsigned long st_reparse_tag; +}; +#else +# define _Py_stat_struct stat +#endif + +PyAPI_FUNC(int) _Py_fstat( + int fd, + struct _Py_stat_struct *status); + +PyAPI_FUNC(int) _Py_fstat_noraise( + int fd, + struct _Py_stat_struct *status); + +PyAPI_FUNC(int) _Py_stat( + PyObject *path, + struct stat *status); + +PyAPI_FUNC(int) _Py_open( + const char *pathname, + int flags); + +PyAPI_FUNC(int) _Py_open_noraise( + const char *pathname, + int flags); + +PyAPI_FUNC(FILE *) _Py_wfopen( + const wchar_t *path, + const wchar_t *mode); + +PyAPI_FUNC(FILE*) _Py_fopen( + const char *pathname, + const char *mode); + +PyAPI_FUNC(FILE*) _Py_fopen_obj( + PyObject *path, + const char *mode); + +PyAPI_FUNC(Py_ssize_t) _Py_read( + int fd, + void *buf, + size_t count); + +PyAPI_FUNC(Py_ssize_t) _Py_write( + int fd, + const void *buf, + size_t count); + +PyAPI_FUNC(Py_ssize_t) _Py_write_noraise( + int fd, + const void *buf, + size_t count); + +#ifdef HAVE_READLINK +PyAPI_FUNC(int) _Py_wreadlink( + const wchar_t *path, + wchar_t *buf, + /* Number of characters of 'buf' buffer + including the trailing NUL character */ + size_t buflen); +#endif + +#ifdef HAVE_REALPATH +PyAPI_FUNC(wchar_t*) _Py_wrealpath( + const wchar_t *path, + wchar_t *resolved_path, + /* Number of characters of 'resolved_path' buffer + including the trailing NUL character */ + size_t resolved_path_len); +#endif + +#ifndef MS_WINDOWS +PyAPI_FUNC(int) _Py_isabs(const wchar_t *path); +#endif + +PyAPI_FUNC(int) _Py_abspath(const wchar_t *path, wchar_t **abspath_p); + +PyAPI_FUNC(wchar_t*) _Py_wgetcwd( + wchar_t *buf, + /* Number of characters of 'buf' buffer + including the trailing NUL character */ + size_t buflen); + +PyAPI_FUNC(int) _Py_get_inheritable(int fd); + +PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable, + int *atomic_flag_works); + +PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable, + int *atomic_flag_works); + +PyAPI_FUNC(int) _Py_dup(int fd); + +#ifndef MS_WINDOWS +PyAPI_FUNC(int) _Py_get_blocking(int fd); + +PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking); +#endif /* !MS_WINDOWS */ diff --git a/src/external/windows/include/python/cpython/frameobject.h b/src/external/windows/include/python/cpython/frameobject.h new file mode 100755 index 00000000..85255fa5 --- /dev/null +++ b/src/external/windows/include/python/cpython/frameobject.h @@ -0,0 +1,84 @@ +/* Frame object interface */ + +#ifndef Py_CPYTHON_FRAMEOBJECT_H +# error "this header file must not be included directly" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + int b_type; /* what kind of block this is */ + int b_handler; /* where to jump to find handler */ + int b_level; /* value stack level to pop to */ +} PyTryBlock; + +struct _frame { + PyObject_VAR_HEAD + struct _frame *f_back; /* previous frame, or NULL */ + PyCodeObject *f_code; /* code segment */ + PyObject *f_builtins; /* builtin symbol table (PyDictObject) */ + PyObject *f_globals; /* global symbol table (PyDictObject) */ + PyObject *f_locals; /* local symbol table (any mapping) */ + PyObject **f_valuestack; /* points after the last local */ + /* Next free slot in f_valuestack. Frame creation sets to f_valuestack. + Frame evaluation usually NULLs it, but a frame that yields sets it + to the current stack top. */ + PyObject **f_stacktop; + PyObject *f_trace; /* Trace function */ + char f_trace_lines; /* Emit per-line trace events? */ + char f_trace_opcodes; /* Emit per-opcode trace events? */ + + /* Borrowed reference to a generator, or NULL */ + PyObject *f_gen; + + int f_lasti; /* Last instruction if called */ + /* Call PyFrame_GetLineNumber() instead of reading this field + directly. As of 2.3 f_lineno is only valid when tracing is + active (i.e. when f_trace is set). At other times we use + PyCode_Addr2Line to calculate the line from the current + bytecode index. */ + int f_lineno; /* Current line number */ + int f_iblock; /* index in f_blockstack */ + char f_executing; /* whether the frame is still executing */ + PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */ + PyObject *f_localsplus[1]; /* locals+stack, dynamically sized */ +}; + + +/* Standard object interface */ + +PyAPI_DATA(PyTypeObject) PyFrame_Type; + +#define PyFrame_Check(op) Py_IS_TYPE(op, &PyFrame_Type) + +PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *, + PyObject *, PyObject *); + +/* only internal use */ +PyFrameObject* _PyFrame_New_NoTrack(PyThreadState *, PyCodeObject *, + PyObject *, PyObject *); + + +/* The rest of the interface is specific for frame objects */ + +/* Block management functions */ + +PyAPI_FUNC(void) PyFrame_BlockSetup(PyFrameObject *, int, int, int); +PyAPI_FUNC(PyTryBlock *) PyFrame_BlockPop(PyFrameObject *); + +/* Conversions between "fast locals" and locals in dictionary */ + +PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int); + +PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f); +PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *); + +PyAPI_FUNC(void) _PyFrame_DebugMallocStats(FILE *out); + +PyAPI_FUNC(PyFrameObject *) PyFrame_GetBack(PyFrameObject *frame); + +#ifdef __cplusplus +} +#endif diff --git a/src/external/windows/include/python/cpython/import.h b/src/external/windows/include/python/cpython/import.h new file mode 100755 index 00000000..ab711e9a --- /dev/null +++ b/src/external/windows/include/python/cpython/import.h @@ -0,0 +1,50 @@ +#ifndef Py_CPYTHON_IMPORT_H +# error "this header file must not be included directly" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +PyMODINIT_FUNC PyInit__imp(void); + +PyAPI_FUNC(int) _PyImport_IsInitialized(PyInterpreterState *); + +PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(struct _Py_Identifier *name); +PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module); +PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module); + +PyAPI_FUNC(void) _PyImport_AcquireLock(void); +PyAPI_FUNC(int) _PyImport_ReleaseLock(void); + +PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *); + +PyAPI_FUNC(int) _PyImport_FixupBuiltin( + PyObject *mod, + const char *name, /* UTF-8 encoded string */ + PyObject *modules + ); +PyAPI_FUNC(int) _PyImport_FixupExtensionObject(PyObject*, PyObject *, + PyObject *, PyObject *); + +struct _inittab { + const char *name; /* ASCII encoded string */ + PyObject* (*initfunc)(void); +}; +PyAPI_DATA(struct _inittab *) PyImport_Inittab; +PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab); + +struct _frozen { + const char *name; /* ASCII encoded string */ + const unsigned char *code; + int size; +}; + +/* Embedding apps may change this pointer to point to their favorite + collection of frozen modules: */ + +PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules; + +#ifdef __cplusplus +} +#endif diff --git a/src/external/windows/include/python/cpython/initconfig.h b/src/external/windows/include/python/cpython/initconfig.h index 4bbe13c2..94922c00 100755 --- a/src/external/windows/include/python/cpython/initconfig.h +++ b/src/external/windows/include/python/cpython/initconfig.h @@ -113,7 +113,11 @@ typedef struct { "POSIX", otherwise it is set to 0. Inherit Py_UTF8Mode value value. */ int utf8_mode; - int dev_mode; /* Development mode. PYTHONDEVMODE, -X dev */ + /* If non-zero, enable the Python Development Mode. + + Set to 1 by the -X dev command line option. Set by the PYTHONDEVMODE + environment variable. */ + int dev_mode; /* Memory allocator: PYTHONMALLOC env var. See PyMemAllocatorName for valid values. */ @@ -131,7 +135,7 @@ typedef struct { int isolated; /* Isolated mode? see PyPreConfig.isolated */ int use_environment; /* Use environment variables? see PyPreConfig.use_environment */ - int dev_mode; /* Development mode? See PyPreConfig.dev_mode */ + int dev_mode; /* Python Development Mode? See PyPreConfig.dev_mode */ /* Install signal handlers? Yes by default. */ int install_signal_handlers; @@ -143,13 +147,16 @@ typedef struct { Set to 1 by -X faulthandler and PYTHONFAULTHANDLER. -1 means unset. */ int faulthandler; + /* Enable PEG parser? + 1 by default, set to 0 by -X oldparser and PYTHONOLDPARSER */ + int _use_peg_parser; + /* Enable tracemalloc? Set by -X tracemalloc=N and PYTHONTRACEMALLOC. -1 means unset */ int tracemalloc; int import_time; /* PYTHONPROFILEIMPORTTIME, -X importtime */ int show_ref_count; /* -X showrefcount */ - int show_alloc_count; /* -X showalloccount */ int dump_refs; /* PYTHONDUMPREFS */ int malloc_stats; /* PYTHONMALLOCSTATS */ @@ -381,6 +388,7 @@ typedef struct { wchar_t *base_prefix; /* sys.base_prefix */ wchar_t *exec_prefix; /* sys.exec_prefix */ wchar_t *base_exec_prefix; /* sys.base_exec_prefix */ + wchar_t *platlibdir; /* sys.platlibdir */ /* --- Parameter only used by Py_Main() ---------- */ @@ -402,6 +410,18 @@ typedef struct { /* If equal to 0, stop Python initialization before the "main" phase */ int _init_main; + + /* If non-zero, disallow threads, subprocesses, and fork. + Default: 0. */ + int _isolated_interpreter; + + /* Original command line arguments. If _orig_argv is empty and _argv is + not equal to [''], PyConfig_Read() copies the configuration 'argv' list + into '_orig_argv' list before modifying 'argv' list (if parse_argv + is non-zero). + + _PyConfig_Write() initializes Py_GetArgcArgv() to this list. */ + PyWideStringList _orig_argv; } PyConfig; PyAPI_FUNC(void) PyConfig_InitPythonConfig(PyConfig *config); @@ -427,6 +447,14 @@ PyAPI_FUNC(PyStatus) PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items); + +/* --- Helper functions --------------------------------------- */ + +/* Get the original command line arguments, before Python modified them. + + See also PyConfig._orig_argv. */ +PyAPI_FUNC(void) Py_GetArgcArgv(int *argc, wchar_t ***argv); + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/cpython/listobject.h b/src/external/windows/include/python/cpython/listobject.h new file mode 100755 index 00000000..54972b74 --- /dev/null +++ b/src/external/windows/include/python/cpython/listobject.h @@ -0,0 +1,43 @@ +#ifndef Py_CPYTHON_LISTOBJECT_H +# error "this header file must not be included directly" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + PyObject_VAR_HEAD + /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */ + PyObject **ob_item; + + /* ob_item contains space for 'allocated' elements. The number + * currently in use is ob_size. + * Invariants: + * 0 <= ob_size <= allocated + * len(list) == ob_size + * ob_item == NULL implies ob_size == allocated == 0 + * list.sort() temporarily sets allocated to -1 to detect mutations. + * + * Items must normally not be NULL, except during construction when + * the list is not yet visible outside the function that builds it. + */ + Py_ssize_t allocated; +} PyListObject; + +PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *); +PyAPI_FUNC(void) _PyList_DebugMallocStats(FILE *out); + +/* Macro, trading safety for speed */ + +/* Cast argument to PyTupleObject* type. */ +#define _PyList_CAST(op) (assert(PyList_Check(op)), (PyListObject *)(op)) + +#define PyList_GET_ITEM(op, i) (_PyList_CAST(op)->ob_item[i]) +#define PyList_SET_ITEM(op, i, v) (_PyList_CAST(op)->ob_item[i] = (v)) +#define PyList_GET_SIZE(op) Py_SIZE(_PyList_CAST(op)) +#define _PyList_ITEMS(op) (_PyList_CAST(op)->ob_item) + +#ifdef __cplusplus +} +#endif diff --git a/src/external/windows/include/python/cpython/methodobject.h b/src/external/windows/include/python/cpython/methodobject.h new file mode 100755 index 00000000..a2c4857e --- /dev/null +++ b/src/external/windows/include/python/cpython/methodobject.h @@ -0,0 +1,35 @@ +#ifndef Py_CPYTHON_METHODOBJECT_H +# error "this header file must not be included directly" +#endif + +PyAPI_DATA(PyTypeObject) PyCMethod_Type; + +#define PyCMethod_CheckExact(op) Py_IS_TYPE(op, &PyCMethod_Type) +#define PyCMethod_Check(op) PyObject_TypeCheck(op, &PyCMethod_Type) + +/* Macros for direct access to these values. Type checks are *not* + done, so use with care. */ +#define PyCFunction_GET_FUNCTION(func) \ + (((PyCFunctionObject *)func) -> m_ml -> ml_meth) +#define PyCFunction_GET_SELF(func) \ + (((PyCFunctionObject *)func) -> m_ml -> ml_flags & METH_STATIC ? \ + NULL : ((PyCFunctionObject *)func) -> m_self) +#define PyCFunction_GET_FLAGS(func) \ + (((PyCFunctionObject *)func) -> m_ml -> ml_flags) +#define PyCFunction_GET_CLASS(func) \ + (((PyCFunctionObject *)func) -> m_ml -> ml_flags & METH_METHOD ? \ + ((PyCMethodObject *)func) -> mm_class : NULL) + +typedef struct { + PyObject_HEAD + PyMethodDef *m_ml; /* Description of the C function to call */ + PyObject *m_self; /* Passed as 'self' arg to the C func, can be NULL */ + PyObject *m_module; /* The __module__ attribute, can be anything */ + PyObject *m_weakreflist; /* List of weak references */ + vectorcallfunc vectorcall; +} PyCFunctionObject; + +typedef struct { + PyCFunctionObject func; + PyTypeObject *mm_class; /* Class that defines this method */ +} PyCMethodObject; diff --git a/src/external/windows/include/python/cpython/object.h b/src/external/windows/include/python/cpython/object.h index 12f53f57..98fb144c 100755 --- a/src/external/windows/include/python/cpython/object.h +++ b/src/external/windows/include/python/cpython/object.h @@ -6,6 +6,22 @@ extern "C" { #endif +PyAPI_FUNC(void) _Py_NewReference(PyObject *op); + +#ifdef Py_TRACE_REFS +/* Py_TRACE_REFS is such major surgery that we call external routines. */ +PyAPI_FUNC(void) _Py_ForgetReference(PyObject *); +#endif + +/* Update the Python traceback of an object. This function must be called + when a memory block is reused from a free list. */ +PyAPI_FUNC(int) _PyTraceMalloc_NewReference(PyObject *op); + +#ifdef Py_REF_DEBUG +PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void); +#endif + + /********************* String Literals ****************************************/ /* This structure helps managing static strings. The basic usage goes like this: Instead of doing @@ -20,7 +36,7 @@ extern "C" { PyId_foo is a static variable, either on block level or file level. On first usage, the string "foo" is interned, and the structures are linked. On interpreter - shutdown, all strings are released (through _PyUnicode_ClearStaticStrings). + shutdown, all strings are released. Alternatively, _Py_static_string allows choosing the variable name. _PyUnicode_FromId returns a borrowed reference to the interned string. @@ -176,7 +192,7 @@ typedef struct { * backwards-compatibility */ typedef Py_ssize_t printfunc; -typedef struct _typeobject { +struct _typeobject { PyObject_VAR_HEAD const char *tp_name; /* For printing, in format "." */ Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */ @@ -257,19 +273,7 @@ typedef struct _typeobject { destructor tp_finalize; vectorcallfunc tp_vectorcall; - - /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */ - Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int); - -#ifdef COUNT_ALLOCS - /* these must be last and never explicitly initialized */ - Py_ssize_t tp_allocs; - Py_ssize_t tp_frees; - Py_ssize_t tp_maxalloc; - struct _typeobject *tp_prev; - struct _typeobject *tp_next; -#endif -} PyTypeObject; +}; /* The *real* layout of a type object when allocated on the heap */ typedef struct _heaptypeobject { @@ -287,6 +291,7 @@ typedef struct _heaptypeobject { PyBufferProcs as_buffer; PyObject *ht_name, *ht_slots, *ht_qualname; struct _dictkeysobject *ht_cached_keys; + PyObject *ht_module; /* here are optional user slots, followed by the members. */ } PyHeapTypeObject; @@ -323,6 +328,9 @@ PyAPI_FUNC(int) _PyObject_HasAttrId(PyObject *, struct _Py_Identifier *); */ PyAPI_FUNC(int) _PyObject_LookupAttr(PyObject *, PyObject *, PyObject **); PyAPI_FUNC(int) _PyObject_LookupAttrId(PyObject *, struct _Py_Identifier *, PyObject **); + +PyAPI_FUNC(int) _PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *); PyAPI_FUNC(PyObject *) _PyObject_NextNotImplemented(PyObject *); PyAPI_FUNC(void) PyObject_CallFinalizer(PyObject *); @@ -336,20 +344,7 @@ PyAPI_FUNC(int) _PyObject_GenericSetAttrWithDict(PyObject *, PyObject *, PyObject *, PyObject *); -#define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0) - -static inline void _Py_Dealloc_inline(PyObject *op) -{ - destructor dealloc = Py_TYPE(op)->tp_dealloc; -#ifdef Py_TRACE_REFS - _Py_ForgetReference(op); -#else - _Py_INC_TPFREES(op); -#endif - (*dealloc)(op); -} -#define _Py_Dealloc(op) _Py_Dealloc_inline(op) - +PyAPI_FUNC(PyObject *) _PyObject_FunctionStr(PyObject *); /* Safely decref `op` and set `op` to `op2`. * @@ -393,11 +388,6 @@ PyAPI_DATA(PyTypeObject) _PyNotImplemented_Type; */ PyAPI_DATA(int) _Py_SwappedOp[]; -/* This is the old private API, invoked by the macros before 3.2.4. - Kept for binary compatibility of extensions using the stable ABI. */ -PyAPI_FUNC(void) _PyTrash_deposit_object(PyObject*); -PyAPI_FUNC(void) _PyTrash_destroy_chain(void); - PyAPI_FUNC(void) _PyDebugAllocatorStats(FILE *out, const char *block_name, int num_blocks, size_t sizeof_block); @@ -444,7 +434,7 @@ _PyObject_DebugTypeStats(FILE *out); NDEBUG against a Python built with NDEBUG defined. msg, expr and function can be NULL. */ -PyAPI_FUNC(void) _PyObject_AssertFailed( +PyAPI_FUNC(void) _Py_NO_RETURN _PyObject_AssertFailed( PyObject *obj, const char *expr, const char *msg, @@ -467,6 +457,100 @@ PyAPI_FUNC(int) _PyObject_CheckConsistency( PyObject *op, int check_content); + +/* Trashcan mechanism, thanks to Christian Tismer. + +When deallocating a container object, it's possible to trigger an unbounded +chain of deallocations, as each Py_DECREF in turn drops the refcount on "the +next" object in the chain to 0. This can easily lead to stack overflows, +especially in threads (which typically have less stack space to work with). + +A container object can avoid this by bracketing the body of its tp_dealloc +function with a pair of macros: + +static void +mytype_dealloc(mytype *p) +{ + ... declarations go here ... + + PyObject_GC_UnTrack(p); // must untrack first + Py_TRASHCAN_BEGIN(p, mytype_dealloc) + ... The body of the deallocator goes here, including all calls ... + ... to Py_DECREF on contained objects. ... + Py_TRASHCAN_END // there should be no code after this +} + +CAUTION: Never return from the middle of the body! If the body needs to +"get out early", put a label immediately before the Py_TRASHCAN_END +call, and goto it. Else the call-depth counter (see below) will stay +above 0 forever, and the trashcan will never get emptied. + +How it works: The BEGIN macro increments a call-depth counter. So long +as this counter is small, the body of the deallocator is run directly without +further ado. But if the counter gets large, it instead adds p to a list of +objects to be deallocated later, skips the body of the deallocator, and +resumes execution after the END macro. The tp_dealloc routine then returns +without deallocating anything (and so unbounded call-stack depth is avoided). + +When the call stack finishes unwinding again, code generated by the END macro +notices this, and calls another routine to deallocate all the objects that +may have been added to the list of deferred deallocations. In effect, a +chain of N deallocations is broken into (N-1)/(PyTrash_UNWIND_LEVEL-1) pieces, +with the call stack never exceeding a depth of PyTrash_UNWIND_LEVEL. + +Since the tp_dealloc of a subclass typically calls the tp_dealloc of the base +class, we need to ensure that the trashcan is only triggered on the tp_dealloc +of the actual class being deallocated. Otherwise we might end up with a +partially-deallocated object. To check this, the tp_dealloc function must be +passed as second argument to Py_TRASHCAN_BEGIN(). +*/ + +/* This is the old private API, invoked by the macros before 3.2.4. + Kept for binary compatibility of extensions using the stable ABI. */ +PyAPI_FUNC(void) _PyTrash_deposit_object(PyObject*); +PyAPI_FUNC(void) _PyTrash_destroy_chain(void); + +/* This is the old private API, invoked by the macros before 3.9. + Kept for binary compatibility of extensions using the stable ABI. */ +PyAPI_FUNC(void) _PyTrash_thread_deposit_object(PyObject*); +PyAPI_FUNC(void) _PyTrash_thread_destroy_chain(void); + +/* Forward declarations for PyThreadState */ +struct _ts; + +/* Python 3.9 private API, invoked by the macros below. */ +PyAPI_FUNC(int) _PyTrash_begin(struct _ts *tstate, PyObject *op); +PyAPI_FUNC(void) _PyTrash_end(struct _ts *tstate); + +#define PyTrash_UNWIND_LEVEL 50 + +#define Py_TRASHCAN_BEGIN_CONDITION(op, cond) \ + do { \ + PyThreadState *_tstate = NULL; \ + /* If "cond" is false, then _tstate remains NULL and the deallocator \ + * is run normally without involving the trashcan */ \ + if (cond) { \ + _tstate = PyThreadState_GET(); \ + if (_PyTrash_begin(_tstate, _PyObject_CAST(op))) { \ + break; \ + } \ + } + /* The body of the deallocator is here. */ +#define Py_TRASHCAN_END \ + if (_tstate) { \ + _PyTrash_end(_tstate); \ + } \ + } while (0); + +#define Py_TRASHCAN_BEGIN(op, dealloc) \ + Py_TRASHCAN_BEGIN_CONDITION(op, \ + Py_TYPE(op)->tp_dealloc == (destructor)(dealloc)) + +/* For backwards compatibility, these macros enable the trashcan + * unconditionally */ +#define Py_TRASHCAN_SAFE_BEGIN(op) Py_TRASHCAN_BEGIN_CONDITION(op, 1) +#define Py_TRASHCAN_SAFE_END(op) Py_TRASHCAN_END + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/cpython/objimpl.h b/src/external/windows/include/python/cpython/objimpl.h index 7df222c2..0e06e372 100755 --- a/src/external/windows/include/python/cpython/objimpl.h +++ b/src/external/windows/include/python/cpython/objimpl.h @@ -6,6 +6,89 @@ extern "C" { #endif +#define _PyObject_SIZE(typeobj) ( (typeobj)->tp_basicsize ) + +/* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a + vrbl-size object with nitems items, exclusive of gc overhead (if any). The + value is rounded up to the closest multiple of sizeof(void *), in order to + ensure that pointer fields at the end of the object are correctly aligned + for the platform (this is of special importance for subclasses of, e.g., + str or int, so that pointers can be stored after the embedded data). + + Note that there's no memory wastage in doing this, as malloc has to + return (at worst) pointer-aligned memory anyway. +*/ +#if ((SIZEOF_VOID_P - 1) & SIZEOF_VOID_P) != 0 +# error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2" +#endif + +#define _PyObject_VAR_SIZE(typeobj, nitems) \ + _Py_SIZE_ROUND_UP((typeobj)->tp_basicsize + \ + (nitems)*(typeobj)->tp_itemsize, \ + SIZEOF_VOID_P) + + +/* This example code implements an object constructor with a custom + allocator, where PyObject_New is inlined, and shows the important + distinction between two steps (at least): + 1) the actual allocation of the object storage; + 2) the initialization of the Python specific fields + in this storage with PyObject_{Init, InitVar}. + + PyObject * + YourObject_New(...) + { + PyObject *op; + + op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct)); + if (op == NULL) + return PyErr_NoMemory(); + + PyObject_Init(op, &YourTypeStruct); + + op->ob_field = value; + ... + return op; + } + + Note that in C++, the use of the new operator usually implies that + the 1st step is performed automatically for you, so in a C++ class + constructor you would start directly with PyObject_Init/InitVar. */ + + +/* Inline functions trading binary compatibility for speed: + PyObject_INIT() is the fast version of PyObject_Init(), and + PyObject_INIT_VAR() is the fast version of PyObject_InitVar(). + + These inline functions must not be called with op=NULL. */ +static inline PyObject* +_PyObject_INIT(PyObject *op, PyTypeObject *typeobj) +{ + assert(op != NULL); + Py_SET_TYPE(op, typeobj); + if (PyType_GetFlags(typeobj) & Py_TPFLAGS_HEAPTYPE) { + Py_INCREF(typeobj); + } + _Py_NewReference(op); + return op; +} + +#define PyObject_INIT(op, typeobj) \ + _PyObject_INIT(_PyObject_CAST(op), (typeobj)) + +static inline PyVarObject* +_PyObject_INIT_VAR(PyVarObject *op, PyTypeObject *typeobj, Py_ssize_t size) +{ + assert(op != NULL); + Py_SET_SIZE(op, size); + PyObject_INIT((PyObject *)op, typeobj); + return op; +} + +#define PyObject_INIT_VAR(op, typeobj, size) \ + _PyObject_INIT_VAR(_PyVarObject_CAST(op), (typeobj), (size)) + + /* This function returns the number of allocated memory blocks, regardless of size */ PyAPI_FUNC(Py_ssize_t) _Py_GetAllocatedBlocks(void); @@ -37,66 +120,16 @@ PyAPI_FUNC(Py_ssize_t) _PyGC_CollectNoFail(void); PyAPI_FUNC(Py_ssize_t) _PyGC_CollectIfEnabled(void); -/* Test if an object has a GC head */ -#define PyObject_IS_GC(o) \ - (PyType_IS_GC(Py_TYPE(o)) \ - && (Py_TYPE(o)->tp_is_gc == NULL || Py_TYPE(o)->tp_is_gc(o))) - -/* GC information is stored BEFORE the object structure. */ -typedef struct { - // Pointer to next object in the list. - // 0 means the object is not tracked - uintptr_t _gc_next; - - // Pointer to previous object in the list. - // Lowest two bits are used for flags documented later. - uintptr_t _gc_prev; -} PyGC_Head; - -#define _Py_AS_GC(o) ((PyGC_Head *)(o)-1) - -/* True if the object is currently tracked by the GC. */ -#define _PyObject_GC_IS_TRACKED(o) (_Py_AS_GC(o)->_gc_next != 0) - -/* True if the object may be tracked by the GC in the future, or already is. - This can be useful to implement some optimizations. */ -#define _PyObject_GC_MAY_BE_TRACKED(obj) \ - (PyObject_IS_GC(obj) && \ - (!PyTuple_CheckExact(obj) || _PyObject_GC_IS_TRACKED(obj))) +/* Test if an object implements the garbage collector protocol */ +PyAPI_FUNC(int) PyObject_IS_GC(PyObject *obj); -/* Bit flags for _gc_prev */ -/* Bit 0 is set when tp_finalize is called */ -#define _PyGC_PREV_MASK_FINALIZED (1) -/* Bit 1 is set when the object is in generation which is GCed currently. */ -#define _PyGC_PREV_MASK_COLLECTING (2) -/* The (N-2) most significant bits contain the real address. */ -#define _PyGC_PREV_SHIFT (2) -#define _PyGC_PREV_MASK (((uintptr_t) -1) << _PyGC_PREV_SHIFT) - -// Lowest bit of _gc_next is used for flags only in GC. -// But it is always 0 for normal code. -#define _PyGCHead_NEXT(g) ((PyGC_Head*)(g)->_gc_next) -#define _PyGCHead_SET_NEXT(g, p) ((g)->_gc_next = (uintptr_t)(p)) - -// Lowest two bits of _gc_prev is used for _PyGC_PREV_MASK_* flags. -#define _PyGCHead_PREV(g) ((PyGC_Head*)((g)->_gc_prev & _PyGC_PREV_MASK)) -#define _PyGCHead_SET_PREV(g, p) do { \ - assert(((uintptr_t)p & ~_PyGC_PREV_MASK) == 0); \ - (g)->_gc_prev = ((g)->_gc_prev & ~_PyGC_PREV_MASK) \ - | ((uintptr_t)(p)); \ - } while (0) - -#define _PyGCHead_FINALIZED(g) \ - (((g)->_gc_prev & _PyGC_PREV_MASK_FINALIZED) != 0) -#define _PyGCHead_SET_FINALIZED(g) \ - ((g)->_gc_prev |= _PyGC_PREV_MASK_FINALIZED) - -#define _PyGC_FINALIZED(o) \ - _PyGCHead_FINALIZED(_Py_AS_GC(o)) -#define _PyGC_SET_FINALIZED(o) \ - _PyGCHead_SET_FINALIZED(_Py_AS_GC(o)) - +/* Code built with Py_BUILD_CORE must include pycore_gc.h instead which + defines a different _PyGC_FINALIZED() macro. */ +#ifndef Py_BUILD_CORE + // Kept for backward compatibility with Python 3.8 +# define _PyGC_FINALIZED(o) PyObject_GC_IsFinalized(o) +#endif PyAPI_FUNC(PyObject *) _PyObject_GC_Malloc(size_t size); PyAPI_FUNC(PyObject *) _PyObject_GC_Calloc(size_t size); @@ -105,8 +138,7 @@ PyAPI_FUNC(PyObject *) _PyObject_GC_Calloc(size_t size); /* Test if a type supports weak references */ #define PyType_SUPPORTS_WEAKREFS(t) ((t)->tp_weaklistoffset > 0) -#define PyObject_GET_WEAKREFS_LISTPTR(o) \ - ((PyObject **) (((char *) (o)) + Py_TYPE(o)->tp_weaklistoffset)) +PyAPI_FUNC(PyObject **) PyObject_GET_WEAKREFS_LISTPTR(PyObject *op); #ifdef __cplusplus } diff --git a/src/external/windows/include/python/cpython/pyerrors.h b/src/external/windows/include/python/cpython/pyerrors.h index cc16403b..f9efa158 100755 --- a/src/external/windows/include/python/cpython/pyerrors.h +++ b/src/external/windows/include/python/cpython/pyerrors.h @@ -75,7 +75,8 @@ typedef PyOSErrorObject PyWindowsErrorObject; /* Error handling definitions */ PyAPI_FUNC(void) _PyErr_SetKeyError(PyObject *); -_PyErr_StackItem *_PyErr_GetTopmostException(PyThreadState *tstate); +PyAPI_FUNC(_PyErr_StackItem*) _PyErr_GetTopmostException(PyThreadState *tstate); +PyAPI_FUNC(void) _PyErr_GetExcInfo(PyThreadState *, PyObject **, PyObject **, PyObject **); /* Context manipulation (PEP 3134) */ @@ -148,7 +149,10 @@ PyAPI_FUNC(PyObject *) PyErr_ProgramTextObject( PyObject *filename, int lineno); -/* Create a UnicodeEncodeError object */ +/* Create a UnicodeEncodeError object. + * + * TODO: This API will be removed in Python 3.11. + */ Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create( const char *encoding, /* UTF-8 encoded string */ const Py_UNICODE *object, @@ -158,7 +162,10 @@ Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create( const char *reason /* UTF-8 encoded string */ ); -/* Create a UnicodeTranslateError object */ +/* Create a UnicodeTranslateError object. + * + * TODO: This API will be removed in Python 3.11. + */ Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create( const Py_UNICODE *object, Py_ssize_t length, @@ -177,6 +184,17 @@ PyAPI_FUNC(void) _PyErr_WriteUnraisableMsg( const char *err_msg, PyObject *obj); +PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFunc( + const char *func, + const char *message); + +PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFormat( + const char *func, + const char *format, + ...); + +#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, message) + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/cpython/pylifecycle.h b/src/external/windows/include/python/cpython/pylifecycle.h index d93cd1d3..f226daca 100755 --- a/src/external/windows/include/python/cpython/pylifecycle.h +++ b/src/external/windows/include/python/cpython/pylifecycle.h @@ -32,14 +32,6 @@ PyAPI_FUNC(int) _Py_IsCoreInitialized(void); PyAPI_FUNC(PyStatus) Py_InitializeFromConfig( const PyConfig *config); -PyAPI_FUNC(PyStatus) _Py_InitializeFromArgs( - const PyConfig *config, - Py_ssize_t argc, - char * const *argv); -PyAPI_FUNC(PyStatus) _Py_InitializeFromWideArgs( - const PyConfig *config, - Py_ssize_t argc, - wchar_t * const *argv); PyAPI_FUNC(PyStatus) _Py_InitializeMain(void); PyAPI_FUNC(int) Py_RunMain(void); @@ -73,6 +65,8 @@ PyAPI_FUNC(int) _Py_CoerceLegacyLocale(int warn); PyAPI_FUNC(int) _Py_LegacyLocaleDetected(int warn); PyAPI_FUNC(char *) _Py_SetLocaleFromEnv(int category); +PyAPI_FUNC(PyThreadState *) _Py_NewInterpreter(int isolated_subinterpreter); + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/cpython/pystate.h b/src/external/windows/include/python/cpython/pystate.h index 5addb1c3..5ce79d03 100755 --- a/src/external/windows/include/python/cpython/pystate.h +++ b/src/external/windows/include/python/cpython/pystate.h @@ -16,7 +16,7 @@ PyAPI_FUNC(PyObject *) _PyInterpreterState_GetMainModule(PyInterpreterState *); /* State unique per thread */ /* Py_tracefunc return -1 when raising an exception, or 0 for success. */ -typedef int (*Py_tracefunc)(PyObject *, struct _frame *, int, PyObject *); +typedef int (*Py_tracefunc)(PyObject *, PyFrameObject *, int, PyObject *); /* The following values are used for 'what' for tracefunc functions * @@ -56,7 +56,7 @@ struct _ts { PyInterpreterState *interp; /* Borrowed reference to the current frame (it can be NULL) */ - struct _frame *frame; + PyFrameObject *frame; int recursion_depth; char overflowed; /* The stack has overflowed. Allow 50 more calls to handle the runtime error. */ @@ -140,22 +140,17 @@ struct _ts { }; -/* Get the current interpreter state. +// Alias for backward compatibility with Python 3.8 +#define _PyInterpreterState_Get PyInterpreterState_Get - Issue a fatal error if there no current Python thread state or no current - interpreter. It cannot return NULL. - - The caller must hold the GIL.*/ -PyAPI_FUNC(PyInterpreterState *) _PyInterpreterState_Get(void); - -PyAPI_FUNC(int) _PyState_AddModule(PyObject*, struct PyModuleDef*); -PyAPI_FUNC(void) _PyState_ClearModules(void); PyAPI_FUNC(PyThreadState *) _PyThreadState_Prealloc(PyInterpreterState *); /* Similar to PyThreadState_Get(), but don't issue a fatal error * if it is NULL. */ PyAPI_FUNC(PyThreadState *) _PyThreadState_UncheckedGet(void); +PyAPI_FUNC(PyObject *) _PyThreadState_GetDict(PyThreadState *tstate); + /* PyGILState */ /* Helper/diagnostic function - return 1 if the current thread @@ -170,7 +165,7 @@ PyAPI_FUNC(int) PyGILState_Check(void); This function doesn't check for error. Return NULL before _PyGILState_Init() is called and after _PyGILState_Fini() is called. - See also _PyInterpreterState_Get() and _PyInterpreterState_GET_UNSAFE(). */ + See also _PyInterpreterState_Get() and _PyInterpreterState_GET(). */ PyAPI_FUNC(PyInterpreterState *) _PyGILState_GetInterpreterStateUnsafe(void); /* The implementation of sys._current_frames() Returns a dict mapping @@ -185,8 +180,24 @@ PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Head(void); PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Next(PyInterpreterState *); PyAPI_FUNC(PyThreadState *) PyInterpreterState_ThreadHead(PyInterpreterState *); PyAPI_FUNC(PyThreadState *) PyThreadState_Next(PyThreadState *); +PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void); + +/* Frame evaluation API */ + +typedef PyObject* (*_PyFrameEvalFunction)(PyThreadState *tstate, PyFrameObject *, int); + +PyAPI_FUNC(_PyFrameEvalFunction) _PyInterpreterState_GetEvalFrameFunc( + PyInterpreterState *interp); +PyAPI_FUNC(void) _PyInterpreterState_SetEvalFrameFunc( + PyInterpreterState *interp, + _PyFrameEvalFunction eval_frame); + +PyAPI_FUNC(const PyConfig*) _PyInterpreterState_GetConfig(PyInterpreterState *interp); + +// Get the configuration of the currrent interpreter. +// The caller must hold the GIL. +PyAPI_FUNC(const PyConfig*) _Py_GetConfig(void); -typedef struct _frame *(*PyThreadFrameGetter)(PyThreadState *self_); /* cross-interpreter data */ diff --git a/src/external/windows/include/python/cpython/sysmodule.h b/src/external/windows/include/python/cpython/sysmodule.h index 785940ce..e11939ae 100755 --- a/src/external/windows/include/python/cpython/sysmodule.h +++ b/src/external/windows/include/python/cpython/sysmodule.h @@ -13,7 +13,10 @@ PyAPI_FUNC(size_t) _PySys_GetSizeOf(PyObject *); typedef int(*Py_AuditHookFunction)(const char *, PyObject *, void *); -PyAPI_FUNC(int) PySys_Audit(const char*, const char *, ...); +PyAPI_FUNC(int) PySys_Audit( + const char *event, + const char *argFormat, + ...); PyAPI_FUNC(int) PySys_AddAuditHook(Py_AuditHookFunction, void*); #ifdef __cplusplus diff --git a/src/external/windows/include/python/cpython/traceback.h b/src/external/windows/include/python/cpython/traceback.h index 93ad6866..227aa25c 100755 --- a/src/external/windows/include/python/cpython/traceback.h +++ b/src/external/windows/include/python/cpython/traceback.h @@ -9,7 +9,7 @@ extern "C" { typedef struct _traceback { PyObject_HEAD struct _traceback *tb_next; - struct _frame *tb_frame; + PyFrameObject *tb_frame; int tb_lasti; int tb_lineno; } PyTracebackObject; diff --git a/src/external/windows/include/python/cpython/unicodeobject.h b/src/external/windows/include/python/cpython/unicodeobject.h index 7fcdd634..f8bae0b1 100755 --- a/src/external/windows/include/python/cpython/unicodeobject.h +++ b/src/external/windows/include/python/cpython/unicodeobject.h @@ -22,7 +22,7 @@ extern "C" { */ #define Py_UNICODE_ISSPACE(ch) \ - ((ch) < 128U ? _Py_ascii_whitespace[(ch)] : _PyUnicode_IsWhitespace(ch)) + ((Py_UCS4)(ch) < 128U ? _Py_ascii_whitespace[(ch)] : _PyUnicode_IsWhitespace(ch)) #define Py_UNICODE_ISLOWER(ch) _PyUnicode_IsLowercase(ch) #define Py_UNICODE_ISUPPER(ch) _PyUnicode_IsUppercase(ch) @@ -50,13 +50,18 @@ extern "C" { Py_UNICODE_ISDIGIT(ch) || \ Py_UNICODE_ISNUMERIC(ch)) -#define Py_UNICODE_COPY(target, source, length) \ - memcpy((target), (source), (length)*sizeof(Py_UNICODE)) +Py_DEPRECATED(3.3) static inline void +Py_UNICODE_COPY(Py_UNICODE *target, const Py_UNICODE *source, Py_ssize_t length) { + memcpy(target, source, (size_t)(length) * sizeof(Py_UNICODE)); +} -#define Py_UNICODE_FILL(target, value, length) \ - do {Py_ssize_t i_; Py_UNICODE *t_ = (target); Py_UNICODE v_ = (value);\ - for (i_ = 0; i_ < (length); i_++) t_[i_] = v_;\ - } while (0) +Py_DEPRECATED(3.3) static inline void +Py_UNICODE_FILL(Py_UNICODE *target, Py_UNICODE value, Py_ssize_t length) { + Py_ssize_t i; + for (i = 0; i < length; i++) { + target[i] = value; + } +} /* macros to work with surrogates */ #define Py_UNICODE_IS_SURROGATE(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF) @@ -71,14 +76,6 @@ extern "C" { /* low surrogate = bottom 10 bits added to DC00 */ #define Py_UNICODE_LOW_SURROGATE(ch) (0xDC00 + ((ch) & 0x3FF)) -/* Check if substring matches at given offset. The offset must be - valid, and the substring must not be empty. */ - -#define Py_UNICODE_MATCH(string, offset, substring) \ - ((*((string)->wstr + (offset)) == *((substring)->wstr)) && \ - ((*((string)->wstr + (offset) + (substring)->wstr_length-1) == *((substring)->wstr + (substring)->wstr_length-1))) && \ - !memcmp((string)->wstr + (offset), (substring)->wstr, (substring)->wstr_length*sizeof(Py_UNICODE))) - /* --- Unicode Type ------------------------------------------------------- */ /* ASCII-only strings created through PyUnicode_New use the PyASCIIObject @@ -251,10 +248,6 @@ PyAPI_FUNC(int) _PyUnicode_CheckConsistency( int check_content); /* Fast access macros */ -#define PyUnicode_WSTR_LENGTH(op) \ - (PyUnicode_IS_COMPACT_ASCII(op) ? \ - ((PyASCIIObject*)op)->length : \ - ((PyCompactUnicodeObject*)op)->wstr_length) /* Returns the deprecated Py_UNICODE representation's size in code units (this includes surrogate pairs as 2 units). @@ -449,6 +442,14 @@ enum PyUnicode_Kind { (0xffffU) : \ (0x10ffffU))))) +Py_DEPRECATED(3.3) +static inline Py_ssize_t _PyUnicode_get_wstr_length(PyObject *op) { + return PyUnicode_IS_COMPACT_ASCII(op) ? + ((PyASCIIObject*)op)->length : + ((PyCompactUnicodeObject*)op)->wstr_length; +} +#define PyUnicode_WSTR_LENGTH(op) _PyUnicode_get_wstr_length((PyObject*)op) + /* === Public API ========================================================= */ /* --- Plain Py_UNICODE --------------------------------------------------- */ @@ -547,7 +548,7 @@ PyAPI_FUNC(void) _PyUnicode_FastFill( only allowed if u was set to NULL. The buffer is copied into the new object. */ -/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode( +Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode( const Py_UNICODE *u, /* Unicode buffer */ Py_ssize_t size /* size of buffer */ ); @@ -576,13 +577,13 @@ PyAPI_FUNC(Py_UCS4) _PyUnicode_FindMaxChar ( Py_UNICODE buffer. If the wchar_t/Py_UNICODE representation is not yet available, this function will calculate it. */ -/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode( +Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode( PyObject *unicode /* Unicode object */ ); /* Similar to PyUnicode_AsUnicode(), but raises a ValueError if the string contains null characters. */ -PyAPI_FUNC(const Py_UNICODE *) _PyUnicode_AsUnicode( +Py_DEPRECATED(3.3) PyAPI_FUNC(const Py_UNICODE *) _PyUnicode_AsUnicode( PyObject *unicode /* Unicode object */ ); @@ -591,7 +592,7 @@ PyAPI_FUNC(const Py_UNICODE *) _PyUnicode_AsUnicode( If the wchar_t/Py_UNICODE representation is not yet available, this function will calculate it. */ -/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicodeAndSize( +Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicodeAndSize( PyObject *unicode, /* Unicode object */ Py_ssize_t *size /* location where to save the length */ ); @@ -726,12 +727,6 @@ PyAPI_FUNC(int) _PyUnicode_FormatAdvancedWriter( Py_ssize_t start, Py_ssize_t end); -/* --- wchar_t support for platforms which support it --------------------- */ - -#ifdef HAVE_WCHAR_H -PyAPI_FUNC(void*) _PyUnicode_AsKind(PyObject *s, unsigned int kind); -#endif - /* --- Manage the default encoding ---------------------------------------- */ /* Returns a pointer to the default encoding (UTF-8) of the @@ -746,12 +741,6 @@ PyAPI_FUNC(void*) _PyUnicode_AsKind(PyObject *s, unsigned int kind); _PyUnicode_AsStringAndSize is a #define for PyUnicode_AsUTF8AndSize to support the previous internal function with the same behaviour. - - *** This API is for interpreter INTERNAL USE ONLY and will likely - *** be removed or changed in the future. - - *** If you need to access the Unicode object as UTF-8 bytes string, - *** please use PyUnicode_AsUTF8String() instead. */ PyAPI_FUNC(const char *) PyUnicode_AsUTF8AndSize( @@ -771,13 +760,6 @@ PyAPI_FUNC(const char *) PyUnicode_AsUTF8AndSize( Use of this API is DEPRECATED since no size information can be extracted from the returned data. - - *** This API is for interpreter INTERNAL USE ONLY and will likely - *** be removed or changed for Python 3.1. - - *** If you need to access the Unicode object as UTF-8 bytes string, - *** please use PyUnicode_AsUTF8String() instead. - */ PyAPI_FUNC(const char *) PyUnicode_AsUTF8(PyObject *unicode); @@ -990,7 +972,7 @@ Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS( */ -/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(int) PyUnicode_EncodeDecimal( +Py_DEPRECATED(3.3) PyAPI_FUNC(int) PyUnicode_EncodeDecimal( Py_UNICODE *s, /* Unicode buffer */ Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ char *output, /* Output buffer; must have size >= length */ @@ -1003,7 +985,7 @@ Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS( Returns a new Unicode string on success, NULL on failure. */ -/* Py_DEPRECATED(3.3) */ +Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_TransformDecimalToASCII( Py_UNICODE *s, /* Unicode buffer */ Py_ssize_t length /* Number of Py_UNICODE chars to transform */ @@ -1227,13 +1209,13 @@ Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE*) PyUnicode_AsUnicodeCopy( /* Return an interned Unicode object for an Identifier; may fail if there is no memory.*/ PyAPI_FUNC(PyObject*) _PyUnicode_FromId(_Py_Identifier*); -/* Clear all static strings. */ -PyAPI_FUNC(void) _PyUnicode_ClearStaticStrings(void); /* Fast equality check when the inputs are known to be exact unicode types and where the hash values are equal (i.e. a very probable match) */ PyAPI_FUNC(int) _PyUnicode_EQ(PyObject *, PyObject *); +PyAPI_FUNC(Py_ssize_t) _PyUnicode_ScanIdentifier(PyObject *); + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/datetime.h b/src/external/windows/include/python/datetime.h index d6483714..afb89470 100755 --- a/src/external/windows/include/python/datetime.h +++ b/src/external/windows/include/python/datetime.h @@ -196,19 +196,19 @@ static PyDateTime_CAPI *PyDateTimeAPI = NULL; /* Macros for type checking when not building the Python core. */ #define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType) -#define PyDate_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateType) +#define PyDate_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DateType) #define PyDateTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateTimeType) -#define PyDateTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateTimeType) +#define PyDateTime_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DateTimeType) #define PyTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TimeType) -#define PyTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TimeType) +#define PyTime_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->TimeType) #define PyDelta_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DeltaType) -#define PyDelta_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DeltaType) +#define PyDelta_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DeltaType) #define PyTZInfo_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TZInfoType) -#define PyTZInfo_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TZInfoType) +#define PyTZInfo_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->TZInfoType) /* Macros for accessing constructors in a simplified fashion. */ diff --git a/src/external/windows/include/python/dictobject.h b/src/external/windows/include/python/dictobject.h index 1febc911..54fd57a5 100755 --- a/src/external/windows/include/python/dictobject.h +++ b/src/external/windows/include/python/dictobject.h @@ -16,7 +16,7 @@ PyAPI_DATA(PyTypeObject) PyDict_Type; #define PyDict_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS) -#define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type) +#define PyDict_CheckExact(op) Py_IS_TYPE(op, &PyDict_Type) PyAPI_FUNC(PyObject *) PyDict_New(void); PyAPI_FUNC(PyObject *) PyDict_GetItem(PyObject *mp, PyObject *key); diff --git a/src/external/windows/include/python/errcode.h b/src/external/windows/include/python/errcode.h index 68104c1c..d5fed9dd 100755 --- a/src/external/windows/include/python/errcode.h +++ b/src/external/windows/include/python/errcode.h @@ -29,7 +29,6 @@ extern "C" { #define E_EOFS 23 /* EOF in triple-quoted string */ #define E_EOLS 24 /* EOL in single-quoted string */ #define E_LINECONT 25 /* Unexpected characters after a line continuation */ -#define E_IDENTIFIER 26 /* Invalid characters in identifier */ #define E_BADSINGLE 27 /* Ill-formed single statement input */ #ifdef __cplusplus diff --git a/src/external/windows/include/python/exports.h b/src/external/windows/include/python/exports.h new file mode 100755 index 00000000..20a74bb9 --- /dev/null +++ b/src/external/windows/include/python/exports.h @@ -0,0 +1,30 @@ +#ifndef Py_EXPORTS_H +#define Py_EXPORTS_H + +#if defined(_WIN32) || defined(__CYGWIN__) + #define Py_IMPORTED_SYMBOL __declspec(dllimport) + #define Py_EXPORTED_SYMBOL __declspec(dllexport) + #define Py_LOCAL_SYMBOL +#else +/* + * If we only ever used gcc >= 5, we could use __has_attribute(visibility) + * as a cross-platform way to determine if visibility is supported. However, + * we may still need to support gcc >= 4, as some Ubuntu LTS and Centos versions + * have 4 < gcc < 5. + */ + #ifndef __has_attribute + #define __has_attribute(x) 0 // Compatibility with non-clang compilers. + #endif + #if (defined(__GNUC__) && (__GNUC__ >= 4)) ||\ + (defined(__clang__) && __has_attribute(visibility)) + #define Py_IMPORTED_SYMBOL __attribute__ ((visibility ("default"))) + #define Py_EXPORTED_SYMBOL __attribute__ ((visibility ("default"))) + #define Py_LOCAL_SYMBOL __attribute__ ((visibility ("hidden"))) + #else + #define Py_IMPORTED_SYMBOL + #define Py_EXPORTED_SYMBOL + #define Py_LOCAL_SYMBOL + #endif +#endif + +#endif /* Py_EXPORTS_H */ diff --git a/src/external/windows/include/python/fileobject.h b/src/external/windows/include/python/fileobject.h index 1eee8261..cf7ba8df 100755 --- a/src/external/windows/include/python/fileobject.h +++ b/src/external/windows/include/python/fileobject.h @@ -20,8 +20,15 @@ PyAPI_FUNC(int) PyObject_AsFileDescriptor(PyObject *); If non-NULL, this is different than the default encoding for strings */ PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding; +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 +PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors; +#endif PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding; +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 +PyAPI_DATA(int) Py_UTF8Mode; +#endif + /* A routine to check if a file descriptor can be select()-ed. */ #ifdef _MSC_VER /* On Windows, any socket fd can be select()-ed, no matter how high */ diff --git a/src/external/windows/include/python/fileutils.h b/src/external/windows/include/python/fileutils.h index 2f206e92..132a6cf5 100755 --- a/src/external/windows/include/python/fileutils.h +++ b/src/external/windows/include/python/fileutils.h @@ -18,167 +18,12 @@ PyAPI_FUNC(char*) _Py_EncodeLocaleRaw( size_t *error_pos); #endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03080000 -typedef enum { - _Py_ERROR_UNKNOWN=0, - _Py_ERROR_STRICT, - _Py_ERROR_SURROGATEESCAPE, - _Py_ERROR_REPLACE, - _Py_ERROR_IGNORE, - _Py_ERROR_BACKSLASHREPLACE, - _Py_ERROR_SURROGATEPASS, - _Py_ERROR_XMLCHARREFREPLACE, - _Py_ERROR_OTHER -} _Py_error_handler; - -PyAPI_FUNC(_Py_error_handler) _Py_GetErrorHandler(const char *errors); - -PyAPI_FUNC(int) _Py_DecodeLocaleEx( - const char *arg, - wchar_t **wstr, - size_t *wlen, - const char **reason, - int current_locale, - _Py_error_handler errors); - -PyAPI_FUNC(int) _Py_EncodeLocaleEx( - const wchar_t *text, - char **str, - size_t *error_pos, - const char **reason, - int current_locale, - _Py_error_handler errors); -#endif - #ifndef Py_LIMITED_API -PyAPI_FUNC(PyObject *) _Py_device_encoding(int); - -#if defined(MS_WINDOWS) || defined(__APPLE__) - /* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611). - On macOS 10.13, read() and write() with more than INT_MAX bytes - fail with EINVAL (bpo-24658). */ -# define _PY_READ_MAX INT_MAX -# define _PY_WRITE_MAX INT_MAX -#else - /* write() should truncate the input to PY_SSIZE_T_MAX bytes, - but it's safer to do it ourself to have a portable behaviour */ -# define _PY_READ_MAX PY_SSIZE_T_MAX -# define _PY_WRITE_MAX PY_SSIZE_T_MAX +# define Py_CPYTHON_FILEUTILS_H +# include "cpython/fileutils.h" +# undef Py_CPYTHON_FILEUTILS_H #endif -#ifdef MS_WINDOWS -struct _Py_stat_struct { - unsigned long st_dev; - uint64_t st_ino; - unsigned short st_mode; - int st_nlink; - int st_uid; - int st_gid; - unsigned long st_rdev; - __int64 st_size; - time_t st_atime; - int st_atime_nsec; - time_t st_mtime; - int st_mtime_nsec; - time_t st_ctime; - int st_ctime_nsec; - unsigned long st_file_attributes; - unsigned long st_reparse_tag; -}; -#else -# define _Py_stat_struct stat -#endif - -PyAPI_FUNC(int) _Py_fstat( - int fd, - struct _Py_stat_struct *status); - -PyAPI_FUNC(int) _Py_fstat_noraise( - int fd, - struct _Py_stat_struct *status); - -PyAPI_FUNC(int) _Py_stat( - PyObject *path, - struct stat *status); - -PyAPI_FUNC(int) _Py_open( - const char *pathname, - int flags); - -PyAPI_FUNC(int) _Py_open_noraise( - const char *pathname, - int flags); - -PyAPI_FUNC(FILE *) _Py_wfopen( - const wchar_t *path, - const wchar_t *mode); - -PyAPI_FUNC(FILE*) _Py_fopen( - const char *pathname, - const char *mode); - -PyAPI_FUNC(FILE*) _Py_fopen_obj( - PyObject *path, - const char *mode); - -PyAPI_FUNC(Py_ssize_t) _Py_read( - int fd, - void *buf, - size_t count); - -PyAPI_FUNC(Py_ssize_t) _Py_write( - int fd, - const void *buf, - size_t count); - -PyAPI_FUNC(Py_ssize_t) _Py_write_noraise( - int fd, - const void *buf, - size_t count); - -#ifdef HAVE_READLINK -PyAPI_FUNC(int) _Py_wreadlink( - const wchar_t *path, - wchar_t *buf, - /* Number of characters of 'buf' buffer - including the trailing NUL character */ - size_t buflen); -#endif - -#ifdef HAVE_REALPATH -PyAPI_FUNC(wchar_t*) _Py_wrealpath( - const wchar_t *path, - wchar_t *resolved_path, - /* Number of characters of 'resolved_path' buffer - including the trailing NUL character */ - size_t resolved_path_len); -#endif - -PyAPI_FUNC(wchar_t*) _Py_wgetcwd( - wchar_t *buf, - /* Number of characters of 'buf' buffer - including the trailing NUL character */ - size_t buflen); - -PyAPI_FUNC(int) _Py_get_inheritable(int fd); - -PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable, - int *atomic_flag_works); - -PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable, - int *atomic_flag_works); - -PyAPI_FUNC(int) _Py_dup(int fd); - -#ifndef MS_WINDOWS -PyAPI_FUNC(int) _Py_get_blocking(int fd); - -PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking); -#endif /* !MS_WINDOWS */ - -#endif /* Py_LIMITED_API */ - #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/floatobject.h b/src/external/windows/include/python/floatobject.h index cc906f11..475f6add 100755 --- a/src/external/windows/include/python/floatobject.h +++ b/src/external/windows/include/python/floatobject.h @@ -21,7 +21,7 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyFloat_Type; #define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type) -#define PyFloat_CheckExact(op) (Py_TYPE(op) == &PyFloat_Type) +#define PyFloat_CheckExact(op) Py_IS_TYPE(op, &PyFloat_Type) #ifdef Py_NAN #define Py_RETURN_NAN return PyFloat_FromDouble(Py_NAN) @@ -88,15 +88,6 @@ PyAPI_FUNC(int) _PyFloat_Pack2(double x, unsigned char *p, int le); PyAPI_FUNC(int) _PyFloat_Pack4(double x, unsigned char *p, int le); PyAPI_FUNC(int) _PyFloat_Pack8(double x, unsigned char *p, int le); -/* Needed for the old way for marshal to store a floating point number. - Returns the string length copied into p, -1 on error. - */ -PyAPI_FUNC(int) _PyFloat_Repr(double x, char *p, size_t len); - -/* Used to get the important decimal digits of a double */ -PyAPI_FUNC(int) _PyFloat_Digits(char *buf, double v, int *signum); -PyAPI_FUNC(void) _PyFloat_DigitsInit(void); - /* The unpack routines read 2, 4 or 8 bytes, starting at p. le is a bool * argument, true if the string is in little-endian format (exponent * last, at p+1, p+3 or p+7), false if big-endian (exponent first, at p). @@ -109,9 +100,6 @@ PyAPI_FUNC(double) _PyFloat_Unpack2(const unsigned char *p, int le); PyAPI_FUNC(double) _PyFloat_Unpack4(const unsigned char *p, int le); PyAPI_FUNC(double) _PyFloat_Unpack8(const unsigned char *p, int le); -/* free list api */ -PyAPI_FUNC(int) PyFloat_ClearFreeList(void); - PyAPI_FUNC(void) _PyFloat_DebugMallocStats(FILE* out); /* Format the object based on the format_spec, as defined in PEP 3101 diff --git a/src/external/windows/include/python/frameobject.h b/src/external/windows/include/python/frameobject.h index f0a97fcb..36e2ab33 100755 --- a/src/external/windows/include/python/frameobject.h +++ b/src/external/windows/include/python/frameobject.h @@ -1,92 +1,20 @@ /* Frame object interface */ -#ifndef Py_LIMITED_API #ifndef Py_FRAMEOBJECT_H #define Py_FRAMEOBJECT_H #ifdef __cplusplus extern "C" { #endif -typedef struct { - int b_type; /* what kind of block this is */ - int b_handler; /* where to jump to find handler */ - int b_level; /* value stack level to pop to */ -} PyTryBlock; +#include "pyframe.h" -typedef struct _frame { - PyObject_VAR_HEAD - struct _frame *f_back; /* previous frame, or NULL */ - PyCodeObject *f_code; /* code segment */ - PyObject *f_builtins; /* builtin symbol table (PyDictObject) */ - PyObject *f_globals; /* global symbol table (PyDictObject) */ - PyObject *f_locals; /* local symbol table (any mapping) */ - PyObject **f_valuestack; /* points after the last local */ - /* Next free slot in f_valuestack. Frame creation sets to f_valuestack. - Frame evaluation usually NULLs it, but a frame that yields sets it - to the current stack top. */ - PyObject **f_stacktop; - PyObject *f_trace; /* Trace function */ - char f_trace_lines; /* Emit per-line trace events? */ - char f_trace_opcodes; /* Emit per-opcode trace events? */ - - /* Borrowed reference to a generator, or NULL */ - PyObject *f_gen; - - int f_lasti; /* Last instruction if called */ - /* Call PyFrame_GetLineNumber() instead of reading this field - directly. As of 2.3 f_lineno is only valid when tracing is - active (i.e. when f_trace is set). At other times we use - PyCode_Addr2Line to calculate the line from the current - bytecode index. */ - int f_lineno; /* Current line number */ - int f_iblock; /* index in f_blockstack */ - char f_executing; /* whether the frame is still executing */ - PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */ - PyObject *f_localsplus[1]; /* locals+stack, dynamically sized */ -} PyFrameObject; - - -/* Standard object interface */ - -PyAPI_DATA(PyTypeObject) PyFrame_Type; - -#define PyFrame_Check(op) (Py_TYPE(op) == &PyFrame_Type) - -PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *, - PyObject *, PyObject *); - -/* only internal use */ -PyFrameObject* _PyFrame_New_NoTrack(PyThreadState *, PyCodeObject *, - PyObject *, PyObject *); - - -/* The rest of the interface is specific for frame objects */ - -/* Block management functions */ - -PyAPI_FUNC(void) PyFrame_BlockSetup(PyFrameObject *, int, int, int); -PyAPI_FUNC(PyTryBlock *) PyFrame_BlockPop(PyFrameObject *); - -/* Extend the value stack */ - -PyAPI_FUNC(PyObject **) PyFrame_ExtendStack(PyFrameObject *, int, int); - -/* Conversions between "fast locals" and locals in dictionary */ - -PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int); - -PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f); -PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *); - -PyAPI_FUNC(int) PyFrame_ClearFreeList(void); - -PyAPI_FUNC(void) _PyFrame_DebugMallocStats(FILE *out); - -/* Return the line of code the frame is currently executing. */ -PyAPI_FUNC(int) PyFrame_GetLineNumber(PyFrameObject *); +#ifndef Py_LIMITED_API +# define Py_CPYTHON_FRAMEOBJECT_H +# include "cpython/frameobject.h" +# undef Py_CPYTHON_FRAMEOBJECT_H +#endif #ifdef __cplusplus } #endif #endif /* !Py_FRAMEOBJECT_H */ -#endif /* Py_LIMITED_API */ diff --git a/src/external/windows/include/python/funcobject.h b/src/external/windows/include/python/funcobject.h index 051c73ab..5ea1481f 100755 --- a/src/external/windows/include/python/funcobject.h +++ b/src/external/windows/include/python/funcobject.h @@ -43,7 +43,7 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyFunction_Type; -#define PyFunction_Check(op) (Py_TYPE(op) == &PyFunction_Type) +#define PyFunction_Check(op) Py_IS_TYPE(op, &PyFunction_Type) PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyFunction_NewWithQualName(PyObject *, PyObject *, PyObject *); @@ -60,12 +60,6 @@ PyAPI_FUNC(PyObject *) PyFunction_GetAnnotations(PyObject *); PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *); #ifndef Py_LIMITED_API -PyAPI_FUNC(PyObject *) _PyFunction_FastCallDict( - PyObject *func, - PyObject *const *args, - Py_ssize_t nargs, - PyObject *kwargs); - PyAPI_FUNC(PyObject *) _PyFunction_Vectorcall( PyObject *func, PyObject *const *stack, diff --git a/src/external/windows/include/python/genericaliasobject.h b/src/external/windows/include/python/genericaliasobject.h new file mode 100755 index 00000000..70096093 --- /dev/null +++ b/src/external/windows/include/python/genericaliasobject.h @@ -0,0 +1,14 @@ +// Implementation of PEP 585: support list[int] etc. +#ifndef Py_GENERICALIASOBJECT_H +#define Py_GENERICALIASOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_FUNC(PyObject *) Py_GenericAlias(PyObject *, PyObject *); +PyAPI_DATA(PyTypeObject) Py_GenericAliasType; + +#ifdef __cplusplus +} +#endif +#endif /* !Py_GENERICALIASOBJECT_H */ diff --git a/src/external/windows/include/python/genobject.h b/src/external/windows/include/python/genobject.h index a10d9478..6139f7e4 100755 --- a/src/external/windows/include/python/genobject.h +++ b/src/external/windows/include/python/genobject.h @@ -10,14 +10,12 @@ extern "C" { #include "pystate.h" /* _PyErr_StackItem */ -struct _frame; /* Avoid including frameobject.h */ - /* _PyGenObject_HEAD defines the initial segment of generator and coroutine objects. */ #define _PyGenObject_HEAD(prefix) \ PyObject_HEAD \ /* Note: gi_frame can be NULL if the generator is "finished" */ \ - struct _frame *prefix##_frame; \ + PyFrameObject *prefix##_frame; \ /* True if generator is being executed. */ \ char prefix##_running; \ /* The code object backing the generator */ \ @@ -38,12 +36,11 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyGen_Type; #define PyGen_Check(op) PyObject_TypeCheck(op, &PyGen_Type) -#define PyGen_CheckExact(op) (Py_TYPE(op) == &PyGen_Type) +#define PyGen_CheckExact(op) Py_IS_TYPE(op, &PyGen_Type) -PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *); -PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(struct _frame *, +PyAPI_FUNC(PyObject *) PyGen_New(PyFrameObject *); +PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(PyFrameObject *, PyObject *name, PyObject *qualname); -PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *); PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *); PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **); PyAPI_FUNC(PyObject *) _PyGen_Send(PyGenObject *, PyObject *); @@ -59,11 +56,9 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyCoro_Type; PyAPI_DATA(PyTypeObject) _PyCoroWrapper_Type; -PyAPI_DATA(PyTypeObject) _PyAIterWrapper_Type; - -#define PyCoro_CheckExact(op) (Py_TYPE(op) == &PyCoro_Type) +#define PyCoro_CheckExact(op) Py_IS_TYPE(op, &PyCoro_Type) PyObject *_PyCoro_GetAwaitableIter(PyObject *o); -PyAPI_FUNC(PyObject *) PyCoro_New(struct _frame *, +PyAPI_FUNC(PyObject *) PyCoro_New(PyFrameObject *, PyObject *name, PyObject *qualname); /* Asynchronous Generators */ @@ -89,15 +84,13 @@ PyAPI_DATA(PyTypeObject) _PyAsyncGenASend_Type; PyAPI_DATA(PyTypeObject) _PyAsyncGenWrappedValue_Type; PyAPI_DATA(PyTypeObject) _PyAsyncGenAThrow_Type; -PyAPI_FUNC(PyObject *) PyAsyncGen_New(struct _frame *, +PyAPI_FUNC(PyObject *) PyAsyncGen_New(PyFrameObject *, PyObject *name, PyObject *qualname); -#define PyAsyncGen_CheckExact(op) (Py_TYPE(op) == &PyAsyncGen_Type) +#define PyAsyncGen_CheckExact(op) Py_IS_TYPE(op, &PyAsyncGen_Type) PyObject *_PyAsyncGenValueWrapperNew(PyObject *); -int PyAsyncGen_ClearFreeLists(void); - #endif #undef _PyGenObject_HEAD diff --git a/src/external/windows/include/python/import.h b/src/external/windows/include/python/import.h index f59bee8b..468a6734 100755 --- a/src/external/windows/include/python/import.h +++ b/src/external/windows/include/python/import.h @@ -1,4 +1,3 @@ - /* Module definition and import interface */ #ifndef Py_IMPORT_H @@ -7,9 +6,6 @@ extern "C" { #endif -#ifndef Py_LIMITED_API -PyMODINIT_FUNC PyInit__imp(void); -#endif /* !Py_LIMITED_API */ PyAPI_FUNC(long) PyImport_GetMagicNumber(void); PyAPI_FUNC(const char *) PyImport_GetMagicTag(void); PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule( @@ -39,14 +35,6 @@ PyAPI_FUNC(PyObject *) PyImport_GetModuleDict(void); #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 PyAPI_FUNC(PyObject *) PyImport_GetModule(PyObject *name); #endif -#ifndef Py_LIMITED_API -PyAPI_FUNC(int) _PyImport_IsInitialized(PyInterpreterState *); -PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(struct _Py_Identifier *name); -PyAPI_FUNC(PyObject *) _PyImport_AddModuleObject(PyObject *name, - PyObject *modules); -PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module); -PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module); -#endif #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 PyAPI_FUNC(PyObject *) PyImport_AddModuleObject( PyObject *name @@ -84,7 +72,6 @@ PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject( PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path); PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name); PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m); -PyAPI_FUNC(void) PyImport_Cleanup(void); #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 PyAPI_FUNC(int) PyImport_ImportFrozenModuleObject( PyObject *name @@ -94,53 +81,15 @@ PyAPI_FUNC(int) PyImport_ImportFrozenModule( const char *name /* UTF-8 encoded string */ ); -#ifndef Py_LIMITED_API -PyAPI_FUNC(void) _PyImport_AcquireLock(void); -PyAPI_FUNC(int) _PyImport_ReleaseLock(void); - -PyAPI_FUNC(void) _PyImport_ReInitLock(void); - -PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin( - const char *name, /* UTF-8 encoded string */ - PyObject *modules - ); -PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *); -PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObjectEx(PyObject *, PyObject *, - PyObject *); -PyAPI_FUNC(int) _PyImport_FixupBuiltin( - PyObject *mod, - const char *name, /* UTF-8 encoded string */ - PyObject *modules - ); -PyAPI_FUNC(int) _PyImport_FixupExtensionObject(PyObject*, PyObject *, - PyObject *, PyObject *); - -struct _inittab { - const char *name; /* ASCII encoded string */ - PyObject* (*initfunc)(void); -}; -PyAPI_DATA(struct _inittab *) PyImport_Inittab; -PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab); -#endif /* Py_LIMITED_API */ - -PyAPI_DATA(PyTypeObject) PyNullImporter_Type; - PyAPI_FUNC(int) PyImport_AppendInittab( const char *name, /* ASCII encoded string */ PyObject* (*initfunc)(void) ); #ifndef Py_LIMITED_API -struct _frozen { - const char *name; /* ASCII encoded string */ - const unsigned char *code; - int size; -}; - -/* Embedding apps may change this pointer to point to their favorite - collection of frozen modules: */ - -PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules; +# define Py_CPYTHON_IMPORT_H +# include "cpython/import.h" +# undef Py_CPYTHON_IMPORT_H #endif #ifdef __cplusplus diff --git a/src/external/windows/include/python/internal/pegen_interface.h b/src/external/windows/include/python/internal/pegen_interface.h new file mode 100755 index 00000000..32133bae --- /dev/null +++ b/src/external/windows/include/python/internal/pegen_interface.h @@ -0,0 +1,46 @@ +#ifndef Py_PEGENINTERFACE +#define Py_PEGENINTERFACE +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +#include "Python.h" +#include "Python-ast.h" + +PyAPI_FUNC(mod_ty) PyPegen_ASTFromString( + const char *str, + const char *filename, + int mode, + PyCompilerFlags *flags, + PyArena *arena); +PyAPI_FUNC(mod_ty) PyPegen_ASTFromStringObject( + const char *str, + PyObject* filename, + int mode, + PyCompilerFlags *flags, + PyArena *arena); +PyAPI_FUNC(mod_ty) PyPegen_ASTFromFileObject( + FILE *fp, + PyObject *filename_ob, + int mode, + const char *enc, + const char *ps1, + const char *ps2, + PyCompilerFlags *flags, + int *errcode, + PyArena *arena); +PyAPI_FUNC(mod_ty) PyPegen_ASTFromFilename( + const char *filename, + int mode, + PyCompilerFlags *flags, + PyArena *arena); + + +#ifdef __cplusplus +} +#endif +#endif /* !Py_PEGENINTERFACE*/ diff --git a/src/external/windows/include/python/internal/pycore_abstract.h b/src/external/windows/include/python/internal/pycore_abstract.h new file mode 100755 index 00000000..15aa7f58 --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_abstract.h @@ -0,0 +1,22 @@ +#ifndef Py_INTERNAL_ABSTRACT_H +#define Py_INTERNAL_ABSTRACT_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +// Fast inlined version of PyIndex_Check() +static inline int +_PyIndex_Check(PyObject *obj) +{ + PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number; + return (tp_as_number != NULL && tp_as_number->nb_index != NULL); +} + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_ABSTRACT_H */ diff --git a/src/external/windows/include/python/internal/pycore_atomic.h b/src/external/windows/include/python/internal/pycore_atomic.h index ec70fd7b..973b1aa5 100755 --- a/src/external/windows/include/python/internal/pycore_atomic.h +++ b/src/external/windows/include/python/internal/pycore_atomic.h @@ -8,8 +8,7 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "dynamic_annotations.h" - +#include "dynamic_annotations.h" /* _Py_ANNOTATE_MEMORY_ORDER */ #include "pyconfig.h" #if defined(HAVE_STD_ATOMIC) diff --git a/src/external/windows/include/python/bytes_methods.h b/src/external/windows/include/python/internal/pycore_bytes_methods.h similarity index 95% rename from src/external/windows/include/python/bytes_methods.h rename to src/external/windows/include/python/internal/pycore_bytes_methods.h index ba3d12f0..cc3a303f 100755 --- a/src/external/windows/include/python/bytes_methods.h +++ b/src/external/windows/include/python/internal/pycore_bytes_methods.h @@ -2,6 +2,10 @@ #ifndef Py_BYTES_CTYPE_H #define Py_BYTES_CTYPE_H +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + /* * The internal implementation behind PyBytes (bytes) and PyByteArray (bytearray) * methods of the given names, they operate on ASCII byte strings. diff --git a/src/external/windows/include/python/internal/pycore_byteswap.h b/src/external/windows/include/python/internal/pycore_byteswap.h new file mode 100755 index 00000000..efd5eecb --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_byteswap.h @@ -0,0 +1,88 @@ +/* Bytes swap functions, reverse order of bytes: + + - _Py_bswap16(uint16_t) + - _Py_bswap32(uint32_t) + - _Py_bswap64(uint64_t) +*/ + +#ifndef Py_INTERNAL_BSWAP_H +#define Py_INTERNAL_BSWAP_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +#if defined(__GNUC__) \ + && ((__GNUC__ >= 5) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) + /* __builtin_bswap16() is available since GCC 4.8, + __builtin_bswap32() is available since GCC 4.3, + __builtin_bswap64() is available since GCC 4.3. */ +# define _PY_HAVE_BUILTIN_BSWAP +#endif + +#ifdef _MSC_VER + /* Get _byteswap_ushort(), _byteswap_ulong(), _byteswap_uint64() */ +# include +#endif + +static inline uint16_t +_Py_bswap16(uint16_t word) +{ +#if defined(_PY_HAVE_BUILTIN_BSWAP) || _Py__has_builtin(__builtin_bswap16) + return __builtin_bswap16(word); +#elif defined(_MSC_VER) + Py_BUILD_ASSERT(sizeof(word) == sizeof(unsigned short)); + return _byteswap_ushort(word); +#else + // Portable implementation which doesn't rely on circular bit shift + return ( ((word & UINT16_C(0x00FF)) << 8) + | ((word & UINT16_C(0xFF00)) >> 8)); +#endif +} + +static inline uint32_t +_Py_bswap32(uint32_t word) +{ +#if defined(_PY_HAVE_BUILTIN_BSWAP) || _Py__has_builtin(__builtin_bswap32) + return __builtin_bswap32(word); +#elif defined(_MSC_VER) + Py_BUILD_ASSERT(sizeof(word) == sizeof(unsigned long)); + return _byteswap_ulong(word); +#else + // Portable implementation which doesn't rely on circular bit shift + return ( ((word & UINT32_C(0x000000FF)) << 24) + | ((word & UINT32_C(0x0000FF00)) << 8) + | ((word & UINT32_C(0x00FF0000)) >> 8) + | ((word & UINT32_C(0xFF000000)) >> 24)); +#endif +} + +static inline uint64_t +_Py_bswap64(uint64_t word) +{ +#if defined(_PY_HAVE_BUILTIN_BSWAP) || _Py__has_builtin(__builtin_bswap64) + return __builtin_bswap64(word); +#elif defined(_MSC_VER) + return _byteswap_uint64(word); +#else + // Portable implementation which doesn't rely on circular bit shift + return ( ((word & UINT64_C(0x00000000000000FF)) << 56) + | ((word & UINT64_C(0x000000000000FF00)) << 40) + | ((word & UINT64_C(0x0000000000FF0000)) << 24) + | ((word & UINT64_C(0x00000000FF000000)) << 8) + | ((word & UINT64_C(0x000000FF00000000)) >> 8) + | ((word & UINT64_C(0x0000FF0000000000)) >> 24) + | ((word & UINT64_C(0x00FF000000000000)) >> 40) + | ((word & UINT64_C(0xFF00000000000000)) >> 56)); +#endif +} + + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_BSWAP_H */ + diff --git a/src/external/windows/include/python/internal/pycore_call.h b/src/external/windows/include/python/internal/pycore_call.h new file mode 100755 index 00000000..6b301264 --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_call.h @@ -0,0 +1,39 @@ +#ifndef Py_INTERNAL_CALL_H +#define Py_INTERNAL_CALL_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend( + PyThreadState *tstate, + PyObject *callable, + PyObject *obj, + PyObject *args, + PyObject *kwargs); + +PyAPI_FUNC(PyObject *) _PyObject_FastCallDictTstate( + PyThreadState *tstate, + PyObject *callable, + PyObject *const *args, + size_t nargsf, + PyObject *kwargs); + +PyAPI_FUNC(PyObject *) _PyObject_Call( + PyThreadState *tstate, + PyObject *callable, + PyObject *args, + PyObject *kwargs); + +static inline PyObject * +_PyObject_CallNoArgTstate(PyThreadState *tstate, PyObject *func) { + return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL); +} + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_CALL_H */ diff --git a/src/external/windows/include/python/internal/pycore_ceval.h b/src/external/windows/include/python/internal/pycore_ceval.h index b3ba5d38..2affbf74 100755 --- a/src/external/windows/include/python/internal/pycore_ceval.h +++ b/src/external/windows/include/python/internal/pycore_ceval.h @@ -8,29 +8,116 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "pycore_atomic.h" -#include "pycore_pystate.h" -#include "pythread.h" +/* Forward declarations */ +struct pyruntimestate; +struct _ceval_runtime_state; -PyAPI_FUNC(void) _Py_FinishPendingCalls(_PyRuntimeState *runtime); -PyAPI_FUNC(void) _PyEval_Initialize(struct _ceval_runtime_state *); -PyAPI_FUNC(void) _PyEval_FiniThreads( - struct _ceval_runtime_state *ceval); -PyAPI_FUNC(void) _PyEval_SignalReceived( - struct _ceval_runtime_state *ceval); +#include "pycore_interp.h" /* PyInterpreterState.eval_frame */ + +extern void _Py_FinishPendingCalls(PyThreadState *tstate); +extern void _PyEval_InitRuntimeState(struct _ceval_runtime_state *); +extern int _PyEval_InitState(struct _ceval_state *ceval); +extern void _PyEval_FiniState(struct _ceval_state *ceval); +PyAPI_FUNC(void) _PyEval_SignalReceived(PyInterpreterState *interp); PyAPI_FUNC(int) _PyEval_AddPendingCall( - PyThreadState *tstate, - struct _ceval_runtime_state *ceval, + PyInterpreterState *interp, int (*func)(void *), void *arg); -PyAPI_FUNC(void) _PyEval_SignalAsyncExc( - struct _ceval_runtime_state *ceval); -PyAPI_FUNC(void) _PyEval_ReInitThreads( - _PyRuntimeState *runtime); +PyAPI_FUNC(void) _PyEval_SignalAsyncExc(PyThreadState *tstate); +#ifdef HAVE_FORK +extern void _PyEval_ReInitThreads(struct pyruntimestate *runtime); +#endif +PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth( + PyThreadState *tstate, + int new_depth); /* Private function */ void _PyEval_Fini(void); +static inline PyObject* +_PyEval_EvalFrame(PyThreadState *tstate, PyFrameObject *f, int throwflag) +{ + return tstate->interp->eval_frame(tstate, f, throwflag); +} + +extern PyObject *_PyEval_EvalCode( + PyThreadState *tstate, + PyObject *_co, PyObject *globals, PyObject *locals, + PyObject *const *args, Py_ssize_t argcount, + PyObject *const *kwnames, PyObject *const *kwargs, + Py_ssize_t kwcount, int kwstep, + PyObject *const *defs, Py_ssize_t defcount, + PyObject *kwdefs, PyObject *closure, + PyObject *name, PyObject *qualname); + +extern int _PyEval_ThreadsInitialized(struct pyruntimestate *runtime); +extern PyStatus _PyEval_InitGIL(PyThreadState *tstate); +extern void _PyEval_FiniGIL(PyThreadState *tstate); + +extern void _PyEval_ReleaseLock(PyThreadState *tstate); + + +/* --- _Py_EnterRecursiveCall() ----------------------------------------- */ + +PyAPI_DATA(int) _Py_CheckRecursionLimit; + +#ifdef USE_STACKCHECK +/* With USE_STACKCHECK macro defined, trigger stack checks in + _Py_CheckRecursiveCall() on every 64th call to Py_EnterRecursiveCall. */ +static inline int _Py_MakeRecCheck(PyThreadState *tstate) { + return (++tstate->recursion_depth > tstate->interp->ceval.recursion_limit + || ++tstate->stackcheck_counter > 64); +} +#else +static inline int _Py_MakeRecCheck(PyThreadState *tstate) { + return (++tstate->recursion_depth > tstate->interp->ceval.recursion_limit); +} +#endif + +PyAPI_FUNC(int) _Py_CheckRecursiveCall( + PyThreadState *tstate, + const char *where); + +static inline int _Py_EnterRecursiveCall(PyThreadState *tstate, + const char *where) { + return (_Py_MakeRecCheck(tstate) && _Py_CheckRecursiveCall(tstate, where)); +} + +static inline int _Py_EnterRecursiveCall_inline(const char *where) { + PyThreadState *tstate = PyThreadState_GET(); + return _Py_EnterRecursiveCall(tstate, where); +} + +#define Py_EnterRecursiveCall(where) _Py_EnterRecursiveCall_inline(where) + +/* Compute the "lower-water mark" for a recursion limit. When + * Py_LeaveRecursiveCall() is called with a recursion depth below this mark, + * the overflowed flag is reset to 0. */ +static inline int _Py_RecursionLimitLowerWaterMark(int limit) { + if (limit > 200) { + return (limit - 50); + } + else { + return (3 * (limit >> 2)); + } +} + +static inline void _Py_LeaveRecursiveCall(PyThreadState *tstate) { + tstate->recursion_depth--; + int limit = tstate->interp->ceval.recursion_limit; + if (tstate->recursion_depth < _Py_RecursionLimitLowerWaterMark(limit)) { + tstate->overflowed = 0; + } +} + +static inline void _Py_LeaveRecursiveCall_inline(void) { + PyThreadState *tstate = PyThreadState_GET(); + _Py_LeaveRecursiveCall(tstate); +} + +#define Py_LeaveRecursiveCall() _Py_LeaveRecursiveCall_inline() + + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/internal/pycore_context.h b/src/external/windows/include/python/internal/pycore_context.h index ad557657..884baa9c 100755 --- a/src/external/windows/include/python/internal/pycore_context.h +++ b/src/external/windows/include/python/internal/pycore_context.h @@ -5,7 +5,7 @@ # error "this header requires Py_BUILD_CORE define" #endif -#include "pycore_hamt.h" +#include "pycore_hamt.h" /* PyHamtObject */ struct _pycontextobject { PyObject_HEAD diff --git a/src/external/windows/include/python/dtoa.h b/src/external/windows/include/python/internal/pycore_dtoa.h similarity index 63% rename from src/external/windows/include/python/dtoa.h rename to src/external/windows/include/python/internal/pycore_dtoa.h index 0901d8fb..4cf08f61 100755 --- a/src/external/windows/include/python/dtoa.h +++ b/src/external/windows/include/python/internal/pycore_dtoa.h @@ -1,9 +1,15 @@ -#ifndef Py_LIMITED_API #ifndef PY_NO_SHORT_FLOAT_REPR #ifdef __cplusplus extern "C" { #endif +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +/* These functions are used by modules compiled as C extension like math: + they must be exported. */ + PyAPI_FUNC(double) _Py_dg_strtod(const char *str, char **ptr); PyAPI_FUNC(char *) _Py_dg_dtoa(double d, int mode, int ndigits, int *decpt, int *sign, char **rve); @@ -11,9 +17,7 @@ PyAPI_FUNC(void) _Py_dg_freedtoa(char *s); PyAPI_FUNC(double) _Py_dg_stdnan(int sign); PyAPI_FUNC(double) _Py_dg_infinity(int sign); - #ifdef __cplusplus } #endif -#endif -#endif +#endif /* !PY_NO_SHORT_FLOAT_REPR */ diff --git a/src/external/windows/include/python/internal/pycore_fileutils.h b/src/external/windows/include/python/internal/pycore_fileutils.h index 77f0edfa..9636f252 100755 --- a/src/external/windows/include/python/internal/pycore_fileutils.h +++ b/src/external/windows/include/python/internal/pycore_fileutils.h @@ -48,6 +48,18 @@ PyAPI_FUNC(int) _Py_GetLocaleconvNumeric( PyObject **decimal_point, PyObject **thousands_sep); +#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION +extern int _Py_LocaleUsesNonUnicodeWchar(void); + +extern wchar_t* _Py_DecodeNonUnicodeWchar( + const wchar_t* native, + Py_ssize_t size); + +extern int _Py_EncodeNonUnicodeWchar_InPlace( + wchar_t* unicode, + Py_ssize_t size); +#endif + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/internal/pycore_gc.h b/src/external/windows/include/python/internal/pycore_gc.h new file mode 100755 index 00000000..012407a5 --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_gc.h @@ -0,0 +1,179 @@ +#ifndef Py_INTERNAL_GC_H +#define Py_INTERNAL_GC_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +/* GC information is stored BEFORE the object structure. */ +typedef struct { + // Pointer to next object in the list. + // 0 means the object is not tracked + uintptr_t _gc_next; + + // Pointer to previous object in the list. + // Lowest two bits are used for flags documented later. + uintptr_t _gc_prev; +} PyGC_Head; + +#define _Py_AS_GC(o) ((PyGC_Head *)(o)-1) + +/* True if the object is currently tracked by the GC. */ +#define _PyObject_GC_IS_TRACKED(o) (_Py_AS_GC(o)->_gc_next != 0) + +/* True if the object may be tracked by the GC in the future, or already is. + This can be useful to implement some optimizations. */ +#define _PyObject_GC_MAY_BE_TRACKED(obj) \ + (PyObject_IS_GC(obj) && \ + (!PyTuple_CheckExact(obj) || _PyObject_GC_IS_TRACKED(obj))) + + +/* Bit flags for _gc_prev */ +/* Bit 0 is set when tp_finalize is called */ +#define _PyGC_PREV_MASK_FINALIZED (1) +/* Bit 1 is set when the object is in generation which is GCed currently. */ +#define _PyGC_PREV_MASK_COLLECTING (2) +/* The (N-2) most significant bits contain the real address. */ +#define _PyGC_PREV_SHIFT (2) +#define _PyGC_PREV_MASK (((uintptr_t) -1) << _PyGC_PREV_SHIFT) + +// Lowest bit of _gc_next is used for flags only in GC. +// But it is always 0 for normal code. +#define _PyGCHead_NEXT(g) ((PyGC_Head*)(g)->_gc_next) +#define _PyGCHead_SET_NEXT(g, p) ((g)->_gc_next = (uintptr_t)(p)) + +// Lowest two bits of _gc_prev is used for _PyGC_PREV_MASK_* flags. +#define _PyGCHead_PREV(g) ((PyGC_Head*)((g)->_gc_prev & _PyGC_PREV_MASK)) +#define _PyGCHead_SET_PREV(g, p) do { \ + assert(((uintptr_t)p & ~_PyGC_PREV_MASK) == 0); \ + (g)->_gc_prev = ((g)->_gc_prev & ~_PyGC_PREV_MASK) \ + | ((uintptr_t)(p)); \ + } while (0) + +#define _PyGCHead_FINALIZED(g) \ + (((g)->_gc_prev & _PyGC_PREV_MASK_FINALIZED) != 0) +#define _PyGCHead_SET_FINALIZED(g) \ + ((g)->_gc_prev |= _PyGC_PREV_MASK_FINALIZED) + +#define _PyGC_FINALIZED(o) \ + _PyGCHead_FINALIZED(_Py_AS_GC(o)) +#define _PyGC_SET_FINALIZED(o) \ + _PyGCHead_SET_FINALIZED(_Py_AS_GC(o)) + + +/* GC runtime state */ + +/* If we change this, we need to change the default value in the + signature of gc.collect. */ +#define NUM_GENERATIONS 3 +/* + NOTE: about untracking of mutable objects. + + Certain types of container cannot participate in a reference cycle, and + so do not need to be tracked by the garbage collector. Untracking these + objects reduces the cost of garbage collections. However, determining + which objects may be untracked is not free, and the costs must be + weighed against the benefits for garbage collection. + + There are two possible strategies for when to untrack a container: + + i) When the container is created. + ii) When the container is examined by the garbage collector. + + Tuples containing only immutable objects (integers, strings etc, and + recursively, tuples of immutable objects) do not need to be tracked. + The interpreter creates a large number of tuples, many of which will + not survive until garbage collection. It is therefore not worthwhile + to untrack eligible tuples at creation time. + + Instead, all tuples except the empty tuple are tracked when created. + During garbage collection it is determined whether any surviving tuples + can be untracked. A tuple can be untracked if all of its contents are + already not tracked. Tuples are examined for untracking in all garbage + collection cycles. It may take more than one cycle to untrack a tuple. + + Dictionaries containing only immutable objects also do not need to be + tracked. Dictionaries are untracked when created. If a tracked item is + inserted into a dictionary (either as a key or value), the dictionary + becomes tracked. During a full garbage collection (all generations), + the collector will untrack any dictionaries whose contents are not + tracked. + + The module provides the python function is_tracked(obj), which returns + the CURRENT tracking status of the object. Subsequent garbage + collections may change the tracking status of the object. + + Untracking of certain containers was introduced in issue #4688, and + the algorithm was refined in response to issue #14775. +*/ + +struct gc_generation { + PyGC_Head head; + int threshold; /* collection threshold */ + int count; /* count of allocations or collections of younger + generations */ +}; + +/* Running stats per generation */ +struct gc_generation_stats { + /* total number of collections */ + Py_ssize_t collections; + /* total number of collected objects */ + Py_ssize_t collected; + /* total number of uncollectable objects (put into gc.garbage) */ + Py_ssize_t uncollectable; +}; + +struct _gc_runtime_state { + /* List of objects that still need to be cleaned up, singly linked + * via their gc headers' gc_prev pointers. */ + PyObject *trash_delete_later; + /* Current call-stack depth of tp_dealloc calls. */ + int trash_delete_nesting; + + int enabled; + int debug; + /* linked lists of container objects */ + struct gc_generation generations[NUM_GENERATIONS]; + PyGC_Head *generation0; + /* a permanent generation which won't be collected */ + struct gc_generation permanent_generation; + struct gc_generation_stats generation_stats[NUM_GENERATIONS]; + /* true if we are currently running the collector */ + int collecting; + /* list of uncollectable objects */ + PyObject *garbage; + /* a list of callbacks to be invoked when collection is performed */ + PyObject *callbacks; + /* This is the number of objects that survived the last full + collection. It approximates the number of long lived objects + tracked by the GC. + + (by "full collection", we mean a collection of the oldest + generation). */ + Py_ssize_t long_lived_total; + /* This is the number of objects that survived all "non-full" + collections, and are awaiting to undergo a full collection for + the first time. */ + Py_ssize_t long_lived_pending; +}; + +PyAPI_FUNC(void) _PyGC_InitState(struct _gc_runtime_state *); + + +// Functions to clear types free lists +extern void _PyFrame_ClearFreeList(void); +extern void _PyTuple_ClearFreeList(void); +extern void _PyFloat_ClearFreeList(void); +extern void _PyList_ClearFreeList(void); +extern void _PyDict_ClearFreeList(void); +extern void _PyAsyncGen_ClearFreeLists(void); +extern void _PyContext_ClearFreeList(void); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_GC_H */ diff --git a/src/external/windows/include/python/internal/pycore_gil.h b/src/external/windows/include/python/internal/pycore_gil.h index 0f08f4cc..e1c8923c 100755 --- a/src/external/windows/include/python/internal/pycore_gil.h +++ b/src/external/windows/include/python/internal/pycore_gil.h @@ -8,8 +8,8 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "pycore_condvar.h" -#include "pycore_atomic.h" +#include "pycore_atomic.h" /* _Py_atomic_address */ +#include "pycore_condvar.h" /* PyCOND_T */ #ifndef Py_HAVE_CONDVAR # error You need either a POSIX-compatible or a Windows system! diff --git a/src/external/windows/include/python/internal/pycore_hamt.h b/src/external/windows/include/python/internal/pycore_hamt.h index 44e22e2f..f6abb113 100755 --- a/src/external/windows/include/python/internal/pycore_hamt.h +++ b/src/external/windows/include/python/internal/pycore_hamt.h @@ -8,7 +8,7 @@ #define _Py_HAMT_MAX_TREE_DEPTH 7 -#define PyHamt_Check(o) (Py_TYPE(o) == &_PyHamt_Type) +#define PyHamt_Check(o) Py_IS_TYPE(o, &_PyHamt_Type) /* Abstract tree node. */ diff --git a/src/external/windows/include/python/internal/pycore_hashtable.h b/src/external/windows/include/python/internal/pycore_hashtable.h new file mode 100755 index 00000000..8fa411a1 --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_hashtable.h @@ -0,0 +1,148 @@ +#ifndef Py_INTERNAL_HASHTABLE_H +#define Py_INTERNAL_HASHTABLE_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +/* Single linked list */ + +typedef struct _Py_slist_item_s { + struct _Py_slist_item_s *next; +} _Py_slist_item_t; + +typedef struct { + _Py_slist_item_t *head; +} _Py_slist_t; + +#define _Py_SLIST_ITEM_NEXT(ITEM) (((_Py_slist_item_t *)ITEM)->next) + +#define _Py_SLIST_HEAD(SLIST) (((_Py_slist_t *)SLIST)->head) + + +/* _Py_hashtable: table entry */ + +typedef struct { + /* used by _Py_hashtable_t.buckets to link entries */ + _Py_slist_item_t _Py_slist_item; + + Py_uhash_t key_hash; + void *key; + void *value; +} _Py_hashtable_entry_t; + + +/* _Py_hashtable: prototypes */ + +/* Forward declaration */ +struct _Py_hashtable_t; +typedef struct _Py_hashtable_t _Py_hashtable_t; + +typedef Py_uhash_t (*_Py_hashtable_hash_func) (const void *key); +typedef int (*_Py_hashtable_compare_func) (const void *key1, const void *key2); +typedef void (*_Py_hashtable_destroy_func) (void *key); +typedef _Py_hashtable_entry_t* (*_Py_hashtable_get_entry_func)(_Py_hashtable_t *ht, + const void *key); + +typedef struct { + // Allocate a memory block + void* (*malloc) (size_t size); + + // Release a memory block + void (*free) (void *ptr); +} _Py_hashtable_allocator_t; + + +/* _Py_hashtable: table */ +struct _Py_hashtable_t { + size_t nentries; // Total number of entries in the table + size_t nbuckets; + _Py_slist_t *buckets; + + _Py_hashtable_get_entry_func get_entry_func; + _Py_hashtable_hash_func hash_func; + _Py_hashtable_compare_func compare_func; + _Py_hashtable_destroy_func key_destroy_func; + _Py_hashtable_destroy_func value_destroy_func; + _Py_hashtable_allocator_t alloc; +}; + +/* Hash a pointer (void*) */ +PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_ptr(const void *key); + +/* Comparison using memcmp() */ +PyAPI_FUNC(int) _Py_hashtable_compare_direct( + const void *key1, + const void *key2); + +PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new( + _Py_hashtable_hash_func hash_func, + _Py_hashtable_compare_func compare_func); + +PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new_full( + _Py_hashtable_hash_func hash_func, + _Py_hashtable_compare_func compare_func, + _Py_hashtable_destroy_func key_destroy_func, + _Py_hashtable_destroy_func value_destroy_func, + _Py_hashtable_allocator_t *allocator); + +PyAPI_FUNC(void) _Py_hashtable_destroy(_Py_hashtable_t *ht); + +PyAPI_FUNC(void) _Py_hashtable_clear(_Py_hashtable_t *ht); + +typedef int (*_Py_hashtable_foreach_func) (_Py_hashtable_t *ht, + const void *key, const void *value, + void *user_data); + +/* Call func() on each entry of the hashtable. + Iteration stops if func() result is non-zero, in this case it's the result + of the call. Otherwise, the function returns 0. */ +PyAPI_FUNC(int) _Py_hashtable_foreach( + _Py_hashtable_t *ht, + _Py_hashtable_foreach_func func, + void *user_data); + +PyAPI_FUNC(size_t) _Py_hashtable_size(const _Py_hashtable_t *ht); + +/* Add a new entry to the hash. The key must not be present in the hash table. + Return 0 on success, -1 on memory error. */ +PyAPI_FUNC(int) _Py_hashtable_set( + _Py_hashtable_t *ht, + const void *key, + void *value); + + +/* Get an entry. + Return NULL if the key does not exist. */ +static inline _Py_hashtable_entry_t * +_Py_hashtable_get_entry(_Py_hashtable_t *ht, const void *key) +{ + return ht->get_entry_func(ht, key); +} + + +/* Get value from an entry. + Return NULL if the entry is not found. + + Use _Py_hashtable_get_entry() to distinguish entry value equal to NULL + and entry not found. */ +PyAPI_FUNC(void*) _Py_hashtable_get(_Py_hashtable_t *ht, const void *key); + + +/* Remove a key and its associated value without calling key and value destroy + functions. + + Return the removed value if the key was found. + Return NULL if the key was not found. */ +PyAPI_FUNC(void*) _Py_hashtable_steal( + _Py_hashtable_t *ht, + const void *key); + + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_HASHTABLE_H */ diff --git a/src/external/windows/include/python/internal/pycore_import.h b/src/external/windows/include/python/internal/pycore_import.h new file mode 100755 index 00000000..4c5e0e5e --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_import.h @@ -0,0 +1,22 @@ +#ifndef Py_LIMITED_API +#ifndef Py_INTERNAL_IMPORT_H +#define Py_INTERNAL_IMPORT_H +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin( + PyThreadState *tstate, + const char *name /* UTF-8 encoded string */ + ); + +#ifdef HAVE_FORK +extern void _PyImport_ReInitLock(void); +#endif +extern void _PyImport_Cleanup(PyThreadState *tstate); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_IMPORT_H */ +#endif /* !Py_LIMITED_API */ diff --git a/src/external/windows/include/python/internal/pycore_initconfig.h b/src/external/windows/include/python/internal/pycore_initconfig.h index 120d85e2..855fb550 100755 --- a/src/external/windows/include/python/internal/pycore_initconfig.h +++ b/src/external/windows/include/python/internal/pycore_initconfig.h @@ -8,7 +8,8 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "pycore_pystate.h" /* _PyRuntimeState */ +/* Forward declaration */ +struct pyruntimestate; /* --- PyStatus ----------------------------------------------- */ @@ -60,7 +61,7 @@ PyAPI_FUNC(PyObject*) _PyWideStringList_AsList(const PyWideStringList *list); /* --- _PyArgv ---------------------------------------------------- */ -typedef struct { +typedef struct _PyArgv { Py_ssize_t argc; int use_bytes_argv; char * const *bytes_argv; @@ -149,8 +150,8 @@ extern PyStatus _PyConfig_Copy( PyConfig *config, const PyConfig *config2); extern PyStatus _PyConfig_InitPathConfig(PyConfig *config); -extern void _PyConfig_Write(const PyConfig *config, - _PyRuntimeState *runtime); +extern PyStatus _PyConfig_Write(const PyConfig *config, + struct pyruntimestate *runtime); extern PyStatus _PyConfig_SetPyArgv( PyConfig *config, const _PyArgv *args); diff --git a/src/external/windows/include/python/internal/pycore_interp.h b/src/external/windows/include/python/internal/pycore_interp.h new file mode 100755 index 00000000..1023483a --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_interp.h @@ -0,0 +1,192 @@ +#ifndef Py_INTERNAL_INTERP_H +#define Py_INTERNAL_INTERP_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +#include "pycore_atomic.h" /* _Py_atomic_address */ +#include "pycore_gil.h" /* struct _gil_runtime_state */ +#include "pycore_gc.h" /* struct _gc_runtime_state */ +#include "pycore_warnings.h" /* struct _warnings_runtime_state */ + +/* ceval state */ + +struct _pending_calls { + PyThread_type_lock lock; + /* Request for running pending calls. */ + _Py_atomic_int calls_to_do; + /* Request for looking at the `async_exc` field of the current + thread state. + Guarded by the GIL. */ + int async_exc; +#define NPENDINGCALLS 32 + struct { + int (*func)(void *); + void *arg; + } calls[NPENDINGCALLS]; + int first; + int last; +}; + +struct _ceval_state { + int recursion_limit; + /* Records whether tracing is on for any thread. Counts the number + of threads for which tstate->c_tracefunc is non-NULL, so if the + value is 0, we know we don't have to check this thread's + c_tracefunc. This speeds up the if statement in + _PyEval_EvalFrameDefault() after fast_next_opcode. */ + int tracing_possible; + /* This single variable consolidates all requests to break out of + the fast path in the eval loop. */ + _Py_atomic_int eval_breaker; + /* Request for dropping the GIL */ + _Py_atomic_int gil_drop_request; + struct _pending_calls pending; +}; + +/* fs_codec.encoding is initialized to NULL. + Later, it is set to a non-NULL string by _PyUnicode_InitEncodings(). */ +struct _Py_unicode_fs_codec { + char *encoding; // Filesystem encoding (encoded to UTF-8) + int utf8; // encoding=="utf-8"? + char *errors; // Filesystem errors (encoded to UTF-8) + _Py_error_handler error_handler; +}; + +struct _Py_unicode_state { + struct _Py_unicode_fs_codec fs_codec; +}; + + +/* interpreter state */ + +#define _PY_NSMALLPOSINTS 257 +#define _PY_NSMALLNEGINTS 5 + +// The PyInterpreterState typedef is in Include/pystate.h. +struct _is { + + struct _is *next; + struct _ts *tstate_head; + + /* Reference to the _PyRuntime global variable. This field exists + to not have to pass runtime in addition to tstate to a function. + Get runtime from tstate: tstate->interp->runtime. */ + struct pyruntimestate *runtime; + + int64_t id; + int64_t id_refcount; + int requires_idref; + PyThread_type_lock id_mutex; + + int finalizing; + + struct _ceval_state ceval; + struct _gc_runtime_state gc; + + PyObject *modules; + PyObject *modules_by_index; + PyObject *sysdict; + PyObject *builtins; + PyObject *importlib; + + /* Used in Modules/_threadmodule.c. */ + long num_threads; + /* Support for runtime thread stack size tuning. + A value of 0 means using the platform's default stack size + or the size specified by the THREAD_STACK_SIZE macro. */ + /* Used in Python/thread.c. */ + size_t pythread_stacksize; + + PyObject *codec_search_path; + PyObject *codec_search_cache; + PyObject *codec_error_registry; + int codecs_initialized; + + struct _Py_unicode_state unicode; + + PyConfig config; +#ifdef HAVE_DLOPEN + int dlopenflags; +#endif + + PyObject *dict; /* Stores per-interpreter state */ + + PyObject *builtins_copy; + PyObject *import_func; + /* Initialized to PyEval_EvalFrameDefault(). */ + _PyFrameEvalFunction eval_frame; + + Py_ssize_t co_extra_user_count; + freefunc co_extra_freefuncs[MAX_CO_EXTRA_USERS]; + +#ifdef HAVE_FORK + PyObject *before_forkers; + PyObject *after_forkers_parent; + PyObject *after_forkers_child; +#endif + /* AtExit module */ + void (*pyexitfunc)(PyObject *); + PyObject *pyexitmodule; + + uint64_t tstate_next_unique_id; + + struct _warnings_runtime_state warnings; + + PyObject *audit_hooks; + + struct { + struct { + int level; + int atbol; + } listnode; + } parser; + +#if _PY_NSMALLNEGINTS + _PY_NSMALLPOSINTS > 0 + /* Small integers are preallocated in this array so that they + can be shared. + The integers that are preallocated are those in the range + -_PY_NSMALLNEGINTS (inclusive) to _PY_NSMALLPOSINTS (not inclusive). + */ + PyLongObject* small_ints[_PY_NSMALLNEGINTS + _PY_NSMALLPOSINTS]; +#endif +}; + +/* Used by _PyImport_Cleanup() */ +extern void _PyInterpreterState_ClearModules(PyInterpreterState *interp); + +extern PyStatus _PyInterpreterState_SetConfig( + PyInterpreterState *interp, + const PyConfig *config); + + + +/* cross-interpreter data registry */ + +/* For now we use a global registry of shareable classes. An + alternative would be to add a tp_* slot for a class's + crossinterpdatafunc. It would be simpler and more efficient. */ + +struct _xidregitem; + +struct _xidregitem { + PyTypeObject *cls; + crossinterpdatafunc getdata; + struct _xidregitem *next; +}; + +PyAPI_FUNC(struct _is*) _PyInterpreterState_LookUpID(int64_t); + +PyAPI_FUNC(int) _PyInterpreterState_IDInitref(struct _is *); +PyAPI_FUNC(void) _PyInterpreterState_IDIncref(struct _is *); +PyAPI_FUNC(void) _PyInterpreterState_IDDecref(struct _is *); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_INTERP_H */ + diff --git a/src/external/windows/include/python/internal/pycore_object.h b/src/external/windows/include/python/internal/pycore_object.h index 7a57fa79..15497007 100755 --- a/src/external/windows/include/python/internal/pycore_object.h +++ b/src/external/windows/include/python/internal/pycore_object.h @@ -8,7 +8,9 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "pycore_pystate.h" /* _PyRuntime */ +#include "pycore_gc.h" // _PyObject_GC_IS_TRACKED() +#include "pycore_interp.h" // PyInterpreterState.gc +#include "pycore_pystate.h" // _PyThreadState_GET() PyAPI_FUNC(int) _PyType_CheckConsistency(PyTypeObject *type); PyAPI_FUNC(int) _PyDict_CheckConsistency(PyObject *mp, int check_content); @@ -18,7 +20,7 @@ PyAPI_FUNC(int) _PyDict_CheckConsistency(PyObject *mp, int check_content); * NB: While the object is tracked by the collector, it must be safe to call the * ob_traverse method. * - * Internal note: _PyRuntime.gc.generation0->_gc_prev doesn't have any bit flags + * Internal note: interp->gc.generation0->_gc_prev doesn't have any bit flags * because it's not object header. So we don't use _PyGCHead_PREV() and * _PyGCHead_SET_PREV() for it to avoid unnecessary bitwise operations. * @@ -37,11 +39,13 @@ static inline void _PyObject_GC_TRACK_impl(const char *filename, int lineno, "object is in generation which is garbage collected", filename, lineno, "_PyObject_GC_TRACK"); - PyGC_Head *last = (PyGC_Head*)(_PyRuntime.gc.generation0->_gc_prev); + PyThreadState *tstate = _PyThreadState_GET(); + PyGC_Head *generation0 = tstate->interp->gc.generation0; + PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev); _PyGCHead_SET_NEXT(last, gc); _PyGCHead_SET_PREV(gc, last); - _PyGCHead_SET_NEXT(gc, _PyRuntime.gc.generation0); - _PyRuntime.gc.generation0->_gc_prev = (uintptr_t)gc; + _PyGCHead_SET_NEXT(gc, generation0); + generation0->_gc_prev = (uintptr_t)gc; } #define _PyObject_GC_TRACK(op) \ @@ -75,6 +79,41 @@ static inline void _PyObject_GC_UNTRACK_impl(const char *filename, int lineno, #define _PyObject_GC_UNTRACK(op) \ _PyObject_GC_UNTRACK_impl(__FILE__, __LINE__, _PyObject_CAST(op)) +#ifdef Py_REF_DEBUG +extern void _PyDebug_PrintTotalRefs(void); +#endif + +#ifdef Py_TRACE_REFS +extern void _Py_AddToAllObjects(PyObject *op, int force); +extern void _Py_PrintReferences(FILE *); +extern void _Py_PrintReferenceAddresses(FILE *); +#endif + +static inline PyObject ** +_PyObject_GET_WEAKREFS_LISTPTR(PyObject *op) +{ + Py_ssize_t offset = Py_TYPE(op)->tp_weaklistoffset; + return (PyObject **)((char *)op + offset); +} + +// Fast inlined version of PyType_HasFeature() +static inline int +_PyType_HasFeature(PyTypeObject *type, unsigned long feature) { + return ((type->tp_flags & feature) != 0); +} + +// Fast inlined version of PyObject_IS_GC() +static inline int +_PyObject_IS_GC(PyObject *obj) +{ + return (PyType_IS_GC(Py_TYPE(obj)) + && (Py_TYPE(obj)->tp_is_gc == NULL + || Py_TYPE(obj)->tp_is_gc(obj))); +} + +// Fast inlined version of PyType_IS_GC() +#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC) + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/internal/pycore_pathconfig.h b/src/external/windows/include/python/internal/pycore_pathconfig.h index 887fbe4a..8f706fe6 100755 --- a/src/external/windows/include/python/internal/pycore_pathconfig.h +++ b/src/external/windows/include/python/internal/pycore_pathconfig.h @@ -47,8 +47,6 @@ PyAPI_DATA(wchar_t*) _Py_dll_path; #endif extern void _PyPathConfig_ClearGlobal(void); -extern PyStatus _PyPathConfig_SetGlobal( - const struct _PyPathConfig *pathconfig); extern PyStatus _PyPathConfig_Calculate( _PyPathConfig *pathconfig, @@ -56,11 +54,10 @@ extern PyStatus _PyPathConfig_Calculate( extern int _PyPathConfig_ComputeSysPath0( const PyWideStringList *argv, PyObject **path0); -extern int _Py_FindEnvConfigValue( +extern PyStatus _Py_FindEnvConfigValue( FILE *env_file, const wchar_t *key, - wchar_t *value, - size_t value_size); + wchar_t **value_p); #ifdef MS_WINDOWS extern wchar_t* _Py_GetDLLPath(void); diff --git a/src/external/windows/include/python/internal/pycore_pyerrors.h b/src/external/windows/include/python/internal/pycore_pyerrors.h index 337bb979..6140cf37 100755 --- a/src/external/windows/include/python/internal/pycore_pyerrors.h +++ b/src/external/windows/include/python/internal/pycore_pyerrors.h @@ -10,7 +10,22 @@ extern "C" { static inline PyObject* _PyErr_Occurred(PyThreadState *tstate) { - return tstate == NULL ? NULL : tstate->curexc_type; + assert(tstate != NULL); + return tstate->curexc_type; +} + +static inline void _PyErr_ClearExcState(_PyErr_StackItem *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); } @@ -35,10 +50,15 @@ PyAPI_FUNC(void) _PyErr_SetObject( PyObject *type, PyObject *value); +PyAPI_FUNC(void) _PyErr_ChainStackItem( + _PyErr_StackItem *exc_info); + PyAPI_FUNC(void) _PyErr_Clear(PyThreadState *tstate); PyAPI_FUNC(void) _PyErr_SetNone(PyThreadState *tstate, PyObject *exception); +PyAPI_FUNC(PyObject *) _PyErr_NoMemory(PyThreadState *tstate); + PyAPI_FUNC(void) _PyErr_SetString( PyThreadState *tstate, PyObject *exception, @@ -56,6 +76,14 @@ PyAPI_FUNC(void) _PyErr_NormalizeException( PyObject **val, PyObject **tb); +PyAPI_FUNC(PyObject *) _PyErr_FormatFromCauseTstate( + PyThreadState *tstate, + PyObject *exception, + const char *format, + ...); + +PyAPI_FUNC(int) _PyErr_CheckSignalsTstate(PyThreadState *tstate); + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/internal/pycore_pylifecycle.h b/src/external/windows/include/python/internal/pycore_pylifecycle.h index f4c28d69..89f99a41 100755 --- a/src/external/windows/include/python/internal/pycore_pylifecycle.h +++ b/src/external/windows/include/python/internal/pycore_pylifecycle.h @@ -8,8 +8,9 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "pycore_initconfig.h" /* _PyArgv */ -#include "pycore_pystate.h" /* _PyRuntimeState */ +/* Forward declarations */ +struct _PyArgv; +struct pyruntimestate; /* True if the main interpreter thread exited due to an unhandled * KeyboardInterrupt exception, suggesting the user pressed ^C. */ @@ -32,74 +33,69 @@ PyAPI_FUNC(int) _Py_IsLocaleCoercionTarget(const char *ctype_loc); extern PyStatus _PyUnicode_Init(void); extern int _PyStructSequence_Init(void); -extern int _PyLong_Init(void); +extern int _PyLong_Init(PyThreadState *tstate); extern PyStatus _PyFaulthandler_Init(int enable); extern int _PyTraceMalloc_Init(int enable); -extern PyObject * _PyBuiltin_Init(void); +extern PyObject * _PyBuiltin_Init(PyThreadState *tstate); extern PyStatus _PySys_Create( - _PyRuntimeState *runtime, - PyInterpreterState *interp, + PyThreadState *tstate, PyObject **sysmod_p); -extern PyStatus _PySys_SetPreliminaryStderr(PyObject *sysdict); extern PyStatus _PySys_ReadPreinitWarnOptions(PyWideStringList *options); extern PyStatus _PySys_ReadPreinitXOptions(PyConfig *config); -extern int _PySys_InitMain( - _PyRuntimeState *runtime, - PyInterpreterState *interp); -extern PyStatus _PyImport_Init(PyInterpreterState *interp); +extern int _PySys_InitMain(PyThreadState *tstate); extern PyStatus _PyExc_Init(void); extern PyStatus _PyErr_Init(void); extern PyStatus _PyBuiltins_AddExceptions(PyObject * bltinmod); -extern PyStatus _PyImportHooks_Init(void); +extern PyStatus _PyImportHooks_Init(PyThreadState *tstate); extern int _PyFloat_Init(void); extern PyStatus _Py_HashRandomization_Init(const PyConfig *); extern PyStatus _PyTypes_Init(void); -extern PyStatus _PyImportZip_Init(PyInterpreterState *interp); +extern PyStatus _PyTypes_InitSlotDefs(void); +extern PyStatus _PyImportZip_Init(PyThreadState *tstate); +extern PyStatus _PyGC_Init(PyThreadState *tstate); /* Various internal finalizers */ -extern void PyMethod_Fini(void); -extern void PyFrame_Fini(void); -extern void PyCFunction_Fini(void); -extern void PyDict_Fini(void); -extern void PyTuple_Fini(void); -extern void PyList_Fini(void); -extern void PySet_Fini(void); -extern void PyBytes_Fini(void); -extern void PyFloat_Fini(void); +extern void _PyFrame_Fini(void); +extern void _PyDict_Fini(void); +extern void _PyTuple_Fini(void); +extern void _PyList_Fini(void); +extern void _PySet_Fini(void); +extern void _PyBytes_Fini(void); +extern void _PyFloat_Fini(void); +extern void _PySlice_Fini(void); +extern void _PyAsyncGen_Fini(void); + +extern int _PySignal_Init(int install_signal_handlers); extern void PyOS_FiniInterrupts(void); -extern void PySlice_Fini(void); -extern void PyAsyncGen_Fini(void); extern void _PyExc_Fini(void); extern void _PyImport_Fini(void); extern void _PyImport_Fini2(void); -extern void _PyGC_Fini(_PyRuntimeState *runtime); +extern void _PyGC_Fini(PyThreadState *tstate); extern void _PyType_Fini(void); extern void _Py_HashRandomization_Fini(void); -extern void _PyUnicode_Fini(void); -extern void PyLong_Fini(void); +extern void _PyUnicode_Fini(PyThreadState *tstate); +extern void _PyLong_Fini(PyThreadState *tstate); extern void _PyFaulthandler_Fini(void); extern void _PyHash_Fini(void); extern void _PyTraceMalloc_Fini(void); extern void _PyWarnings_Fini(PyInterpreterState *interp); +extern void _PyAST_Fini(void); -extern void _PyGILState_Init( - _PyRuntimeState *runtime, - PyInterpreterState *interp, - PyThreadState *tstate); -extern void _PyGILState_Fini(_PyRuntimeState *runtime); +extern PyStatus _PyGILState_Init(PyThreadState *tstate); +extern void _PyGILState_Fini(PyThreadState *tstate); -PyAPI_FUNC(void) _PyGC_DumpShutdownStats(_PyRuntimeState *runtime); +PyAPI_FUNC(void) _PyGC_DumpShutdownStats(PyThreadState *tstate); PyAPI_FUNC(PyStatus) _Py_PreInitializeFromPyArgv( const PyPreConfig *src_config, - const _PyArgv *args); + const struct _PyArgv *args); PyAPI_FUNC(PyStatus) _Py_PreInitializeFromConfig( const PyConfig *config, - const _PyArgv *args); + const struct _PyArgv *args); PyAPI_FUNC(int) _Py_HandleSystemExit(int *exitcode_p); @@ -110,6 +106,8 @@ PyAPI_FUNC(void) _PyErr_Print(PyThreadState *tstate); PyAPI_FUNC(void) _PyErr_Display(PyObject *file, PyObject *exception, PyObject *value, PyObject *tb); +PyAPI_FUNC(void) _PyThreadState_DeleteCurrent(PyThreadState *tstate); + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/internal/pycore_pymem.h b/src/external/windows/include/python/internal/pycore_pymem.h index 9ceb1297..98e25396 100755 --- a/src/external/windows/include/python/internal/pycore_pymem.h +++ b/src/external/windows/include/python/internal/pycore_pymem.h @@ -8,144 +8,7 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "objimpl.h" -#include "pymem.h" - - -/* GC runtime state */ - -/* If we change this, we need to change the default value in the - signature of gc.collect. */ -#define NUM_GENERATIONS 3 - -/* - NOTE: about the counting of long-lived objects. - - To limit the cost of garbage collection, there are two strategies; - - make each collection faster, e.g. by scanning fewer objects - - do less collections - This heuristic is about the latter strategy. - - In addition to the various configurable thresholds, we only trigger a - full collection if the ratio - long_lived_pending / long_lived_total - is above a given value (hardwired to 25%). - - The reason is that, while "non-full" collections (i.e., collections of - the young and middle generations) will always examine roughly the same - number of objects -- determined by the aforementioned thresholds --, - the cost of a full collection is proportional to the total number of - long-lived objects, which is virtually unbounded. - - Indeed, it has been remarked that doing a full collection every - of object creations entails a dramatic performance - degradation in workloads which consist in creating and storing lots of - long-lived objects (e.g. building a large list of GC-tracked objects would - show quadratic performance, instead of linear as expected: see issue #4074). - - Using the above ratio, instead, yields amortized linear performance in - the total number of objects (the effect of which can be summarized - thusly: "each full garbage collection is more and more costly as the - number of objects grows, but we do fewer and fewer of them"). - - This heuristic was suggested by Martin von Löwis on python-dev in - June 2008. His original analysis and proposal can be found at: - http://mail.python.org/pipermail/python-dev/2008-June/080579.html -*/ - -/* - NOTE: about untracking of mutable objects. - - Certain types of container cannot participate in a reference cycle, and - so do not need to be tracked by the garbage collector. Untracking these - objects reduces the cost of garbage collections. However, determining - which objects may be untracked is not free, and the costs must be - weighed against the benefits for garbage collection. - - There are two possible strategies for when to untrack a container: - - i) When the container is created. - ii) When the container is examined by the garbage collector. - - Tuples containing only immutable objects (integers, strings etc, and - recursively, tuples of immutable objects) do not need to be tracked. - The interpreter creates a large number of tuples, many of which will - not survive until garbage collection. It is therefore not worthwhile - to untrack eligible tuples at creation time. - - Instead, all tuples except the empty tuple are tracked when created. - During garbage collection it is determined whether any surviving tuples - can be untracked. A tuple can be untracked if all of its contents are - already not tracked. Tuples are examined for untracking in all garbage - collection cycles. It may take more than one cycle to untrack a tuple. - - Dictionaries containing only immutable objects also do not need to be - tracked. Dictionaries are untracked when created. If a tracked item is - inserted into a dictionary (either as a key or value), the dictionary - becomes tracked. During a full garbage collection (all generations), - the collector will untrack any dictionaries whose contents are not - tracked. - - The module provides the python function is_tracked(obj), which returns - the CURRENT tracking status of the object. Subsequent garbage - collections may change the tracking status of the object. - - Untracking of certain containers was introduced in issue #4688, and - the algorithm was refined in response to issue #14775. -*/ - -struct gc_generation { - PyGC_Head head; - int threshold; /* collection threshold */ - int count; /* count of allocations or collections of younger - generations */ -}; - -/* Running stats per generation */ -struct gc_generation_stats { - /* total number of collections */ - Py_ssize_t collections; - /* total number of collected objects */ - Py_ssize_t collected; - /* total number of uncollectable objects (put into gc.garbage) */ - Py_ssize_t uncollectable; -}; - -struct _gc_runtime_state { - /* List of objects that still need to be cleaned up, singly linked - * via their gc headers' gc_prev pointers. */ - PyObject *trash_delete_later; - /* Current call-stack depth of tp_dealloc calls. */ - int trash_delete_nesting; - - int enabled; - int debug; - /* linked lists of container objects */ - struct gc_generation generations[NUM_GENERATIONS]; - PyGC_Head *generation0; - /* a permanent generation which won't be collected */ - struct gc_generation permanent_generation; - struct gc_generation_stats generation_stats[NUM_GENERATIONS]; - /* true if we are currently running the collector */ - int collecting; - /* list of uncollectable objects */ - PyObject *garbage; - /* a list of callbacks to be invoked when collection is performed */ - PyObject *callbacks; - /* This is the number of objects that survived the last full - collection. It approximates the number of long lived objects - tracked by the GC. - - (by "full collection", we mean a collection of the oldest - generation). */ - Py_ssize_t long_lived_total; - /* This is the number of objects that survived all "non-full" - collections, and are awaiting to undergo a full collection for - the first time. */ - Py_ssize_t long_lived_pending; -}; - -PyAPI_FUNC(void) _PyGC_Initialize(struct _gc_runtime_state *); +#include "pymem.h" // PyMemAllocatorName /* Set the memory allocator of the specified domain to the default. @@ -179,7 +42,7 @@ PyAPI_FUNC(int) _PyMem_SetDefaultAllocator( fills newly allocated memory with CLEANBYTE (0xCD) and newly freed memory with DEADBYTE (0xDD). Detect also "untouchable bytes" marked with FORBIDDENBYTE (0xFD). */ -static inline int _PyMem_IsPtrFreed(void *ptr) +static inline int _PyMem_IsPtrFreed(const void *ptr) { uintptr_t value = (uintptr_t)ptr; #if SIZEOF_VOID_P == 8 @@ -206,6 +69,35 @@ PyAPI_FUNC(int) _PyMem_GetAllocatorName( PYMEM_ALLOCATOR_NOT_SET does nothing. */ PyAPI_FUNC(int) _PyMem_SetupAllocators(PyMemAllocatorName allocator); +/* bpo-35053: Expose _Py_tracemalloc_config for _Py_NewReference() + which access directly _Py_tracemalloc_config.tracing for best + performances. */ +struct _PyTraceMalloc_Config { + /* Module initialized? + Variable protected by the GIL */ + enum { + TRACEMALLOC_NOT_INITIALIZED, + TRACEMALLOC_INITIALIZED, + TRACEMALLOC_FINALIZED + } initialized; + + /* Is tracemalloc tracing memory allocations? + Variable protected by the GIL */ + int tracing; + + /* limit of the number of frames in a traceback, 1 by default. + Variable protected by the GIL. */ + int max_nframe; +}; + +#define _PyTraceMalloc_Config_INIT \ + {.initialized = TRACEMALLOC_NOT_INITIALIZED, \ + .tracing = 0, \ + .max_nframe = 1} + +PyAPI_DATA(struct _PyTraceMalloc_Config) _Py_tracemalloc_config; + + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/internal/pycore_pystate.h b/src/external/windows/include/python/internal/pycore_pystate.h index 32252278..2088d511 100755 --- a/src/external/windows/include/python/internal/pycore_pystate.h +++ b/src/external/windows/include/python/internal/pycore_pystate.h @@ -8,270 +8,52 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "cpython/initconfig.h" -#include "fileobject.h" -#include "pystate.h" -#include "pythread.h" -#include "sysmodule.h" - -#include "pycore_gil.h" /* _gil_runtime_state */ -#include "pycore_pathconfig.h" -#include "pycore_pymem.h" -#include "pycore_warnings.h" +#include "pycore_runtime.h" /* PyRuntimeState */ -/* ceval state */ - -struct _pending_calls { - int finishing; - PyThread_type_lock lock; - /* Request for running pending calls. */ - _Py_atomic_int calls_to_do; - /* Request for looking at the `async_exc` field of the current - thread state. - Guarded by the GIL. */ - int async_exc; -#define NPENDINGCALLS 32 - struct { - int (*func)(void *); - void *arg; - } calls[NPENDINGCALLS]; - int first; - int last; -}; - -struct _ceval_runtime_state { - int recursion_limit; - /* Records whether tracing is on for any thread. Counts the number - of threads for which tstate->c_tracefunc is non-NULL, so if the - value is 0, we know we don't have to check this thread's - c_tracefunc. This speeds up the if statement in - PyEval_EvalFrameEx() after fast_next_opcode. */ - int tracing_possible; - /* This single variable consolidates all requests to break out of - the fast path in the eval loop. */ - _Py_atomic_int eval_breaker; - /* Request for dropping the GIL */ - _Py_atomic_int gil_drop_request; - struct _pending_calls pending; - /* Request for checking signals. */ - _Py_atomic_int signals_pending; - struct _gil_runtime_state gil; -}; - -/* interpreter state */ - -typedef PyObject* (*_PyFrameEvalFunction)(struct _frame *, int); - -// The PyInterpreterState typedef is in Include/pystate.h. -struct _is { - - struct _is *next; - struct _ts *tstate_head; - - int64_t id; - int64_t id_refcount; - int requires_idref; - PyThread_type_lock id_mutex; - - int finalizing; - - PyObject *modules; - PyObject *modules_by_index; - PyObject *sysdict; - PyObject *builtins; - PyObject *importlib; - - /* Used in Python/sysmodule.c. */ - int check_interval; - - /* Used in Modules/_threadmodule.c. */ - long num_threads; - /* Support for runtime thread stack size tuning. - A value of 0 means using the platform's default stack size - or the size specified by the THREAD_STACK_SIZE macro. */ - /* Used in Python/thread.c. */ - size_t pythread_stacksize; - - PyObject *codec_search_path; - PyObject *codec_search_cache; - PyObject *codec_error_registry; - int codecs_initialized; - - /* fs_codec.encoding is initialized to NULL. - Later, it is set to a non-NULL string by _PyUnicode_InitEncodings(). */ - struct { - char *encoding; /* Filesystem encoding (encoded to UTF-8) */ - char *errors; /* Filesystem errors (encoded to UTF-8) */ - _Py_error_handler error_handler; - } fs_codec; - - PyConfig config; -#ifdef HAVE_DLOPEN - int dlopenflags; -#endif - - PyObject *dict; /* Stores per-interpreter state */ - - PyObject *builtins_copy; - PyObject *import_func; - /* Initialized to PyEval_EvalFrameDefault(). */ - _PyFrameEvalFunction eval_frame; - - Py_ssize_t co_extra_user_count; - freefunc co_extra_freefuncs[MAX_CO_EXTRA_USERS]; - -#ifdef HAVE_FORK - PyObject *before_forkers; - PyObject *after_forkers_parent; - PyObject *after_forkers_child; -#endif - /* AtExit module */ - void (*pyexitfunc)(PyObject *); - PyObject *pyexitmodule; - - uint64_t tstate_next_unique_id; - - struct _warnings_runtime_state warnings; - - PyObject *audit_hooks; -}; - -PyAPI_FUNC(struct _is*) _PyInterpreterState_LookUpID(PY_INT64_T); - -PyAPI_FUNC(int) _PyInterpreterState_IDInitref(struct _is *); -PyAPI_FUNC(void) _PyInterpreterState_IDIncref(struct _is *); -PyAPI_FUNC(void) _PyInterpreterState_IDDecref(struct _is *); +/* Check if the current thread is the main thread. + Use _Py_IsMainInterpreter() to check if it's the main interpreter. */ +static inline int +_Py_IsMainThread(void) +{ + unsigned long thread = PyThread_get_thread_ident(); + return (thread == _PyRuntime.main_thread); +} -/* cross-interpreter data registry */ - -/* For now we use a global registry of shareable classes. An - alternative would be to add a tp_* slot for a class's - crossinterpdatafunc. It would be simpler and more efficient. */ - -struct _xidregitem; - -struct _xidregitem { - PyTypeObject *cls; - crossinterpdatafunc getdata; - struct _xidregitem *next; -}; - -/* runtime audit hook state */ - -typedef struct _Py_AuditHookEntry { - struct _Py_AuditHookEntry *next; - Py_AuditHookFunction hookCFunction; - void *userData; -} _Py_AuditHookEntry; - -/* GIL state */ - -struct _gilstate_runtime_state { - int check_enabled; - /* Assuming the current thread holds the GIL, this is the - PyThreadState for the current thread. */ - _Py_atomic_address tstate_current; - PyThreadFrameGetter getframe; - /* The single PyInterpreterState used by this process' - GILState implementation - */ - /* TODO: Given interp_main, it may be possible to kill this ref */ - PyInterpreterState *autoInterpreterState; - Py_tss_t autoTSSkey; -}; - -/* hook for PyEval_GetFrame(), requested for Psyco */ -#define _PyThreadState_GetFrame _PyRuntime.gilstate.getframe - -/* Issue #26558: Flag to disable PyGILState_Check(). - If set to non-zero, PyGILState_Check() always return 1. */ -#define _PyGILState_check_enabled _PyRuntime.gilstate.check_enabled +static inline int +_Py_IsMainInterpreter(PyThreadState* tstate) +{ + /* Use directly _PyRuntime rather than tstate->interp->runtime, since + this function is used in performance critical code path (ceval) */ + return (tstate->interp == _PyRuntime.interpreters.main); +} -/* Full Python runtime state */ +/* Only handle signals on the main thread of the main interpreter. */ +static inline int +_Py_ThreadCanHandleSignals(PyInterpreterState *interp) +{ + return (_Py_IsMainThread() && interp == _PyRuntime.interpreters.main); +} -typedef struct pyruntimestate { - /* Is running Py_PreInitialize()? */ - int preinitializing; - /* Is Python preinitialized? Set to 1 by Py_PreInitialize() */ - int preinitialized; - - /* Is Python core initialized? Set to 1 by _Py_InitializeCore() */ - int core_initialized; - - /* Is Python fully initialized? Set to 1 by Py_Initialize() */ - int initialized; - - /* Set by Py_FinalizeEx(). Only reset to NULL if Py_Initialize() - is called again. */ - PyThreadState *finalizing; - - struct pyinterpreters { - PyThread_type_lock mutex; - PyInterpreterState *head; - PyInterpreterState *main; - /* _next_interp_id is an auto-numbered sequence of small - integers. It gets initialized in _PyInterpreterState_Init(), - which is called in Py_Initialize(), and used in - PyInterpreterState_New(). A negative interpreter ID - indicates an error occurred. The main interpreter will - always have an ID of 0. Overflow results in a RuntimeError. - If that becomes a problem later then we can adjust, e.g. by - using a Python int. */ - int64_t next_id; - } interpreters; - // XXX Remove this field once we have a tp_* slot. - struct _xidregistry { - PyThread_type_lock mutex; - struct _xidregitem *head; - } xidregistry; - - unsigned long main_thread; - -#define NEXITFUNCS 32 - void (*exitfuncs[NEXITFUNCS])(void); - int nexitfuncs; - - struct _gc_runtime_state gc; - struct _ceval_runtime_state ceval; - struct _gilstate_runtime_state gilstate; - - PyPreConfig preconfig; - - Py_OpenCodeHookFunction open_code_hook; - void *open_code_userdata; - _Py_AuditHookEntry *audit_hook_head; - - // XXX Consolidate globals found via the check-c-globals script. -} _PyRuntimeState; - -#define _PyRuntimeState_INIT \ - {.preinitialized = 0, .core_initialized = 0, .initialized = 0} -/* Note: _PyRuntimeState_INIT sets other fields to 0/NULL */ - -PyAPI_DATA(_PyRuntimeState) _PyRuntime; -PyAPI_FUNC(PyStatus) _PyRuntimeState_Init(_PyRuntimeState *runtime); -PyAPI_FUNC(void) _PyRuntimeState_Fini(_PyRuntimeState *runtime); -PyAPI_FUNC(void) _PyRuntimeState_ReInitThreads(_PyRuntimeState *runtime); - -/* Initialize _PyRuntimeState. - Return NULL on success, or return an error message on failure. */ -PyAPI_FUNC(PyStatus) _PyRuntime_Initialize(void); - -PyAPI_FUNC(void) _PyRuntime_Finalize(void); - -#define _Py_CURRENTLY_FINALIZING(runtime, tstate) \ - (runtime->finalizing == tstate) +/* Only execute pending calls on the main thread. */ +static inline int +_Py_ThreadCanHandlePendingCalls(void) +{ + return _Py_IsMainThread(); +} /* Variable and macro for in-line access to current thread and interpreter state */ -#define _PyRuntimeState_GetThreadState(runtime) \ - ((PyThreadState*)_Py_atomic_load_relaxed(&(runtime)->gilstate.tstate_current)) +static inline PyThreadState* +_PyRuntimeState_GetThreadState(_PyRuntimeState *runtime) +{ + return (PyThreadState*)_Py_atomic_load_relaxed(&runtime->gilstate.tstate_current); +} /* Get the current Python thread state. @@ -282,12 +64,31 @@ PyAPI_FUNC(void) _PyRuntime_Finalize(void); The caller must hold the GIL. See also PyThreadState_Get() and PyThreadState_GET(). */ -#define _PyThreadState_GET() _PyRuntimeState_GetThreadState(&_PyRuntime) +static inline PyThreadState* +_PyThreadState_GET(void) +{ + return _PyRuntimeState_GetThreadState(&_PyRuntime); +} /* Redefine PyThreadState_GET() as an alias to _PyThreadState_GET() */ #undef PyThreadState_GET #define PyThreadState_GET() _PyThreadState_GET() +PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalError_TstateNULL(const char *func); + +static inline void +_Py_EnsureFuncTstateNotNULL(const char *func, PyThreadState *tstate) +{ + if (tstate == NULL) { + _Py_FatalError_TstateNULL(func); + } +} + +// Call Py_FatalError() if tstate is NULL +#define _Py_EnsureTstateNotNULL(tstate) \ + _Py_EnsureFuncTstateNotNULL(__func__, tstate) + + /* Get the current interpreter state. The macro is unsafe: it does not check for error and it can return NULL. @@ -296,13 +97,18 @@ PyAPI_FUNC(void) _PyRuntime_Finalize(void); See also _PyInterpreterState_Get() and _PyGILState_GetInterpreterStateUnsafe(). */ -#define _PyInterpreterState_GET_UNSAFE() (_PyThreadState_GET()->interp) +static inline PyInterpreterState* _PyInterpreterState_GET(void) { + PyThreadState *tstate = _PyThreadState_GET(); +#ifdef Py_DEBUG + _Py_EnsureTstateNotNULL(tstate); +#endif + return tstate->interp; +} /* Other */ PyAPI_FUNC(void) _PyThreadState_Init( - _PyRuntimeState *runtime, PyThreadState *tstate); PyAPI_FUNC(void) _PyThreadState_DeleteExcept( _PyRuntimeState *runtime, @@ -318,6 +124,12 @@ PyAPI_FUNC(void) _PyInterpreterState_DeleteExceptMain(_PyRuntimeState *runtime); PyAPI_FUNC(void) _PyGILState_Reinit(_PyRuntimeState *runtime); +PyAPI_FUNC(int) _PyState_AddModule( + PyThreadState *tstate, + PyObject* module, + struct PyModuleDef* def); + + PyAPI_FUNC(int) _PyOS_InterruptOccurred(PyThreadState *tstate); #ifdef __cplusplus diff --git a/src/external/windows/include/python/internal/pycore_runtime.h b/src/external/windows/include/python/internal/pycore_runtime.h new file mode 100755 index 00000000..f0dff829 --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_runtime.h @@ -0,0 +1,144 @@ +#ifndef Py_INTERNAL_RUNTIME_H +#define Py_INTERNAL_RUNTIME_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +#include "pycore_atomic.h" /* _Py_atomic_address */ +#include "pycore_gil.h" // struct _gil_runtime_state + +/* ceval state */ + +struct _ceval_runtime_state { + /* Request for checking signals. It is shared by all interpreters (see + bpo-40513). Any thread of any interpreter can receive a signal, but only + the main thread of the main interpreter can handle signals: see + _Py_ThreadCanHandleSignals(). */ + _Py_atomic_int signals_pending; + struct _gil_runtime_state gil; +}; + +/* GIL state */ + +struct _gilstate_runtime_state { + /* bpo-26558: Flag to disable PyGILState_Check(). + If set to non-zero, PyGILState_Check() always return 1. */ + int check_enabled; + /* Assuming the current thread holds the GIL, this is the + PyThreadState for the current thread. */ + _Py_atomic_address tstate_current; + /* The single PyInterpreterState used by this process' + GILState implementation + */ + /* TODO: Given interp_main, it may be possible to kill this ref */ + PyInterpreterState *autoInterpreterState; + Py_tss_t autoTSSkey; +}; + +/* Runtime audit hook state */ + +typedef struct _Py_AuditHookEntry { + struct _Py_AuditHookEntry *next; + Py_AuditHookFunction hookCFunction; + void *userData; +} _Py_AuditHookEntry; + +/* Full Python runtime state */ + +typedef struct pyruntimestate { + /* Is running Py_PreInitialize()? */ + int preinitializing; + + /* Is Python preinitialized? Set to 1 by Py_PreInitialize() */ + int preinitialized; + + /* Is Python core initialized? Set to 1 by _Py_InitializeCore() */ + int core_initialized; + + /* Is Python fully initialized? Set to 1 by Py_Initialize() */ + int initialized; + + /* Set by Py_FinalizeEx(). Only reset to NULL if Py_Initialize() + is called again. + + Use _PyRuntimeState_GetFinalizing() and _PyRuntimeState_SetFinalizing() + to access it, don't access it directly. */ + _Py_atomic_address _finalizing; + + struct pyinterpreters { + PyThread_type_lock mutex; + PyInterpreterState *head; + PyInterpreterState *main; + /* _next_interp_id is an auto-numbered sequence of small + integers. It gets initialized in _PyInterpreterState_Init(), + which is called in Py_Initialize(), and used in + PyInterpreterState_New(). A negative interpreter ID + indicates an error occurred. The main interpreter will + always have an ID of 0. Overflow results in a RuntimeError. + If that becomes a problem later then we can adjust, e.g. by + using a Python int. */ + int64_t next_id; + } interpreters; + // XXX Remove this field once we have a tp_* slot. + struct _xidregistry { + PyThread_type_lock mutex; + struct _xidregitem *head; + } xidregistry; + + unsigned long main_thread; + +#define NEXITFUNCS 32 + void (*exitfuncs[NEXITFUNCS])(void); + int nexitfuncs; + + struct _ceval_runtime_state ceval; + struct _gilstate_runtime_state gilstate; + + PyPreConfig preconfig; + + Py_OpenCodeHookFunction open_code_hook; + void *open_code_userdata; + _Py_AuditHookEntry *audit_hook_head; + + // XXX Consolidate globals found via the check-c-globals script. +} _PyRuntimeState; + +#define _PyRuntimeState_INIT \ + {.preinitialized = 0, .core_initialized = 0, .initialized = 0} +/* Note: _PyRuntimeState_INIT sets other fields to 0/NULL */ + + +PyAPI_DATA(_PyRuntimeState) _PyRuntime; + +PyAPI_FUNC(PyStatus) _PyRuntimeState_Init(_PyRuntimeState *runtime); +PyAPI_FUNC(void) _PyRuntimeState_Fini(_PyRuntimeState *runtime); + +#ifdef HAVE_FORK +PyAPI_FUNC(void) _PyRuntimeState_ReInitThreads(_PyRuntimeState *runtime); +#endif + +/* Initialize _PyRuntimeState. + Return NULL on success, or return an error message on failure. */ +PyAPI_FUNC(PyStatus) _PyRuntime_Initialize(void); + +PyAPI_FUNC(void) _PyRuntime_Finalize(void); + + +static inline PyThreadState* +_PyRuntimeState_GetFinalizing(_PyRuntimeState *runtime) { + return (PyThreadState*)_Py_atomic_load_relaxed(&runtime->_finalizing); +} + +static inline void +_PyRuntimeState_SetFinalizing(_PyRuntimeState *runtime, PyThreadState *tstate) { + _Py_atomic_store_relaxed(&runtime->_finalizing, (uintptr_t)tstate); +} + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_RUNTIME_H */ diff --git a/src/external/windows/include/python/internal/pycore_sysmodule.h b/src/external/windows/include/python/internal/pycore_sysmodule.h new file mode 100755 index 00000000..363eb873 --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_sysmodule.h @@ -0,0 +1,24 @@ +#ifndef Py_INTERNAL_SYSMODULE_H +#define Py_INTERNAL_SYSMODULE_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +PyAPI_FUNC(int) _PySys_Audit( + PyThreadState *tstate, + const char *event, + const char *argFormat, + ...); + +/* We want minimal exposure of this function, so use extern rather than + PyAPI_FUNC() to not export the symbol. */ +extern void _PySys_ClearAuditHooks(PyThreadState *tstate); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_SYSMODULE_H */ diff --git a/src/external/windows/include/python/internal/pycore_traceback.h b/src/external/windows/include/python/internal/pycore_traceback.h index 701a83c1..274e2d0d 100755 --- a/src/external/windows/include/python/internal/pycore_traceback.h +++ b/src/external/windows/include/python/internal/pycore_traceback.h @@ -8,7 +8,8 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "pystate.h" /* PyInterpreterState */ +/* Forward declaration */ +struct _is; /* Write the Python traceback into the file 'fd'. For example: @@ -56,7 +57,7 @@ PyAPI_FUNC(void) _Py_DumpTraceback( PyAPI_FUNC(const char*) _Py_DumpTracebackThreads( int fd, - PyInterpreterState *interp, + struct _is *interp, PyThreadState *current_tstate); /* Write a Unicode object into the file descriptor fd. Encode the string to @@ -88,7 +89,7 @@ PyAPI_FUNC(void) _Py_DumpHexadecimal( PyAPI_FUNC(PyObject*) _PyTraceBack_FromFrame( PyObject *tb_next, - struct _frame *frame); + PyFrameObject *frame); #ifdef __cplusplus } diff --git a/src/external/windows/include/python/internal/pycore_tupleobject.h b/src/external/windows/include/python/internal/pycore_tupleobject.h index 7607921a..10772fe3 100755 --- a/src/external/windows/include/python/internal/pycore_tupleobject.h +++ b/src/external/windows/include/python/internal/pycore_tupleobject.h @@ -8,7 +8,7 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "tupleobject.h" +#include "tupleobject.h" /* _PyTuple_CAST() */ #define _PyTuple_ITEMS(op) (_PyTuple_CAST(op)->ob_item) PyAPI_FUNC(PyObject *) _PyTuple_FromArray(PyObject *const *, Py_ssize_t); diff --git a/src/external/windows/include/python/internal/pycore_warnings.h b/src/external/windows/include/python/internal/pycore_warnings.h index 94277931..23c50d66 100755 --- a/src/external/windows/include/python/internal/pycore_warnings.h +++ b/src/external/windows/include/python/internal/pycore_warnings.h @@ -8,8 +8,6 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "object.h" - struct _warnings_runtime_state { /* Both 'filters' and 'onceregistry' can be set in warnings.py; get_warnings_attr() will reset these variables accordingly. */ @@ -19,6 +17,8 @@ struct _warnings_runtime_state { long filters_version; }; +extern PyStatus _PyWarnings_InitState(PyThreadState *tstate); + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/iterobject.h b/src/external/windows/include/python/iterobject.h index 610362ad..8022a6ea 100755 --- a/src/external/windows/include/python/iterobject.h +++ b/src/external/windows/include/python/iterobject.h @@ -7,14 +7,13 @@ extern "C" { PyAPI_DATA(PyTypeObject) PySeqIter_Type; PyAPI_DATA(PyTypeObject) PyCallIter_Type; -PyAPI_DATA(PyTypeObject) PyCmpWrapper_Type; -#define PySeqIter_Check(op) (Py_TYPE(op) == &PySeqIter_Type) +#define PySeqIter_Check(op) Py_IS_TYPE(op, &PySeqIter_Type) PyAPI_FUNC(PyObject *) PySeqIter_New(PyObject *); -#define PyCallIter_Check(op) (Py_TYPE(op) == &PyCallIter_Type) +#define PyCallIter_Check(op) Py_IS_TYPE(op, &PyCallIter_Type) PyAPI_FUNC(PyObject *) PyCallIter_New(PyObject *, PyObject *); diff --git a/src/external/windows/include/python/listobject.h b/src/external/windows/include/python/listobject.h index 867f179d..28273493 100755 --- a/src/external/windows/include/python/listobject.h +++ b/src/external/windows/include/python/listobject.h @@ -1,16 +1,14 @@ +/* List object interface -/* List object interface */ + Another generally useful object type is a list of object pointers. + This is a mutable type: the list items can be changed, and items can be + added or removed. Out-of-range indices or non-list objects are ignored. -/* -Another generally useful object type is a list of object pointers. -This is a mutable type: the list items can be changed, and items can be -added or removed. Out-of-range indices or non-list objects are ignored. - -*** WARNING *** PyList_SetItem does not increment the new item's reference -count, but does decrement the reference count of the item it replaces, -if not nil. It does *decrement* the reference count if it is *not* -inserted in the list. Similarly, PyList_GetItem does not increment the -returned item's reference count. + WARNING: PyList_SetItem does not increment the new item's reference count, + but does decrement the reference count of the item it replaces, if not nil. + It does *decrement* the reference count if it is *not* inserted in the list. + Similarly, PyList_GetItem does not increment the returned item's reference + count. */ #ifndef Py_LISTOBJECT_H @@ -19,60 +17,33 @@ returned item's reference count. extern "C" { #endif -#ifndef Py_LIMITED_API -typedef struct { - PyObject_VAR_HEAD - /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */ - PyObject **ob_item; - - /* ob_item contains space for 'allocated' elements. The number - * currently in use is ob_size. - * Invariants: - * 0 <= ob_size <= allocated - * len(list) == ob_size - * ob_item == NULL implies ob_size == allocated == 0 - * list.sort() temporarily sets allocated to -1 to detect mutations. - * - * Items must normally not be NULL, except during construction when - * the list is not yet visible outside the function that builds it. - */ - Py_ssize_t allocated; -} PyListObject; -#endif - PyAPI_DATA(PyTypeObject) PyList_Type; PyAPI_DATA(PyTypeObject) PyListIter_Type; PyAPI_DATA(PyTypeObject) PyListRevIter_Type; -PyAPI_DATA(PyTypeObject) PySortWrapper_Type; #define PyList_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS) -#define PyList_CheckExact(op) (Py_TYPE(op) == &PyList_Type) +#define PyList_CheckExact(op) Py_IS_TYPE(op, &PyList_Type) PyAPI_FUNC(PyObject *) PyList_New(Py_ssize_t size); PyAPI_FUNC(Py_ssize_t) PyList_Size(PyObject *); + PyAPI_FUNC(PyObject *) PyList_GetItem(PyObject *, Py_ssize_t); PyAPI_FUNC(int) PyList_SetItem(PyObject *, Py_ssize_t, PyObject *); PyAPI_FUNC(int) PyList_Insert(PyObject *, Py_ssize_t, PyObject *); PyAPI_FUNC(int) PyList_Append(PyObject *, PyObject *); + PyAPI_FUNC(PyObject *) PyList_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t); PyAPI_FUNC(int) PyList_SetSlice(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *); + PyAPI_FUNC(int) PyList_Sort(PyObject *); PyAPI_FUNC(int) PyList_Reverse(PyObject *); PyAPI_FUNC(PyObject *) PyList_AsTuple(PyObject *); -#ifndef Py_LIMITED_API -PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *); -PyAPI_FUNC(int) PyList_ClearFreeList(void); -PyAPI_FUNC(void) _PyList_DebugMallocStats(FILE *out); -#endif - -/* Macro, trading safety for speed */ #ifndef Py_LIMITED_API -#define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i]) -#define PyList_SET_ITEM(op, i, v) (((PyListObject *)(op))->ob_item[i] = (v)) -#define PyList_GET_SIZE(op) (assert(PyList_Check(op)),Py_SIZE(op)) -#define _PyList_ITEMS(op) (((PyListObject *)(op))->ob_item) +# define Py_CPYTHON_LISTOBJECT_H +# include "cpython/listobject.h" +# undef Py_CPYTHON_LISTOBJECT_H #endif #ifdef __cplusplus diff --git a/src/external/windows/include/python/longobject.h b/src/external/windows/include/python/longobject.h index 962e22b5..3ff911a1 100755 --- a/src/external/windows/include/python/longobject.h +++ b/src/external/windows/include/python/longobject.h @@ -13,7 +13,7 @@ PyAPI_DATA(PyTypeObject) PyLong_Type; #define PyLong_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS) -#define PyLong_CheckExact(op) (Py_TYPE(op) == &PyLong_Type) +#define PyLong_CheckExact(op) Py_IS_TYPE(op, &PyLong_Type) PyAPI_FUNC(PyObject *) PyLong_FromLong(long); PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLong(unsigned long); @@ -74,7 +74,7 @@ PyAPI_FUNC(int) _PyLong_Size_t_Converter(PyObject *, void *); #endif /* Used by Python/mystrtoul.c, _PyBytes_FromHex(), - _PyBytes_DecodeEscapeRecode(), etc. */ + _PyBytes_DecodeEscape(), etc. */ #ifndef Py_LIMITED_API PyAPI_DATA(unsigned char) _PyLong_DigitValue[256]; #endif diff --git a/src/external/windows/include/python/memoryobject.h b/src/external/windows/include/python/memoryobject.h index 82c5f5bd..3a7f2c20 100755 --- a/src/external/windows/include/python/memoryobject.h +++ b/src/external/windows/include/python/memoryobject.h @@ -11,7 +11,7 @@ PyAPI_DATA(PyTypeObject) _PyManagedBuffer_Type; #endif PyAPI_DATA(PyTypeObject) PyMemoryView_Type; -#define PyMemoryView_Check(op) (Py_TYPE(op) == &PyMemoryView_Type) +#define PyMemoryView_Check(op) Py_IS_TYPE(op, &PyMemoryView_Type) #ifndef Py_LIMITED_API /* Get a pointer to the memoryview's private copy of the exporter's buffer. */ diff --git a/src/external/windows/include/python/methodobject.h b/src/external/windows/include/python/methodobject.h index 2e502f04..a90a2b5f 100755 --- a/src/external/windows/include/python/methodobject.h +++ b/src/external/windows/include/python/methodobject.h @@ -13,7 +13,8 @@ extern "C" { PyAPI_DATA(PyTypeObject) PyCFunction_Type; -#define PyCFunction_Check(op) (Py_TYPE(op) == &PyCFunction_Type) +#define PyCFunction_CheckExact(op) Py_IS_TYPE(op, &PyCFunction_Type) +#define PyCFunction_Check(op) PyObject_TypeCheck(op, &PyCFunction_Type) typedef PyObject *(*PyCFunction)(PyObject *, PyObject *); typedef PyObject *(*_PyCFunctionFast) (PyObject *, PyObject *const *, Py_ssize_t); @@ -22,31 +23,14 @@ typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *, typedef PyObject *(*_PyCFunctionFastWithKeywords) (PyObject *, PyObject *const *, Py_ssize_t, PyObject *); -typedef PyObject *(*PyNoArgsFunction)(PyObject *); +typedef PyObject *(*PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, + size_t, PyObject *); PyAPI_FUNC(PyCFunction) PyCFunction_GetFunction(PyObject *); PyAPI_FUNC(PyObject *) PyCFunction_GetSelf(PyObject *); PyAPI_FUNC(int) PyCFunction_GetFlags(PyObject *); -/* Macros for direct access to these values. Type checks are *not* - done, so use with care. */ -#ifndef Py_LIMITED_API -#define PyCFunction_GET_FUNCTION(func) \ - (((PyCFunctionObject *)func) -> m_ml -> ml_meth) -#define PyCFunction_GET_SELF(func) \ - (((PyCFunctionObject *)func) -> m_ml -> ml_flags & METH_STATIC ? \ - NULL : ((PyCFunctionObject *)func) -> m_self) -#define PyCFunction_GET_FLAGS(func) \ - (((PyCFunctionObject *)func) -> m_ml -> ml_flags) -#endif -PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *); - -#ifndef Py_LIMITED_API -PyAPI_FUNC(PyObject *) _PyCFunction_FastCallDict(PyObject *func, - PyObject *const *args, - Py_ssize_t nargs, - PyObject *kwargs); -#endif +Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *); struct PyMethodDef { const char *ml_name; /* The name of the built-in function/method */ @@ -61,6 +45,13 @@ typedef struct PyMethodDef PyMethodDef; PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *, PyObject *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 +#define PyCFunction_NewEx(ML, SELF, MOD) PyCMethod_New((ML), (SELF), (MOD), NULL) +PyAPI_FUNC(PyObject *) PyCMethod_New(PyMethodDef *, PyObject *, + PyObject *, PyTypeObject *); +#endif + + /* Flag passed to newmethodobject */ /* #define METH_OLDARGS 0x0000 -- unsupported now */ #define METH_VARARGS 0x0001 @@ -93,36 +84,24 @@ PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *, #define METH_STACKLESS 0x0000 #endif -#ifndef Py_LIMITED_API -typedef struct { - PyObject_HEAD - PyMethodDef *m_ml; /* Description of the C function to call */ - PyObject *m_self; /* Passed as 'self' arg to the C func, can be NULL */ - PyObject *m_module; /* The __module__ attribute, can be anything */ - PyObject *m_weakreflist; /* List of weak references */ - vectorcallfunc vectorcall; -} PyCFunctionObject; +/* METH_METHOD means the function stores an + * additional reference to the class that defines it; + * both self and class are passed to it. + * It uses PyCMethodObject instead of PyCFunctionObject. + * May not be combined with METH_NOARGS, METH_O, METH_CLASS or METH_STATIC. + */ -PyAPI_FUNC(PyObject *) _PyMethodDef_RawFastCallDict( - PyMethodDef *method, - PyObject *self, - PyObject *const *args, - Py_ssize_t nargs, - PyObject *kwargs); - -PyAPI_FUNC(PyObject *) _PyMethodDef_RawFastCallKeywords( - PyMethodDef *method, - PyObject *self, - PyObject *const *args, - Py_ssize_t nargs, - PyObject *kwnames); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 +#define METH_METHOD 0x0200 #endif -PyAPI_FUNC(int) PyCFunction_ClearFreeList(void); #ifndef Py_LIMITED_API -PyAPI_FUNC(void) _PyCFunction_DebugMallocStats(FILE *out); -PyAPI_FUNC(void) _PyMethod_DebugMallocStats(FILE *out); + +#define Py_CPYTHON_METHODOBJECT_H +#include "cpython/methodobject.h" +#undef Py_CPYTHON_METHODOBJECT_H + #endif #ifdef __cplusplus diff --git a/src/external/windows/include/python/modsupport.h b/src/external/windows/include/python/modsupport.h index 51f112b1..79911626 100755 --- a/src/external/windows/include/python/modsupport.h +++ b/src/external/windows/include/python/modsupport.h @@ -60,9 +60,12 @@ PyAPI_FUNC(int) _PyArg_UnpackStack( ...); PyAPI_FUNC(int) _PyArg_NoKeywords(const char *funcname, PyObject *kwargs); +PyAPI_FUNC(int) _PyArg_NoKwnames(const char *funcname, PyObject *kwnames); PyAPI_FUNC(int) _PyArg_NoPositional(const char *funcname, PyObject *args); #define _PyArg_NoKeywords(funcname, kwargs) \ ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs))) +#define _PyArg_NoKwnames(funcname, kwnames) \ + ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames))) #define _PyArg_NoPositional(funcname, args) \ ((args) == NULL || _PyArg_NoPositional((funcname), (args))) @@ -136,6 +139,10 @@ void _PyArg_Fini(void); PyAPI_FUNC(int) PyModule_AddObject(PyObject *, const char *, PyObject *); PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, const char *, long); PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 +/* New in 3.9 */ +PyAPI_FUNC(int) PyModule_AddType(PyObject *module, PyTypeObject *type); +#endif /* Py_LIMITED_API */ #define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant(m, #c, c) #define PyModule_AddStringMacro(m, c) PyModule_AddStringConstant(m, #c, c) diff --git a/src/external/windows/include/python/moduleobject.h b/src/external/windows/include/python/moduleobject.h index bba2d41f..f02e32bb 100755 --- a/src/external/windows/include/python/moduleobject.h +++ b/src/external/windows/include/python/moduleobject.h @@ -10,7 +10,7 @@ extern "C" { PyAPI_DATA(PyTypeObject) PyModule_Type; #define PyModule_Check(op) PyObject_TypeCheck(op, &PyModule_Type) -#define PyModule_CheckExact(op) (Py_TYPE(op) == &PyModule_Type) +#define PyModule_CheckExact(op) Py_IS_TYPE(op, &PyModule_Type) #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 PyAPI_FUNC(PyObject *) PyModule_NewObject( diff --git a/src/external/windows/include/python/node.h b/src/external/windows/include/python/node.h index a56e98be..8db6298d 100755 --- a/src/external/windows/include/python/node.h +++ b/src/external/windows/include/python/node.h @@ -31,7 +31,6 @@ PyAPI_FUNC(Py_ssize_t) _PyNode_SizeOf(node *n); #define NCH(n) ((n)->n_nchildren) #define CHILD(n, i) (&(n)->n_child[i]) -#define RCHILD(n, i) (CHILD(n, NCH(n) + i)) #define TYPE(n) ((n)->n_type) #define STR(n) ((n)->n_str) #define LINENO(n) ((n)->n_lineno) diff --git a/src/external/windows/include/python/object.h b/src/external/windows/include/python/object.h index 090bf58a..b07337f6 100755 --- a/src/external/windows/include/python/object.h +++ b/src/external/windows/include/python/object.h @@ -1,8 +1,6 @@ #ifndef Py_OBJECT_H #define Py_OBJECT_H -#include "pymem.h" /* _Py_tracemalloc_config */ - #ifdef __cplusplus extern "C" { #endif @@ -63,6 +61,9 @@ whose size is determined when the object is allocated. #error Py_LIMITED_API is incompatible with Py_DEBUG, Py_TRACE_REFS, and Py_REF_DEBUG #endif +/* PyTypeObject structure is defined in cpython/object.h. + In Py_LIMITED_API, PyTypeObject is an opaque structure. */ +typedef struct _typeobject PyTypeObject; #ifdef Py_TRACE_REFS /* Define pointers to support a doubly-linked list of all live heap objects. */ @@ -104,11 +105,12 @@ whose size is determined when the object is allocated. typedef struct _object { _PyObject_HEAD_EXTRA Py_ssize_t ob_refcnt; - struct _typeobject *ob_type; + PyTypeObject *ob_type; } PyObject; /* Cast argument to PyObject* type. */ #define _PyObject_CAST(op) ((PyObject*)(op)) +#define _PyObject_CAST_CONST(op) ((const PyObject*)(op)) typedef struct { PyObject ob_base; @@ -122,6 +124,27 @@ typedef struct { #define Py_TYPE(ob) (_PyObject_CAST(ob)->ob_type) #define Py_SIZE(ob) (_PyVarObject_CAST(ob)->ob_size) +static inline int _Py_IS_TYPE(const PyObject *ob, const PyTypeObject *type) { + return ob->ob_type == type; +} +#define Py_IS_TYPE(ob, type) _Py_IS_TYPE(_PyObject_CAST_CONST(ob), type) + +static inline void _Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) { + ob->ob_refcnt = refcnt; +} +#define Py_SET_REFCNT(ob, refcnt) _Py_SET_REFCNT(_PyObject_CAST(ob), refcnt) + +static inline void _Py_SET_TYPE(PyObject *ob, PyTypeObject *type) { + ob->ob_type = type; +} +#define Py_SET_TYPE(ob, type) _Py_SET_TYPE(_PyObject_CAST(ob), type) + +static inline void _Py_SET_SIZE(PyVarObject *ob, Py_ssize_t size) { + ob->ob_size = size; +} +#define Py_SET_SIZE(ob, size) _Py_SET_SIZE(_PyVarObject_CAST(ob), size) + + /* Type objects contain a string containing the type name (to help somewhat in debugging), the allocation parameters (see PyObject_New() and @@ -167,15 +190,8 @@ typedef PyObject *(*iternextfunc) (PyObject *); typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *); typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *); typedef int (*initproc)(PyObject *, PyObject *, PyObject *); -typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *); -typedef PyObject *(*allocfunc)(struct _typeobject *, Py_ssize_t); - -#ifdef Py_LIMITED_API -/* In Py_LIMITED_API, PyTypeObject is an opaque structure. */ -typedef struct _typeobject PyTypeObject; -#else -/* PyTypeObject is defined in cpython/object.h */ -#endif +typedef PyObject *(*newfunc)(PyTypeObject *, PyObject *, PyObject *); +typedef PyObject *(*allocfunc)(PyTypeObject *, Py_ssize_t); typedef struct{ int slot; /* slot id, see below */ @@ -195,30 +211,31 @@ PyAPI_FUNC(PyObject*) PyType_FromSpec(PyType_Spec*); PyAPI_FUNC(PyObject*) PyType_FromSpecWithBases(PyType_Spec*, PyObject*); #endif #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000 -PyAPI_FUNC(void*) PyType_GetSlot(struct _typeobject*, int); +PyAPI_FUNC(void*) PyType_GetSlot(PyTypeObject*, int); +#endif +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 +PyAPI_FUNC(PyObject*) PyType_FromModuleAndSpec(PyObject *, PyType_Spec *, PyObject *); +PyAPI_FUNC(PyObject *) PyType_GetModule(struct _typeobject *); +PyAPI_FUNC(void *) PyType_GetModuleState(struct _typeobject *); #endif /* Generic type check */ -PyAPI_FUNC(int) PyType_IsSubtype(struct _typeobject *, struct _typeobject *); +PyAPI_FUNC(int) PyType_IsSubtype(PyTypeObject *, PyTypeObject *); #define PyObject_TypeCheck(ob, tp) \ - (Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp))) + (Py_IS_TYPE(ob, tp) || PyType_IsSubtype(Py_TYPE(ob), (tp))) -PyAPI_DATA(struct _typeobject) PyType_Type; /* built-in 'type' */ -PyAPI_DATA(struct _typeobject) PyBaseObject_Type; /* built-in 'object' */ -PyAPI_DATA(struct _typeobject) PySuper_Type; /* built-in 'super' */ +PyAPI_DATA(PyTypeObject) PyType_Type; /* built-in 'type' */ +PyAPI_DATA(PyTypeObject) PyBaseObject_Type; /* built-in 'object' */ +PyAPI_DATA(PyTypeObject) PySuper_Type; /* built-in 'super' */ -PyAPI_FUNC(unsigned long) PyType_GetFlags(struct _typeobject*); +PyAPI_FUNC(unsigned long) PyType_GetFlags(PyTypeObject*); -#define PyType_Check(op) \ - PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS) -#define PyType_CheckExact(op) (Py_TYPE(op) == &PyType_Type) - -PyAPI_FUNC(int) PyType_Ready(struct _typeobject *); -PyAPI_FUNC(PyObject *) PyType_GenericAlloc(struct _typeobject *, Py_ssize_t); -PyAPI_FUNC(PyObject *) PyType_GenericNew(struct _typeobject *, +PyAPI_FUNC(int) PyType_Ready(PyTypeObject *); +PyAPI_FUNC(PyObject *) PyType_GenericAlloc(PyTypeObject *, Py_ssize_t); +PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *, PyObject *, PyObject *); PyAPI_FUNC(unsigned int) PyType_ClearCache(void); -PyAPI_FUNC(void) PyType_Modified(struct _typeobject *); +PyAPI_FUNC(void) PyType_Modified(PyTypeObject *); /* Generic operations on objects */ PyAPI_FUNC(PyObject *) PyObject_Repr(PyObject *); @@ -235,8 +252,7 @@ PyAPI_FUNC(int) PyObject_SetAttr(PyObject *, PyObject *, PyObject *); PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyObject_SelfIter(PyObject *); PyAPI_FUNC(PyObject *) PyObject_GenericGetAttr(PyObject *, PyObject *); -PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *, - PyObject *, PyObject *); +PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *, PyObject *, PyObject *); #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 PyAPI_FUNC(int) PyObject_GenericSetDict(PyObject *, PyObject *, void *); #endif @@ -290,7 +306,9 @@ given type object has a specified feature. /* Set if the type implements the vectorcall protocol (PEP 590) */ #ifndef Py_LIMITED_API -#define _Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11) +#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11) +// Backwards compatibility alias for API that was provisional in Python 3.8 +#define _Py_TPFLAGS_HAVE_VECTORCALL Py_TPFLAGS_HAVE_VECTORCALL #endif /* Set if the type is 'ready' -- fully initialized */ @@ -337,19 +355,14 @@ given type object has a specified feature. /* NOTE: The following flags reuse lower bits (removed as part of the * Python 3.0 transition). */ -/* The following flag is kept for compatibility. Starting with 3.8, - * binary compatibility of C extensions accross feature releases of +/* The following flag is kept for compatibility. Starting with 3.8, + * binary compatibility of C extensions across feature releases of * Python is not supported anymore, except when using the stable ABI. */ /* Type structure has tp_finalize member (3.4) */ #define Py_TPFLAGS_HAVE_FINALIZE (1UL << 0) -#ifdef Py_LIMITED_API -# define PyType_HasFeature(t,f) ((PyType_GetFlags(t) & (f)) != 0) -#endif -#define PyType_FastSubclass(t,f) PyType_HasFeature(t,f) - /* The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement @@ -379,94 +392,33 @@ decision that's up to the implementer of each new type so if you want, you can count such references to the type object.) */ -/* First define a pile of simple helper macros, one set per special - * build symbol. These either expand to the obvious things, or to - * nothing at all when the special mode isn't in effect. The main - * macros can later be defined just once then, yet expand to different - * things depending on which special build options are and aren't in effect. - * Trust me : while painful, this is 20x easier to understand than, - * e.g, defining _Py_NewReference five different times in a maze of nested - * #ifdefs (we used to do that -- it was impenetrable). - */ #ifdef Py_REF_DEBUG PyAPI_DATA(Py_ssize_t) _Py_RefTotal; PyAPI_FUNC(void) _Py_NegativeRefcount(const char *filename, int lineno, PyObject *op); -PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void); -#define _Py_INC_REFTOTAL _Py_RefTotal++ -#define _Py_DEC_REFTOTAL _Py_RefTotal-- - -/* Py_REF_DEBUG also controls the display of refcounts and memory block - * allocations at the interactive prompt and at interpreter shutdown - */ -PyAPI_FUNC(void) _PyDebug_PrintTotalRefs(void); -#else -#define _Py_INC_REFTOTAL -#define _Py_DEC_REFTOTAL #endif /* Py_REF_DEBUG */ -#ifdef COUNT_ALLOCS -PyAPI_FUNC(void) _Py_inc_count(struct _typeobject *); -PyAPI_FUNC(void) _Py_dec_count(struct _typeobject *); -#define _Py_INC_TPALLOCS(OP) _Py_inc_count(Py_TYPE(OP)) -#define _Py_INC_TPFREES(OP) _Py_dec_count(Py_TYPE(OP)) -#define _Py_DEC_TPFREES(OP) Py_TYPE(OP)->tp_frees-- -#define _Py_COUNT_ALLOCS_COMMA , -#else -#define _Py_INC_TPALLOCS(OP) -#define _Py_INC_TPFREES(OP) -#define _Py_DEC_TPFREES(OP) -#define _Py_COUNT_ALLOCS_COMMA -#endif /* COUNT_ALLOCS */ - -/* Update the Python traceback of an object. This function must be called - when a memory block is reused from a free list. */ -PyAPI_FUNC(int) _PyTraceMalloc_NewReference(PyObject *op); - -#ifdef Py_TRACE_REFS -/* Py_TRACE_REFS is such major surgery that we call external routines. */ -PyAPI_FUNC(void) _Py_NewReference(PyObject *); -PyAPI_FUNC(void) _Py_ForgetReference(PyObject *); -PyAPI_FUNC(void) _Py_PrintReferences(FILE *); -PyAPI_FUNC(void) _Py_PrintReferenceAddresses(FILE *); -PyAPI_FUNC(void) _Py_AddToAllObjects(PyObject *, int force); -#else -/* Without Py_TRACE_REFS, there's little enough to do that we expand code - inline. */ -static inline void _Py_NewReference(PyObject *op) -{ - if (_Py_tracemalloc_config.tracing) { - _PyTraceMalloc_NewReference(op); - } - _Py_INC_TPALLOCS(op); - _Py_INC_REFTOTAL; - Py_REFCNT(op) = 1; -} - -static inline void _Py_ForgetReference(PyObject *op) -{ - (void)op; /* may be unused, shut up -Wunused-parameter */ - _Py_INC_TPFREES(op); -} -#endif /* !Py_TRACE_REFS */ - - PyAPI_FUNC(void) _Py_Dealloc(PyObject *); static inline void _Py_INCREF(PyObject *op) { - _Py_INC_REFTOTAL; +#ifdef Py_REF_DEBUG + _Py_RefTotal++; +#endif op->ob_refcnt++; } #define Py_INCREF(op) _Py_INCREF(_PyObject_CAST(op)) -static inline void _Py_DECREF(const char *filename, int lineno, - PyObject *op) +static inline void _Py_DECREF( +#ifdef Py_REF_DEBUG + const char *filename, int lineno, +#endif + PyObject *op) { - (void)filename; /* may be unused, shut up -Wunused-parameter */ - (void)lineno; /* may be unused, shut up -Wunused-parameter */ - _Py_DEC_REFTOTAL; +#ifdef Py_REF_DEBUG + _Py_RefTotal--; +#endif if (--op->ob_refcnt != 0) { #ifdef Py_REF_DEBUG if (op->ob_refcnt < 0) { @@ -479,7 +431,11 @@ static inline void _Py_DECREF(const char *filename, int lineno, } } -#define Py_DECREF(op) _Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op)) +#ifdef Py_REF_DEBUG +# define Py_DECREF(op) _Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op)) +#else +# define Py_DECREF(op) _Py_DECREF(_PyObject_CAST(op)) +#endif /* Safely decref `op` and set `op` to NULL, especially useful in tp_clear @@ -654,99 +610,38 @@ it carefully, it may save lots of calls to Py_INCREF() and Py_DECREF() at times. */ - -/* Trashcan mechanism, thanks to Christian Tismer. - -When deallocating a container object, it's possible to trigger an unbounded -chain of deallocations, as each Py_DECREF in turn drops the refcount on "the -next" object in the chain to 0. This can easily lead to stack overflows, -especially in threads (which typically have less stack space to work with). - -A container object can avoid this by bracketing the body of its tp_dealloc -function with a pair of macros: - -static void -mytype_dealloc(mytype *p) -{ - ... declarations go here ... - - PyObject_GC_UnTrack(p); // must untrack first - Py_TRASHCAN_BEGIN(p, mytype_dealloc) - ... The body of the deallocator goes here, including all calls ... - ... to Py_DECREF on contained objects. ... - Py_TRASHCAN_END // there should be no code after this -} - -CAUTION: Never return from the middle of the body! If the body needs to -"get out early", put a label immediately before the Py_TRASHCAN_END -call, and goto it. Else the call-depth counter (see below) will stay -above 0 forever, and the trashcan will never get emptied. - -How it works: The BEGIN macro increments a call-depth counter. So long -as this counter is small, the body of the deallocator is run directly without -further ado. But if the counter gets large, it instead adds p to a list of -objects to be deallocated later, skips the body of the deallocator, and -resumes execution after the END macro. The tp_dealloc routine then returns -without deallocating anything (and so unbounded call-stack depth is avoided). - -When the call stack finishes unwinding again, code generated by the END macro -notices this, and calls another routine to deallocate all the objects that -may have been added to the list of deferred deallocations. In effect, a -chain of N deallocations is broken into (N-1)/(PyTrash_UNWIND_LEVEL-1) pieces, -with the call stack never exceeding a depth of PyTrash_UNWIND_LEVEL. - -Since the tp_dealloc of a subclass typically calls the tp_dealloc of the base -class, we need to ensure that the trashcan is only triggered on the tp_dealloc -of the actual class being deallocated. Otherwise we might end up with a -partially-deallocated object. To check this, the tp_dealloc function must be -passed as second argument to Py_TRASHCAN_BEGIN(). -*/ - -/* The new thread-safe private API, invoked by the macros below. */ -PyAPI_FUNC(void) _PyTrash_thread_deposit_object(PyObject*); -PyAPI_FUNC(void) _PyTrash_thread_destroy_chain(void); - -#define PyTrash_UNWIND_LEVEL 50 - -#define Py_TRASHCAN_BEGIN_CONDITION(op, cond) \ - do { \ - PyThreadState *_tstate = NULL; \ - /* If "cond" is false, then _tstate remains NULL and the deallocator \ - * is run normally without involving the trashcan */ \ - if (cond) { \ - _tstate = PyThreadState_GET(); \ - if (_tstate->trash_delete_nesting >= PyTrash_UNWIND_LEVEL) { \ - /* Store the object (to be deallocated later) and jump past \ - * Py_TRASHCAN_END, skipping the body of the deallocator */ \ - _PyTrash_thread_deposit_object(_PyObject_CAST(op)); \ - break; \ - } \ - ++_tstate->trash_delete_nesting; \ - } - /* The body of the deallocator is here. */ -#define Py_TRASHCAN_END \ - if (_tstate) { \ - --_tstate->trash_delete_nesting; \ - if (_tstate->trash_delete_later && _tstate->trash_delete_nesting <= 0) \ - _PyTrash_thread_destroy_chain(); \ - } \ - } while (0); - -#define Py_TRASHCAN_BEGIN(op, dealloc) Py_TRASHCAN_BEGIN_CONDITION(op, \ - Py_TYPE(op)->tp_dealloc == (destructor)(dealloc)) - -/* For backwards compatibility, these macros enable the trashcan - * unconditionally */ -#define Py_TRASHCAN_SAFE_BEGIN(op) Py_TRASHCAN_BEGIN_CONDITION(op, 1) -#define Py_TRASHCAN_SAFE_END(op) Py_TRASHCAN_END - - #ifndef Py_LIMITED_API # define Py_CPYTHON_OBJECT_H # include "cpython/object.h" # undef Py_CPYTHON_OBJECT_H #endif + +static inline int +PyType_HasFeature(PyTypeObject *type, unsigned long feature) +{ + unsigned long flags; +#ifdef Py_LIMITED_API + // PyTypeObject is opaque in the limited C API + flags = PyType_GetFlags(type); +#else + flags = type->tp_flags; +#endif + return ((flags & feature) != 0); +} + +#define PyType_FastSubclass(type, flag) PyType_HasFeature(type, flag) + +static inline int _PyType_Check(PyObject *op) { + return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS); +} +#define PyType_Check(op) _PyType_Check(_PyObject_CAST(op)) + +static inline int _PyType_CheckExact(PyObject *op) { + return Py_IS_TYPE(op, &PyType_Type); +} +#define PyType_CheckExact(op) _PyType_CheckExact(_PyObject_CAST(op)) + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/objimpl.h b/src/external/windows/include/python/objimpl.h index 02f460b6..3045213e 100755 --- a/src/external/windows/include/python/objimpl.h +++ b/src/external/windows/include/python/objimpl.h @@ -122,103 +122,32 @@ PyAPI_FUNC(PyVarObject *) PyObject_InitVar(PyVarObject *, PyAPI_FUNC(PyObject *) _PyObject_New(PyTypeObject *); PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, Py_ssize_t); -#define PyObject_New(type, typeobj) \ - ( (type *) _PyObject_New(typeobj) ) +#define PyObject_New(type, typeobj) ((type *)_PyObject_New(typeobj)) + +// Alias to PyObject_New(). In Python 3.8, PyObject_NEW() called directly +// PyObject_MALLOC() with _PyObject_SIZE(). +#define PyObject_NEW(type, typeobj) PyObject_New(type, typeobj) + #define PyObject_NewVar(type, typeobj, n) \ ( (type *) _PyObject_NewVar((typeobj), (n)) ) -/* Inline functions trading binary compatibility for speed: - PyObject_INIT() is the fast version of PyObject_Init(), and - PyObject_INIT_VAR() is the fast version of PyObject_InitVar. - See also pymem.h. +// Alias to PyObject_New(). In Python 3.8, PyObject_NEW() called directly +// PyObject_MALLOC() with _PyObject_VAR_SIZE(). +#define PyObject_NEW_VAR(type, typeobj, n) PyObject_NewVar(type, typeobj, n) - These inline functions expect non-NULL object pointers. */ -static inline PyObject* -_PyObject_INIT(PyObject *op, PyTypeObject *typeobj) -{ - assert(op != NULL); - Py_TYPE(op) = typeobj; - if (PyType_GetFlags(typeobj) & Py_TPFLAGS_HEAPTYPE) { - Py_INCREF(typeobj); - } - _Py_NewReference(op); - return op; -} -#define PyObject_INIT(op, typeobj) \ - _PyObject_INIT(_PyObject_CAST(op), (typeobj)) - -static inline PyVarObject* -_PyObject_INIT_VAR(PyVarObject *op, PyTypeObject *typeobj, Py_ssize_t size) -{ - assert(op != NULL); - Py_SIZE(op) = size; - PyObject_INIT((PyObject *)op, typeobj); - return op; -} - -#define PyObject_INIT_VAR(op, typeobj, size) \ - _PyObject_INIT_VAR(_PyVarObject_CAST(op), (typeobj), (size)) - -#define _PyObject_SIZE(typeobj) ( (typeobj)->tp_basicsize ) - -/* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a - vrbl-size object with nitems items, exclusive of gc overhead (if any). The - value is rounded up to the closest multiple of sizeof(void *), in order to - ensure that pointer fields at the end of the object are correctly aligned - for the platform (this is of special importance for subclasses of, e.g., - str or int, so that pointers can be stored after the embedded data). - - Note that there's no memory wastage in doing this, as malloc has to - return (at worst) pointer-aligned memory anyway. -*/ -#if ((SIZEOF_VOID_P - 1) & SIZEOF_VOID_P) != 0 -# error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2" +#ifdef Py_LIMITED_API +/* Define PyObject_INIT() and PyObject_INIT_VAR() as aliases to PyObject_Init() + and PyObject_InitVar() in the limited C API for compatibility with the + CPython C API. */ +# define PyObject_INIT(op, typeobj) \ + PyObject_Init(_PyObject_CAST(op), (typeobj)) +# define PyObject_INIT_VAR(op, typeobj, size) \ + PyObject_InitVar(_PyVarObject_CAST(op), (typeobj), (size)) +#else +/* PyObject_INIT() and PyObject_INIT_VAR() are defined in cpython/objimpl.h */ #endif -#define _PyObject_VAR_SIZE(typeobj, nitems) \ - _Py_SIZE_ROUND_UP((typeobj)->tp_basicsize + \ - (nitems)*(typeobj)->tp_itemsize, \ - SIZEOF_VOID_P) - -#define PyObject_NEW(type, typeobj) \ -( (type *) PyObject_Init( \ - (PyObject *) PyObject_MALLOC( _PyObject_SIZE(typeobj) ), (typeobj)) ) - -#define PyObject_NEW_VAR(type, typeobj, n) \ -( (type *) PyObject_InitVar( \ - (PyVarObject *) PyObject_MALLOC(_PyObject_VAR_SIZE((typeobj),(n)) ),\ - (typeobj), (n)) ) - -/* This example code implements an object constructor with a custom - allocator, where PyObject_New is inlined, and shows the important - distinction between two steps (at least): - 1) the actual allocation of the object storage; - 2) the initialization of the Python specific fields - in this storage with PyObject_{Init, InitVar}. - - PyObject * - YourObject_New(...) - { - PyObject *op; - - op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct)); - if (op == NULL) - return PyErr_NoMemory(); - - PyObject_Init(op, &YourTypeStruct); - - op->ob_field = value; - ... - return op; - } - - Note that in C++, the use of the new operator usually implies that - the 1st step is performed automatically for you, so in a C++ class - constructor you would start directly with PyObject_Init/InitVar -*/ - - /* * Garbage Collection Support @@ -257,6 +186,8 @@ PyAPI_FUNC(void) PyObject_GC_Del(void *); #define PyObject_GC_NewVar(type, typeobj, n) \ ( (type *) _PyObject_GC_NewVar((typeobj), (n)) ) +PyAPI_FUNC(int) PyObject_GC_IsTracked(PyObject *); +PyAPI_FUNC(int) PyObject_GC_IsFinalized(PyObject *); /* Utility macro to help write tp_traverse functions. * To use this macro, the tp_traverse function must name its arguments diff --git a/src/external/windows/include/python/odictobject.h b/src/external/windows/include/python/odictobject.h index a5570cba..881e7ebc 100755 --- a/src/external/windows/include/python/odictobject.h +++ b/src/external/windows/include/python/odictobject.h @@ -19,7 +19,7 @@ PyAPI_DATA(PyTypeObject) PyODictItems_Type; PyAPI_DATA(PyTypeObject) PyODictValues_Type; #define PyODict_Check(op) PyObject_TypeCheck(op, &PyODict_Type) -#define PyODict_CheckExact(op) (Py_TYPE(op) == &PyODict_Type) +#define PyODict_CheckExact(op) Py_IS_TYPE(op, &PyODict_Type) #define PyODict_SIZE(op) PyDict_GET_SIZE((op)) PyAPI_FUNC(PyObject *) PyODict_New(void); diff --git a/src/external/windows/include/python/opcode.h b/src/external/windows/include/python/opcode.h index cd8f3ad1..f86c2f93 100755 --- a/src/external/windows/include/python/opcode.h +++ b/src/external/windows/include/python/opcode.h @@ -30,10 +30,11 @@ extern "C" { #define BINARY_TRUE_DIVIDE 27 #define INPLACE_FLOOR_DIVIDE 28 #define INPLACE_TRUE_DIVIDE 29 +#define RERAISE 48 +#define WITH_EXCEPT_START 49 #define GET_AITER 50 #define GET_ANEXT 51 #define BEFORE_ASYNC_WITH 52 -#define BEGIN_FINALLY 53 #define END_ASYNC_FOR 54 #define INPLACE_ADD 55 #define INPLACE_SUBTRACT 56 @@ -53,19 +54,18 @@ extern "C" { #define LOAD_BUILD_CLASS 71 #define YIELD_FROM 72 #define GET_AWAITABLE 73 +#define LOAD_ASSERTION_ERROR 74 #define INPLACE_LSHIFT 75 #define INPLACE_RSHIFT 76 #define INPLACE_AND 77 #define INPLACE_XOR 78 #define INPLACE_OR 79 -#define WITH_CLEANUP_START 81 -#define WITH_CLEANUP_FINISH 82 +#define LIST_TO_TUPLE 82 #define RETURN_VALUE 83 #define IMPORT_STAR 84 #define SETUP_ANNOTATIONS 85 #define YIELD_VALUE 86 #define POP_BLOCK 87 -#define END_FINALLY 88 #define POP_EXCEPT 89 #define HAVE_ARGUMENT 90 #define STORE_NAME 90 @@ -94,6 +94,9 @@ extern "C" { #define POP_JUMP_IF_FALSE 114 #define POP_JUMP_IF_TRUE 115 #define LOAD_GLOBAL 116 +#define IS_OP 117 +#define CONTAINS_OP 118 +#define JUMP_IF_NOT_EXC_MATCH 121 #define SETUP_FINALLY 122 #define LOAD_FAST 124 #define STORE_FAST 125 @@ -114,20 +117,16 @@ extern "C" { #define SET_ADD 146 #define MAP_ADD 147 #define LOAD_CLASSDEREF 148 -#define BUILD_LIST_UNPACK 149 -#define BUILD_MAP_UNPACK 150 -#define BUILD_MAP_UNPACK_WITH_CALL 151 -#define BUILD_TUPLE_UNPACK 152 -#define BUILD_SET_UNPACK 153 #define SETUP_ASYNC_WITH 154 #define FORMAT_VALUE 155 #define BUILD_CONST_KEY_MAP 156 #define BUILD_STRING 157 -#define BUILD_TUPLE_UNPACK_WITH_CALL 158 #define LOAD_METHOD 160 #define CALL_METHOD 161 -#define CALL_FINALLY 162 -#define POP_FINALLY 163 +#define LIST_EXTEND 162 +#define SET_UPDATE 163 +#define DICT_MERGE 164 +#define DICT_UPDATE 165 /* EXCEPT_HANDLER is a special, implicit block type which is created when entering an except handler. It is not an opcode but we define it here @@ -135,11 +134,6 @@ extern "C" { remaining private.*/ #define EXCEPT_HANDLER 257 - -enum cmp_op {PyCmp_LT=Py_LT, PyCmp_LE=Py_LE, PyCmp_EQ=Py_EQ, PyCmp_NE=Py_NE, - PyCmp_GT=Py_GT, PyCmp_GE=Py_GE, PyCmp_IN, PyCmp_NOT_IN, - PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD}; - #define HAS_ARG(op) ((op) >= HAVE_ARGUMENT) #ifdef __cplusplus diff --git a/src/external/windows/include/python/patchlevel.h b/src/external/windows/include/python/patchlevel.h index 627a5337..afb4c012 100755 --- a/src/external/windows/include/python/patchlevel.h +++ b/src/external/windows/include/python/patchlevel.h @@ -17,13 +17,13 @@ /* Version parsed out into numeric values */ /*--start constants--*/ #define PY_MAJOR_VERSION 3 -#define PY_MINOR_VERSION 8 -#define PY_MICRO_VERSION 5 +#define PY_MINOR_VERSION 9 +#define PY_MICRO_VERSION 7 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.8.5" +#define PY_VERSION "3.9.7" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/src/external/windows/include/python/picklebufobject.h b/src/external/windows/include/python/picklebufobject.h index 1f13a98a..5d0b0cfa 100755 --- a/src/external/windows/include/python/picklebufobject.h +++ b/src/external/windows/include/python/picklebufobject.h @@ -12,7 +12,7 @@ extern "C" { PyAPI_DATA(PyTypeObject) PyPickleBuffer_Type; -#define PyPickleBuffer_Check(op) (Py_TYPE(op) == &PyPickleBuffer_Type) +#define PyPickleBuffer_Check(op) Py_IS_TYPE(op, &PyPickleBuffer_Type) /* Create a PickleBuffer redirecting to the given buffer-enabled object */ PyAPI_FUNC(PyObject *) PyPickleBuffer_FromObject(PyObject *); diff --git a/src/external/windows/include/python/py_curses.h b/src/external/windows/include/python/py_curses.h index 4bcd27ea..b65aaa7b 100755 --- a/src/external/windows/include/python/py_curses.h +++ b/src/external/windows/include/python/py_curses.h @@ -64,7 +64,7 @@ typedef struct { char *encoding; } PyCursesWindowObject; -#define PyCursesWindow_Check(v) (Py_TYPE(v) == &PyCursesWindow_Type) +#define PyCursesWindow_Check(v) Py_IS_TYPE(v, &PyCursesWindow_Type) #define PyCurses_CAPSULE_NAME "_curses._C_API" @@ -97,4 +97,3 @@ static const char catchall_NULL[] = "curses function returned NULL"; #endif /* !defined(Py_CURSES_H) */ - diff --git a/src/external/windows/include/python/pycapsule.h b/src/external/windows/include/python/pycapsule.h index 358501e3..9387a1c7 100755 --- a/src/external/windows/include/python/pycapsule.h +++ b/src/external/windows/include/python/pycapsule.h @@ -22,7 +22,7 @@ PyAPI_DATA(PyTypeObject) PyCapsule_Type; typedef void (*PyCapsule_Destructor)(PyObject *); -#define PyCapsule_CheckExact(op) (Py_TYPE(op) == &PyCapsule_Type) +#define PyCapsule_CheckExact(op) Py_IS_TYPE(op, &PyCapsule_Type) PyAPI_FUNC(PyObject *) PyCapsule_New( diff --git a/src/external/windows/include/python/pyconfig.h b/src/external/windows/include/python/pyconfig.h index 8c77b4f7..0d5ac77f 100755 --- a/src/external/windows/include/python/pyconfig.h +++ b/src/external/windows/include/python/pyconfig.h @@ -135,9 +135,9 @@ WIN32 is still required for the locale module. #endif /* MS_WIN64 */ /* set the version macros for the windows headers */ -/* Python 3.5+ requires Windows Vista or greater */ -#define Py_WINVER 0x0600 /* _WIN32_WINNT_VISTA */ -#define Py_NTDDI NTDDI_VISTA +/* Python 3.9+ requires Windows 8 or greater */ +#define Py_WINVER 0x0602 /* _WIN32_WINNT_WIN8 */ +#define Py_NTDDI NTDDI_WIN8 /* We only set these values when building Python - we don't want to force these values on extensions, as that will affect the prototypes and @@ -193,12 +193,6 @@ typedef int pid_t; #define Py_IS_NAN _isnan #define Py_IS_INFINITY(X) (!_finite(X) && !_isnan(X)) #define Py_IS_FINITE(X) _finite(X) -#define copysign _copysign - -/* Side by Side assemblies supported in VS 2005 and VS 2008 but not 2010*/ -#if _MSC_VER >= 1400 && _MSC_VER < 1600 -#define HAVE_SXS 1 -#endif /* define some ANSI types that are not defined in earlier Win headers */ #if _MSC_VER >= 1200 @@ -274,11 +268,11 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ file in their Makefile (other compilers are generally taken care of by distutils.) */ # if defined(_DEBUG) -# pragma comment(lib,"python38_d.lib") +# pragma comment(lib,"python39_d.lib") # elif defined(Py_LIMITED_API) # pragma comment(lib,"python3.lib") # else -# pragma comment(lib,"python38.lib") +# pragma comment(lib,"python39.lib") # endif /* _DEBUG */ # endif /* _MSC_VER */ # endif /* Py_BUILD_CORE */ @@ -296,7 +290,7 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ # define SIZEOF_HKEY 8 # define SIZEOF_SIZE_T 8 /* configure.ac defines HAVE_LARGEFILE_SUPPORT iff - sizeof(off_t) > sizeof(long), and sizeof(PY_LONG_LONG) >= sizeof(off_t). + sizeof(off_t) > sizeof(long), and sizeof(long long) >= sizeof(off_t). On Win64 the second condition is not true, but if fpos_t replaces off_t then this is true. The uses of HAVE_LARGEFILE_SUPPORT imply that Win64 should define this. */ @@ -688,4 +682,6 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ /* Define if libssl has X509_VERIFY_PARAM_set1_host and related function */ #define HAVE_X509_VERIFY_PARAM_SET1_HOST 1 +#define PLATLIBDIR "lib" + #endif /* !Py_CONFIG_H */ diff --git a/src/external/windows/include/python/pyctype.h b/src/external/windows/include/python/pyctype.h index ee22795a..8f4bd79c 100755 --- a/src/external/windows/include/python/pyctype.h +++ b/src/external/windows/include/python/pyctype.h @@ -1,6 +1,9 @@ #ifndef Py_LIMITED_API #ifndef PYCTYPE_H #define PYCTYPE_H +#ifdef __cplusplus +extern "C" { +#endif #define PY_CTF_LOWER 0x01 #define PY_CTF_UPPER 0x02 @@ -29,5 +32,8 @@ PyAPI_DATA(const unsigned char) _Py_ctype_toupper[256]; #define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)]) #define Py_TOUPPER(c) (_Py_ctype_toupper[Py_CHARMASK(c)]) +#ifdef __cplusplus +} +#endif #endif /* !PYCTYPE_H */ #endif /* !Py_LIMITED_API */ diff --git a/src/external/windows/include/python/pydebug.h b/src/external/windows/include/python/pydebug.h index c983d0a9..e34cf907 100755 --- a/src/external/windows/include/python/pydebug.h +++ b/src/external/windows/include/python/pydebug.h @@ -5,8 +5,6 @@ extern "C" { #endif -/* These global variable are defined in pylifecycle.c */ -/* XXX (ncoghlan): move these declarations to pylifecycle.h? */ PyAPI_DATA(int) Py_DebugFlag; PyAPI_DATA(int) Py_VerboseFlag; PyAPI_DATA(int) Py_QuietFlag; diff --git a/src/external/windows/include/python/pyerrors.h b/src/external/windows/include/python/pyerrors.h index 6b7895f4..bd634e71 100755 --- a/src/external/windows/include/python/pyerrors.h +++ b/src/external/windows/include/python/pyerrors.h @@ -4,6 +4,8 @@ extern "C" { #endif +#include // va_list + /* Error handling definitions */ PyAPI_FUNC(void) PyErr_SetNone(PyObject *); @@ -21,7 +23,11 @@ PyAPI_FUNC(void) PyErr_GetExcInfo(PyObject **, PyObject **, PyObject **); PyAPI_FUNC(void) PyErr_SetExcInfo(PyObject *, PyObject *, PyObject *); #endif -/* Defined in Python/pylifecycle.c */ +/* Defined in Python/pylifecycle.c + + The Py_FatalError() function is replaced with a macro which logs + automatically the name of the current function, unless the Py_LIMITED_API + macro is defined. */ PyAPI_FUNC(void) _Py_NO_RETURN Py_FatalError(const char *message); #if defined(Py_DEBUG) || defined(Py_LIMITED_API) @@ -54,11 +60,11 @@ PyAPI_FUNC(void) PyException_SetContext(PyObject *, PyObject *); PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)) #define PyExceptionInstance_Check(x) \ - PyType_FastSubclass((x)->ob_type, Py_TPFLAGS_BASE_EXC_SUBCLASS) + PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS) PyAPI_FUNC(const char *) PyExceptionClass_Name(PyObject *); -#define PyExceptionInstance_Class(x) ((PyObject*)((x)->ob_type)) +#define PyExceptionInstance_Class(x) ((PyObject*)Py_TYPE(x)) /* Predefined exceptions */ @@ -303,21 +309,6 @@ PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason( const char *reason /* UTF-8 encoded string */ ); -/* These APIs aren't really part of the error implementation, but - often needed to format error messages; the native C lib APIs are - not available on all platforms, which is why we provide emulations - for those platforms in Python/mysnprintf.c, - WARNING: The return value of snprintf varies across platforms; do - not rely on any particular behavior; eventually the C99 defn may - be reliable. -*/ -#if defined(MS_WIN32) && !defined(HAVE_SNPRINTF) -# define HAVE_SNPRINTF -# define snprintf _snprintf -# define vsnprintf _vsnprintf -#endif - -#include PyAPI_FUNC(int) PyOS_snprintf(char *str, size_t size, const char *format, ...) Py_GCC_ATTRIBUTE((format(printf, 3, 4))); PyAPI_FUNC(int) PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va) diff --git a/src/external/windows/include/python/pyfpe.h b/src/external/windows/include/python/pyfpe.h index 30baacaa..d5a52617 100755 --- a/src/external/windows/include/python/pyfpe.h +++ b/src/external/windows/include/python/pyfpe.h @@ -1,5 +1,7 @@ #ifndef Py_PYFPE_H #define Py_PYFPE_H +/* Header excluded from the stable API */ +#ifndef Py_LIMITED_API /* These macros used to do something when Python was built with --with-fpectl, * but support for that was dropped in 3.7. We continue to define them though, @@ -9,4 +11,5 @@ #define PyFPE_START_PROTECT(err_string, leave_stmt) #define PyFPE_END_PROTECT(v) +#endif /* !defined(Py_LIMITED_API) */ #endif /* !Py_PYFPE_H */ diff --git a/src/external/windows/include/python/pyframe.h b/src/external/windows/include/python/pyframe.h new file mode 100755 index 00000000..a2576902 --- /dev/null +++ b/src/external/windows/include/python/pyframe.h @@ -0,0 +1,22 @@ +/* Limited C API of PyFrame API + * + * Include "frameobject.h" to get the PyFrameObject structure. + */ + +#ifndef Py_PYFRAME_H +#define Py_PYFRAME_H +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _frame PyFrameObject; + +/* Return the line of code the frame is currently executing. */ +PyAPI_FUNC(int) PyFrame_GetLineNumber(PyFrameObject *); + +PyAPI_FUNC(PyCodeObject *) PyFrame_GetCode(PyFrameObject *frame); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_PYFRAME_H */ diff --git a/src/external/windows/include/python/pyhash.h b/src/external/windows/include/python/pyhash.h index c6a14ffb..fe42fa8c 100755 --- a/src/external/windows/include/python/pyhash.h +++ b/src/external/windows/include/python/pyhash.h @@ -8,7 +8,9 @@ extern "C" { /* Helpers for hash functions */ #ifndef Py_LIMITED_API PyAPI_FUNC(Py_hash_t) _Py_HashDouble(double); -PyAPI_FUNC(Py_hash_t) _Py_HashPointer(void*); +PyAPI_FUNC(Py_hash_t) _Py_HashPointer(const void*); +// Similar to _Py_HashPointer(), but don't replace -1 with -2 +PyAPI_FUNC(Py_hash_t) _Py_HashPointerRaw(const void*); PyAPI_FUNC(Py_hash_t) _Py_HashBytes(const void*, Py_ssize_t); #endif diff --git a/src/external/windows/include/python/pylifecycle.h b/src/external/windows/include/python/pylifecycle.h index d1b79ae6..2084b26b 100755 --- a/src/external/windows/include/python/pylifecycle.h +++ b/src/external/windows/include/python/pylifecycle.h @@ -32,6 +32,8 @@ PyAPI_FUNC(void) _Py_NO_RETURN Py_Exit(int); /* Bootstrap __main__ (defined in Modules/main.c) */ PyAPI_FUNC(int) Py_Main(int argc, wchar_t **argv); +PyAPI_FUNC(int) Py_FrozenMain(int argc, char **argv); + PyAPI_FUNC(int) Py_BytesMain(int argc, char **argv); /* In pathconfig.c */ diff --git a/src/external/windows/include/python/pymacro.h b/src/external/windows/include/python/pymacro.h index acd14da4..7bfee70e 100755 --- a/src/external/windows/include/python/pymacro.h +++ b/src/external/windows/include/python/pymacro.h @@ -100,7 +100,33 @@ # define Py_UNUSED(name) _unused_ ## name #endif -#define Py_UNREACHABLE() \ +#if defined(RANDALL_WAS_HERE) +# define Py_UNREACHABLE() \ + Py_FatalError( \ + "If you're seeing this, the code is in what I thought was\n" \ + "an unreachable state.\n\n" \ + "I could give you advice for what to do, but honestly, why\n" \ + "should you trust me? I clearly screwed this up. I'm writing\n" \ + "a message that should never appear, yet I know it will\n" \ + "probably appear someday.\n\n" \ + "On a deep level, I know I'm not up to this task.\n" \ + "I'm so sorry.\n" \ + "https://xkcd.com/2200") +#elif defined(Py_DEBUG) +# define Py_UNREACHABLE() \ + Py_FatalError( \ + "We've reached an unreachable state. Anything is possible.\n" \ + "The limits were in our heads all along. Follow your dreams.\n" \ + "https://xkcd.com/2200") +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define Py_UNREACHABLE() __builtin_unreachable() +#elif defined(__clang__) || defined(__INTEL_COMPILER) +# define Py_UNREACHABLE() __builtin_unreachable() +#elif defined(_MSC_VER) +# define Py_UNREACHABLE() __assume(0) +#else +# define Py_UNREACHABLE() \ Py_FatalError("Unreachable C code path reached") +#endif #endif /* Py_PYMACRO_H */ diff --git a/src/external/windows/include/python/pymath.h b/src/external/windows/include/python/pymath.h index f4a7f852..4d305990 100755 --- a/src/external/windows/include/python/pymath.h +++ b/src/external/windows/include/python/pymath.h @@ -125,7 +125,7 @@ PyAPI_FUNC(void) _Py_set_387controlword(unsigned short); /* Py_IS_FINITE(X) * Return 1 if float or double arg is neither infinite nor NAN, else 0. - * Some compilers (e.g. VisualStudio) have intrisics for this, so a special + * Some compilers (e.g. VisualStudio) have intrinsics for this, so a special * macro for this particular test is useful * Note: PC/pyconfig.h defines Py_IS_FINITE as _finite */ @@ -227,4 +227,12 @@ PyAPI_FUNC(void) _Py_set_387controlword(unsigned short); * behavior. */ #define _Py_InIntegralTypeRange(type, v) (_Py_IntegralTypeMin(type) <= v && v <= _Py_IntegralTypeMax(type)) +/* Return the smallest integer k such that n < 2**k, or 0 if n == 0. + * Equivalent to floor(log2(x))+1. Also equivalent to: bitwidth_of_type - + * count_leading_zero_bits(x) + */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(unsigned int) _Py_bit_length(unsigned long d); +#endif + #endif /* Py_PYMATH_H */ diff --git a/src/external/windows/include/python/pymem.h b/src/external/windows/include/python/pymem.h index c1837db7..a2c8c255 100755 --- a/src/external/windows/include/python/pymem.h +++ b/src/external/windows/include/python/pymem.h @@ -101,41 +101,6 @@ PyAPI_FUNC(void) PyMem_Free(void *ptr); #define PyMem_Del PyMem_Free #define PyMem_DEL PyMem_FREE -/* bpo-35053: expose _Py_tracemalloc_config for performance: - _Py_NewReference() needs an efficient check to test if tracemalloc is - tracing. - - It has to be defined in pymem.h, before object.h is included. */ -struct _PyTraceMalloc_Config { - /* Module initialized? - Variable protected by the GIL */ - enum { - TRACEMALLOC_NOT_INITIALIZED, - TRACEMALLOC_INITIALIZED, - TRACEMALLOC_FINALIZED - } initialized; - - /* Is tracemalloc tracing memory allocations? - Variable protected by the GIL */ - int tracing; - - /* limit of the number of frames in a traceback, 1 by default. - Variable protected by the GIL. */ - int max_nframe; - - /* use domain in trace key? - Variable protected by the GIL. */ - int use_domain; -}; - -PyAPI_DATA(struct _PyTraceMalloc_Config) _Py_tracemalloc_config; - -#define _PyTraceMalloc_Config_INIT \ - {.initialized = TRACEMALLOC_NOT_INITIALIZED, \ - .tracing = 0, \ - .max_nframe = 1, \ - .use_domain = 0} - #ifndef Py_LIMITED_API # define Py_CPYTHON_PYMEM_H diff --git a/src/external/windows/include/python/pyport.h b/src/external/windows/include/python/pyport.h index 471cb7f1..49a67d90 100755 --- a/src/external/windows/include/python/pyport.h +++ b/src/external/windows/include/python/pyport.h @@ -133,8 +133,9 @@ typedef int Py_ssize_clean_t; /* PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf * format to convert an argument with the width of a size_t or Py_ssize_t. - * C99 introduced "z" for this purpose, but not all platforms support that; - * e.g., MS compilers use "I" instead. + * C99 introduced "z" for this purpose, but old MSVCs had not supported it. + * Since MSVC supports "z" since (at least) 2015, we can just use "z" + * for new code. * * These "high level" Python format functions interpret "z" correctly on * all platforms (Python interprets the format string itself, and does whatever @@ -152,19 +153,11 @@ typedef int Py_ssize_clean_t; * Py_ssize_t index; * fprintf(stderr, "index %" PY_FORMAT_SIZE_T "d sucks\n", index); * - * That will expand to %ld, or %Id, or to something else correct for a - * Py_ssize_t on the platform. + * That will expand to %zd or to something else correct for a Py_ssize_t on + * the platform. */ #ifndef PY_FORMAT_SIZE_T -# if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__) -# define PY_FORMAT_SIZE_T "" -# elif SIZEOF_SIZE_T == SIZEOF_LONG -# define PY_FORMAT_SIZE_T "l" -# elif defined(MS_WINDOWS) -# define PY_FORMAT_SIZE_T "I" -# else -# error "This platform's pyconfig.h needs to define PY_FORMAT_SIZE_T" -# endif +# define PY_FORMAT_SIZE_T "z" #endif /* Py_LOCAL can be used instead of static to get the fastest possible calling @@ -520,6 +513,26 @@ extern "C" { #define Py_DEPRECATED(VERSION_UNUSED) #endif +#if defined(__clang__) +#define _Py_COMP_DIAG_PUSH _Pragma("clang diagnostic push") +#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS \ + _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#define _Py_COMP_DIAG_POP _Pragma("clang diagnostic pop") +#elif defined(__GNUC__) \ + && ((__GNUC__ >= 5) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) +#define _Py_COMP_DIAG_PUSH _Pragma("GCC diagnostic push") +#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS \ + _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#define _Py_COMP_DIAG_POP _Pragma("GCC diagnostic pop") +#elif defined(_MSC_VER) +#define _Py_COMP_DIAG_PUSH __pragma(warning(push)) +#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS __pragma(warning(disable: 4996)) +#define _Py_COMP_DIAG_POP __pragma(warning(pop)) +#else +#define _Py_COMP_DIAG_PUSH +#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS +#define _Py_COMP_DIAG_POP +#endif /* _Py_HOT_FUNCTION * The hot attribute on a function is used to inform the compiler that the @@ -645,16 +658,18 @@ extern char * _getpty(int *, int, mode_t, int); # define HAVE_DECLSPEC_DLL #endif +#include "exports.h" + /* only get special linkage if built as shared or platform is Cygwin */ #if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__) # if defined(HAVE_DECLSPEC_DLL) # if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) -# define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE -# define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE +# define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE +# define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE /* module init functions inside the core need no external linkage */ /* except for Cygwin to handle embedding */ # if defined(__CYGWIN__) -# define PyMODINIT_FUNC __declspec(dllexport) PyObject* +# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* # else /* __CYGWIN__ */ # define PyMODINIT_FUNC PyObject* # endif /* __CYGWIN__ */ @@ -665,14 +680,14 @@ extern char * _getpty(int *, int, mode_t, int); /* failures similar to those described at the bottom of 4.1: */ /* http://docs.python.org/extending/windows.html#a-cookbook-approach */ # if !defined(__CYGWIN__) -# define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE +# define PyAPI_FUNC(RTYPE) Py_IMPORTED_SYMBOL RTYPE # endif /* !__CYGWIN__ */ -# define PyAPI_DATA(RTYPE) extern __declspec(dllimport) RTYPE +# define PyAPI_DATA(RTYPE) extern Py_IMPORTED_SYMBOL RTYPE /* module init functions outside the core must be exported */ # if defined(__cplusplus) -# define PyMODINIT_FUNC extern "C" __declspec(dllexport) PyObject* +# define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject* # else /* __cplusplus */ -# define PyMODINIT_FUNC __declspec(dllexport) PyObject* +# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* # endif /* __cplusplus */ # endif /* Py_BUILD_CORE */ # endif /* HAVE_DECLSPEC_DLL */ @@ -680,16 +695,16 @@ extern char * _getpty(int *, int, mode_t, int); /* If no external linkage macros defined by now, create defaults */ #ifndef PyAPI_FUNC -# define PyAPI_FUNC(RTYPE) RTYPE +# define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE #endif #ifndef PyAPI_DATA -# define PyAPI_DATA(RTYPE) extern RTYPE +# define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE #endif #ifndef PyMODINIT_FUNC # if defined(__cplusplus) -# define PyMODINIT_FUNC extern "C" PyObject* +# define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject* # else /* __cplusplus */ -# define PyMODINIT_FUNC PyObject* +# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* # endif /* __cplusplus */ #endif @@ -773,11 +788,11 @@ extern char * _getpty(int *, int, mode_t, int); */ #ifdef WORDS_BIGENDIAN -#define PY_BIG_ENDIAN 1 -#define PY_LITTLE_ENDIAN 0 +# define PY_BIG_ENDIAN 1 +# define PY_LITTLE_ENDIAN 0 #else -#define PY_BIG_ENDIAN 0 -#define PY_LITTLE_ENDIAN 1 +# define PY_BIG_ENDIAN 0 +# define PY_LITTLE_ENDIAN 1 #endif #ifdef Py_BUILD_CORE @@ -834,8 +849,9 @@ extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler; #endif /* Mark a function which cannot return. Example: + PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void); - PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void); */ + XLC support is intentionally omitted due to bpo-40244 */ #if defined(__clang__) || \ (defined(__GNUC__) && \ ((__GNUC__ >= 3) || \ @@ -847,4 +863,16 @@ extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler; # define _Py_NO_RETURN #endif + +// Preprocessor check for a builtin preprocessor function. Always return 0 +// if __has_builtin() macro is not defined. +// +// __has_builtin() is available on clang and GCC 10. +#ifdef __has_builtin +# define _Py__has_builtin(x) __has_builtin(x) +#else +# define _Py__has_builtin(x) 0 +#endif + + #endif /* Py_PYPORT_H */ diff --git a/src/external/windows/include/python/pystate.h b/src/external/windows/include/python/pystate.h index 956fc2e8..d9f31e36 100755 --- a/src/external/windows/include/python/pystate.h +++ b/src/external/windows/include/python/pystate.h @@ -7,27 +7,35 @@ extern "C" { #endif -#include "pythread.h" - /* This limitation is for performance and simplicity. If needed it can be removed (with effort). */ #define MAX_CO_EXTRA_USERS 255 /* Forward declarations for PyFrameObject, PyThreadState and PyInterpreterState */ -struct _frame; struct _ts; struct _is; /* struct _ts is defined in cpython/pystate.h */ typedef struct _ts PyThreadState; -/* struct _is is defined in internal/pycore_pystate.h */ +/* struct _is is defined in internal/pycore_interp.h */ typedef struct _is PyInterpreterState; PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_New(void); PyAPI_FUNC(void) PyInterpreterState_Clear(PyInterpreterState *); PyAPI_FUNC(void) PyInterpreterState_Delete(PyInterpreterState *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 +/* New in 3.9 */ +/* Get the current interpreter state. + + Issue a fatal error if there no current Python thread state or no current + interpreter. It cannot return NULL. + + The caller must hold the GIL. */ +PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Get(void); +#endif + #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03080000 /* New in 3.8 */ PyAPI_FUNC(PyObject *) PyInterpreterState_GetDict(PyInterpreterState *); @@ -50,7 +58,6 @@ PyAPI_FUNC(PyObject*) PyState_FindModule(struct PyModuleDef*); PyAPI_FUNC(PyThreadState *) PyThreadState_New(PyInterpreterState *); PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *); PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *); -PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void); /* Get the current thread state. @@ -77,6 +84,13 @@ PyAPI_FUNC(PyThreadState *) PyThreadState_Swap(PyThreadState *); PyAPI_FUNC(PyObject *) PyThreadState_GetDict(void); PyAPI_FUNC(int) PyThreadState_SetAsyncExc(unsigned long, PyObject *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 +/* New in 3.9 */ +PyAPI_FUNC(PyInterpreterState*) PyThreadState_GetInterpreter(PyThreadState *tstate); +PyAPI_FUNC(PyFrameObject*) PyThreadState_GetFrame(PyThreadState *tstate); +PyAPI_FUNC(uint64_t) PyThreadState_GetID(PyThreadState *tstate); +#endif + typedef enum {PyGILState_LOCKED, PyGILState_UNLOCKED} PyGILState_STATE; diff --git a/src/external/windows/include/python/pythonrun.h b/src/external/windows/include/python/pythonrun.h index 8e86c402..ecd35c60 100755 --- a/src/external/windows/include/python/pythonrun.h +++ b/src/external/windows/include/python/pythonrun.h @@ -72,16 +72,23 @@ PyAPI_FUNC(struct _mod *) PyParser_ASTFromFileObject( #define PyParser_SimpleParseFile(FP, S, B) \ PyParser_SimpleParseFileFlags(FP, S, B, 0) #endif -PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlags(const char *, int, - int); + +#ifndef Py_BUILD_CORE +Py_DEPRECATED(3.9) +#endif +PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlags(const char *, int, int); #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +#ifndef Py_BUILD_CORE +Py_DEPRECATED(3.9) +#endif PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlagsFilename(const char *, const char *, int, int); #endif -PyAPI_FUNC(struct _node *) PyParser_SimpleParseFileFlags(FILE *, const char *, - int, int); - +#ifndef Py_BUILD_CORE +Py_DEPRECATED(3.9) +#endif +PyAPI_FUNC(struct _node *) PyParser_SimpleParseFileFlags(FILE *, const char *, int, int); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyRun_StringFlags(const char *, int, PyObject *, PyObject *, PyCompilerFlags *); diff --git a/src/external/windows/include/python/pythread.h b/src/external/windows/include/python/pythread.h index c9d73ded..739594a8 100755 --- a/src/external/windows/include/python/pythread.h +++ b/src/external/windows/include/python/pythread.h @@ -3,7 +3,6 @@ #define Py_PYTHREAD_H typedef void *PyThread_type_lock; -typedef void *PyThread_type_sema; #ifdef __cplusplus extern "C" { @@ -37,6 +36,15 @@ PyAPI_FUNC(int) PyThread_acquire_lock(PyThread_type_lock, int); #define WAIT_LOCK 1 #define NOWAIT_LOCK 0 +#ifndef Py_LIMITED_API +#ifdef HAVE_FORK +/* Private function to reinitialize a lock at fork in the child process. + Reset the lock to the unlocked state. + Return 0 on success, return -1 on error. */ +PyAPI_FUNC(int) _PyThread_at_fork_reinit(PyThread_type_lock *lock); +#endif /* HAVE_FORK */ +#endif /* !Py_LIMITED_API */ + /* PY_TIMEOUT_T is the integral type used to specify timeouts when waiting on a lock (see PyThread_acquire_lock_timed() below). PY_TIMEOUT_MAX is the highest usable value (in microseconds) of that @@ -51,16 +59,16 @@ PyAPI_FUNC(int) PyThread_acquire_lock(PyThread_type_lock, int); #if defined(_POSIX_THREADS) /* PyThread_acquire_lock_timed() uses _PyTime_FromNanoseconds(us * 1000), convert microseconds to nanoseconds. */ -# define PY_TIMEOUT_MAX (PY_LLONG_MAX / 1000) +# define PY_TIMEOUT_MAX (LLONG_MAX / 1000) #elif defined (NT_THREADS) /* In the NT API, the timeout is a DWORD and is expressed in milliseconds */ -# if 0xFFFFFFFFLL * 1000 < PY_LLONG_MAX +# if 0xFFFFFFFFLL * 1000 < LLONG_MAX # define PY_TIMEOUT_MAX (0xFFFFFFFFLL * 1000) # else -# define PY_TIMEOUT_MAX PY_LLONG_MAX +# define PY_TIMEOUT_MAX LLONG_MAX # endif #else -# define PY_TIMEOUT_MAX PY_LLONG_MAX +# define PY_TIMEOUT_MAX LLONG_MAX #endif diff --git a/src/external/windows/include/python/rangeobject.h b/src/external/windows/include/python/rangeobject.h index b9a136d0..d2105d02 100755 --- a/src/external/windows/include/python/rangeobject.h +++ b/src/external/windows/include/python/rangeobject.h @@ -19,7 +19,7 @@ PyAPI_DATA(PyTypeObject) PyRange_Type; PyAPI_DATA(PyTypeObject) PyRangeIter_Type; PyAPI_DATA(PyTypeObject) PyLongRangeIter_Type; -#define PyRange_Check(op) (Py_TYPE(op) == &PyRange_Type) +#define PyRange_Check(op) Py_IS_TYPE(op, &PyRange_Type) #ifdef __cplusplus } diff --git a/src/external/windows/include/python/setobject.h b/src/external/windows/include/python/setobject.h index b2f79639..24ae8f4d 100755 --- a/src/external/windows/include/python/setobject.h +++ b/src/external/windows/include/python/setobject.h @@ -70,7 +70,6 @@ PyAPI_DATA(PyObject *) _PySet_Dummy; PyAPI_FUNC(int) _PySet_NextEntry(PyObject *set, Py_ssize_t *pos, PyObject **key, Py_hash_t *hash); PyAPI_FUNC(int) _PySet_Update(PyObject *set, PyObject *iterable); -PyAPI_FUNC(int) PySet_ClearFreeList(void); #endif /* Section excluded by Py_LIMITED_API */ @@ -88,18 +87,18 @@ PyAPI_FUNC(int) PySet_Discard(PyObject *set, PyObject *key); PyAPI_FUNC(PyObject *) PySet_Pop(PyObject *set); PyAPI_FUNC(Py_ssize_t) PySet_Size(PyObject *anyset); -#define PyFrozenSet_CheckExact(ob) (Py_TYPE(ob) == &PyFrozenSet_Type) +#define PyFrozenSet_CheckExact(ob) Py_IS_TYPE(ob, &PyFrozenSet_Type) #define PyAnySet_CheckExact(ob) \ - (Py_TYPE(ob) == &PySet_Type || Py_TYPE(ob) == &PyFrozenSet_Type) + (Py_IS_TYPE(ob, &PySet_Type) || Py_IS_TYPE(ob, &PyFrozenSet_Type)) #define PyAnySet_Check(ob) \ - (Py_TYPE(ob) == &PySet_Type || Py_TYPE(ob) == &PyFrozenSet_Type || \ + (Py_IS_TYPE(ob, &PySet_Type) || Py_IS_TYPE(ob, &PyFrozenSet_Type) || \ PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \ PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type)) #define PySet_Check(ob) \ - (Py_TYPE(ob) == &PySet_Type || \ + (Py_IS_TYPE(ob, &PySet_Type) || \ PyType_IsSubtype(Py_TYPE(ob), &PySet_Type)) #define PyFrozenSet_Check(ob) \ - (Py_TYPE(ob) == &PyFrozenSet_Type || \ + (Py_IS_TYPE(ob, &PyFrozenSet_Type) || \ PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type)) #ifdef __cplusplus diff --git a/src/external/windows/include/python/sliceobject.h b/src/external/windows/include/python/sliceobject.h index 7c778a55..c4150604 100755 --- a/src/external/windows/include/python/sliceobject.h +++ b/src/external/windows/include/python/sliceobject.h @@ -28,7 +28,7 @@ typedef struct { PyAPI_DATA(PyTypeObject) PySlice_Type; PyAPI_DATA(PyTypeObject) PyEllipsis_Type; -#define PySlice_Check(op) (Py_TYPE(op) == &PySlice_Type) +#define PySlice_Check(op) Py_IS_TYPE(op, &PySlice_Type) PyAPI_FUNC(PyObject *) PySlice_New(PyObject* start, PyObject* stop, PyObject* step); diff --git a/src/external/windows/include/python/structseq.h b/src/external/windows/include/python/structseq.h index 3a6b2693..e67bfda7 100755 --- a/src/external/windows/include/python/structseq.h +++ b/src/external/windows/include/python/structseq.h @@ -19,7 +19,7 @@ typedef struct PyStructSequence_Desc { int n_in_sequence; } PyStructSequence_Desc; -extern char* PyStructSequence_UnnamedField; +extern const char * const PyStructSequence_UnnamedField; #ifndef Py_LIMITED_API PyAPI_FUNC(void) PyStructSequence_InitType(PyTypeObject *type, diff --git a/src/external/windows/include/python/symtable.h b/src/external/windows/include/python/symtable.h index f1331722..5f490df2 100755 --- a/src/external/windows/include/python/symtable.h +++ b/src/external/windows/include/python/symtable.h @@ -69,7 +69,7 @@ typedef struct _symtable_entry { PyAPI_DATA(PyTypeObject) PySTEntry_Type; -#define PySTEntry_Check(op) (Py_TYPE(op) == &PySTEntry_Type) +#define PySTEntry_Check(op) Py_IS_TYPE(op, &PySTEntry_Type) PyAPI_FUNC(int) PyST_GetScope(PySTEntryObject *, PyObject *); diff --git a/src/external/windows/include/python/token.h b/src/external/windows/include/python/token.h index 092eebf3..80c3e251 100755 --- a/src/external/windows/include/python/token.h +++ b/src/external/windows/include/python/token.h @@ -78,6 +78,10 @@ extern "C" { #define ISTERMINAL(x) ((x) < NT_OFFSET) #define ISNONTERMINAL(x) ((x) >= NT_OFFSET) #define ISEOF(x) ((x) == ENDMARKER) +#define ISWHITESPACE(x) ((x) == ENDMARKER || \ + (x) == NEWLINE || \ + (x) == INDENT || \ + (x) == DEDENT) PyAPI_DATA(const char * const) _PyParser_TokenNames[]; /* Token names */ diff --git a/src/external/windows/include/python/traceback.h b/src/external/windows/include/python/traceback.h index 39eadf92..b4466f51 100755 --- a/src/external/windows/include/python/traceback.h +++ b/src/external/windows/include/python/traceback.h @@ -4,16 +4,14 @@ extern "C" { #endif -struct _frame; - /* Traceback interface */ -PyAPI_FUNC(int) PyTraceBack_Here(struct _frame *); +PyAPI_FUNC(int) PyTraceBack_Here(PyFrameObject *); PyAPI_FUNC(int) PyTraceBack_Print(PyObject *, PyObject *); /* Reveal traceback type so we can typecheck traceback objects */ PyAPI_DATA(PyTypeObject) PyTraceBack_Type; -#define PyTraceBack_Check(v) (Py_TYPE(v) == &PyTraceBack_Type) +#define PyTraceBack_Check(v) Py_IS_TYPE(v, &PyTraceBack_Type) #ifndef Py_LIMITED_API diff --git a/src/external/windows/include/python/tupleobject.h b/src/external/windows/include/python/tupleobject.h index 4e0d1f12..19f9997e 100755 --- a/src/external/windows/include/python/tupleobject.h +++ b/src/external/windows/include/python/tupleobject.h @@ -25,7 +25,7 @@ PyAPI_DATA(PyTypeObject) PyTupleIter_Type; #define PyTuple_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS) -#define PyTuple_CheckExact(op) (Py_TYPE(op) == &PyTuple_Type) +#define PyTuple_CheckExact(op) Py_IS_TYPE(op, &PyTuple_Type) PyAPI_FUNC(PyObject *) PyTuple_New(Py_ssize_t size); PyAPI_FUNC(Py_ssize_t) PyTuple_Size(PyObject *); @@ -34,8 +34,6 @@ PyAPI_FUNC(int) PyTuple_SetItem(PyObject *, Py_ssize_t, PyObject *); PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t); PyAPI_FUNC(PyObject *) PyTuple_Pack(Py_ssize_t, ...); -PyAPI_FUNC(int) PyTuple_ClearFreeList(void); - #ifndef Py_LIMITED_API # define Py_CPYTHON_TUPLEOBJECT_H # include "cpython/tupleobject.h" diff --git a/src/external/windows/include/python/typeslots.h b/src/external/windows/include/python/typeslots.h index bf382f07..29111f94 100755 --- a/src/external/windows/include/python/typeslots.h +++ b/src/external/windows/include/python/typeslots.h @@ -1,7 +1,12 @@ /* Do not renumber the file; these numbers are part of the stable ABI. */ +#if defined(Py_LIMITED_API) /* Disabled, see #10181 */ #undef Py_bf_getbuffer #undef Py_bf_releasebuffer +#else +#define Py_bf_getbuffer 1 +#define Py_bf_releasebuffer 2 +#endif #define Py_mp_ass_subscript 3 #define Py_mp_length 4 #define Py_mp_subscript 5 diff --git a/src/external/windows/include/python/unicodeobject.h b/src/external/windows/include/python/unicodeobject.h index 28c600b6..4213945b 100755 --- a/src/external/windows/include/python/unicodeobject.h +++ b/src/external/windows/include/python/unicodeobject.h @@ -113,7 +113,7 @@ PyAPI_DATA(PyTypeObject) PyUnicodeIter_Type; #define PyUnicode_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS) -#define PyUnicode_CheckExact(op) (Py_TYPE(op) == &PyUnicode_Type) +#define PyUnicode_CheckExact(op) Py_IS_TYPE(op, &PyUnicode_Type) /* --- Constants ---------------------------------------------------------- */ @@ -328,17 +328,6 @@ PyAPI_FUNC(wchar_t*) PyUnicode_AsWideCharString( PyAPI_FUNC(PyObject*) PyUnicode_FromOrdinal(int ordinal); -/* --- Free-list management ----------------------------------------------- */ - -/* Clear the free list used by the Unicode implementation. - - This can be used to release memory used for objects on the free - list back to the Python memory allocator. - -*/ - -PyAPI_FUNC(int) PyUnicode_ClearFreeList(void); - /* === Builtin Codecs ===================================================== Many of these APIs take two arguments encoding and errors. These diff --git a/src/external/windows/include/python/weakrefobject.h b/src/external/windows/include/python/weakrefobject.h index 87acf95c..36890820 100755 --- a/src/external/windows/include/python/weakrefobject.h +++ b/src/external/windows/include/python/weakrefobject.h @@ -46,10 +46,10 @@ PyAPI_DATA(PyTypeObject) _PyWeakref_CallableProxyType; #define PyWeakref_CheckRef(op) PyObject_TypeCheck(op, &_PyWeakref_RefType) #define PyWeakref_CheckRefExact(op) \ - (Py_TYPE(op) == &_PyWeakref_RefType) + Py_IS_TYPE(op, &_PyWeakref_RefType) #define PyWeakref_CheckProxy(op) \ - ((Py_TYPE(op) == &_PyWeakref_ProxyType) || \ - (Py_TYPE(op) == &_PyWeakref_CallableProxyType)) + (Py_IS_TYPE(op, &_PyWeakref_ProxyType) || \ + Py_IS_TYPE(op, &_PyWeakref_CallableProxyType)) #define PyWeakref_Check(op) \ (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op)) diff --git a/src/external/windows/lib/Win32/python38.lib b/src/external/windows/lib/Win32/python38.lib deleted file mode 100755 index 42bdb7d6..00000000 Binary files a/src/external/windows/lib/Win32/python38.lib and /dev/null differ diff --git a/src/external/windows/lib/Win32/python38_d.lib b/src/external/windows/lib/Win32/python38_d.lib deleted file mode 100755 index da93addd..00000000 Binary files a/src/external/windows/lib/Win32/python38_d.lib and /dev/null differ diff --git a/src/external/windows/lib/Win32/python39.lib b/src/external/windows/lib/Win32/python39.lib new file mode 100755 index 00000000..b02c9ef2 Binary files /dev/null and b/src/external/windows/lib/Win32/python39.lib differ diff --git a/src/external/windows/lib/Win32/python39_d.lib b/src/external/windows/lib/Win32/python39_d.lib new file mode 100755 index 00000000..06e781b8 Binary files /dev/null and b/src/external/windows/lib/Win32/python39_d.lib differ diff --git a/src/external/windows/lib/x64/python38.lib b/src/external/windows/lib/x64/python38.lib deleted file mode 100755 index daa1122a..00000000 Binary files a/src/external/windows/lib/x64/python38.lib and /dev/null differ diff --git a/src/external/windows/lib/x64/python38_d.lib b/src/external/windows/lib/x64/python38_d.lib deleted file mode 100755 index c0867c19..00000000 Binary files a/src/external/windows/lib/x64/python38_d.lib and /dev/null differ diff --git a/src/external/windows/lib/x64/python39.lib b/src/external/windows/lib/x64/python39.lib new file mode 100755 index 00000000..9fa64b3f Binary files /dev/null and b/src/external/windows/lib/x64/python39.lib differ diff --git a/src/external/windows/lib/x64/python39_d.lib b/src/external/windows/lib/x64/python39_d.lib new file mode 100755 index 00000000..40d93645 Binary files /dev/null and b/src/external/windows/lib/x64/python39_d.lib differ diff --git a/src/meta/bameta/python_embedded/binding.py b/src/meta/bameta/python_embedded/binding.py index 5e113e5e..4ef39ca1 100644 --- a/src/meta/bameta/python_embedded/binding.py +++ b/src/meta/bameta/python_embedded/binding.py @@ -27,10 +27,10 @@ from bastd.ui.onscreenkeyboard import OnScreenKeyboardWindow from bastd.ui import party if TYPE_CHECKING: - from typing import Tuple, Any + from typing import Any -def get_binding_values() -> Tuple[Any, ...]: +def get_binding_values() -> tuple[Any, ...]: return ( ba.app, # kApp tuple(), # kEmptyTuple diff --git a/src/meta/bameta/python_embedded/bootstrap.py b/src/meta/bameta/python_embedded/bootstrap.py index e42f9a5a..8688d2db 100644 --- a/src/meta/bameta/python_embedded/bootstrap.py +++ b/src/meta/bameta/python_embedded/bootstrap.py @@ -11,14 +11,14 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Any, TextIO, Callable, List + from typing import Any, TextIO, Callable class _BAConsoleRedirect: def __init__(self, original: TextIO, call: Callable[[str], None]) -> None: self._lock = threading.Lock() - self._linebits: List[str] = [] + self._linebits: list[str] = [] self._original = original self._call = call self._pending_ship = False diff --git a/tests/test_efro/test_dataclassio.py b/tests/test_efro/test_dataclassio.py index c275b26b..5b53a1a0 100644 --- a/tests/test_efro/test_dataclassio.py +++ b/tests/test_efro/test_dataclassio.py @@ -7,10 +7,8 @@ from __future__ import annotations from enum import Enum import datetime from dataclasses import field, dataclass -from typing import (TYPE_CHECKING, Optional, List, Set, Any, Dict, Sequence, - Union, Tuple) +from typing import TYPE_CHECKING, Optional, Any, Sequence, Union, Annotated -from typing_extensions import Annotated import pytest from efro.util import utc_now @@ -50,7 +48,7 @@ class _BadEnum2(Enum): class _NestedClass: ival: int = 0 sval: str = 'foo' - dval: Dict[int, str] = field(default_factory=dict) + dval: dict[int, str] = field(default_factory=dict) def test_assign() -> None: @@ -72,15 +70,15 @@ def test_assign() -> None: obval: Optional[bool] = None ofval: Optional[float] = None oenval: Optional[_EnumTest] = _EnumTest.TEST1 - lsval: List[str] = field(default_factory=list) - lival: List[int] = field(default_factory=list) - lbval: List[bool] = field(default_factory=list) - lfval: List[float] = field(default_factory=list) - lenval: List[_EnumTest] = field(default_factory=list) - ssval: Set[str] = field(default_factory=set) + lsval: list[str] = field(default_factory=list) + lival: list[int] = field(default_factory=list) + lbval: list[bool] = field(default_factory=list) + lfval: list[float] = field(default_factory=list) + lenval: list[_EnumTest] = field(default_factory=list) + ssval: set[str] = field(default_factory=set) anyval: Any = 1 - dictval: Dict[int, str] = field(default_factory=dict) - tupleval: Tuple[int, str, bool] = (1, 'foo', False) + dictval: dict[int, str] = field(default_factory=dict) + tupleval: tuple[int, str, bool] = (1, 'foo', False) datetimeval: Optional[datetime.datetime] = None class _TestClass2: @@ -367,36 +365,36 @@ def test_prep() -> None: @ioprepped @dataclass class _TestClass7: - dval: Dict[float, int] + dval: dict[float, int] @ioprepped @dataclass class _TestClass8: - dval: Dict[str, int] + dval: dict[str, int] @ioprepped @dataclass class _TestClass9: - dval: Dict[_GoodEnum, int] + dval: dict[_GoodEnum, int] @ioprepped @dataclass class _TestClass10: - dval: Dict[_GoodEnum2, int] + dval: dict[_GoodEnum2, int] with pytest.raises(TypeError): @ioprepped @dataclass class _TestClass11: - dval: Dict[_BadEnum1, int] + dval: dict[_BadEnum1, int] with pytest.raises(TypeError): @ioprepped @dataclass class _TestClass12: - dval: Dict[_BadEnum2, int] + dval: dict[_BadEnum2, int] def test_validate() -> None: @@ -468,7 +466,7 @@ def test_ioattrs() -> None: @ioprepped @dataclass class _TestClass: - dval: Annotated[Dict, IOAttrs('d')] + dval: Annotated[dict, IOAttrs('d')] obj = _TestClass(dval={'foo': 'bar'}) @@ -482,12 +480,12 @@ def test_ioattrs() -> None: @ioprepped @dataclass class _TestClass2: - dval: Annotated[Dict, IOAttrs('d', store_default=False)] + dval: Annotated[dict, IOAttrs('d', store_default=False)] @ioprepped @dataclass class _TestClass3: - dval: Annotated[Dict, IOAttrs('d', store_default=False)] = field( + dval: Annotated[dict, IOAttrs('d', store_default=False)] = field( default_factory=dict) ival: Annotated[int, IOAttrs('i', store_default=False)] = 123 @@ -584,7 +582,7 @@ def test_dict() -> None: @ioprepped @dataclass class _TestClass2: - dval: Dict[int, float] + dval: dict[int, float] obj2 = _TestClass2(dval={1: 2.34}) out = dataclass_to_dict(obj2) @@ -599,7 +597,7 @@ def test_dict() -> None: @ioprepped @dataclass class _TestClass3: - dval: Dict[_GoodEnum, int] + dval: dict[_GoodEnum, int] obj3 = _TestClass3(dval={_GoodEnum.VAL1: 123}) out = dataclass_to_dict(obj3) @@ -611,7 +609,7 @@ def test_dict() -> None: @ioprepped @dataclass class _TestClass4: - dval: Dict[_GoodEnum2, int] + dval: dict[_GoodEnum2, int] obj4 = _TestClass4(dval={_GoodEnum2.VAL1: 125}) out = dataclass_to_dict(obj4) diff --git a/tests/test_efro/test_message.py b/tests/test_efro/test_message.py index 5efd7760..cf8eb7aa 100644 --- a/tests/test_efro/test_message.py +++ b/tests/test_efro/test_message.py @@ -19,7 +19,7 @@ from efro.message import (Message, Response, MessageProtocol, MessageSender, BoundMessageReceiver) if TYPE_CHECKING: - from typing import List, Type, Any, Callable, Optional, Awaitable + from typing import Any, Callable, Optional, Awaitable @ioprepped @@ -29,7 +29,7 @@ class _TMsg1(Message): ival: int @classmethod - def get_response_types(cls) -> List[Type[Response]]: + def get_response_types(cls) -> list[type[Response]]: return [_TResp1] @@ -40,7 +40,7 @@ class _TMsg2(Message): sval: str @classmethod - def get_response_types(cls) -> List[Type[Response]]: + def get_response_types(cls) -> list[type[Response]]: return [_TResp1, _TResp2] diff --git a/tools/bacloud b/tools/bacloud index c9424b09..9a50cdd4 100755 --- a/tools/bacloud +++ b/tools/bacloud @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.8 +#!/usr/bin/env python3.9 # Released under the MIT License. See LICENSE for details. # """A tool for interacting with ballistica's cloud services. @@ -22,7 +22,7 @@ from efro.error import CleanError from efro.terminal import Clr if TYPE_CHECKING: - from typing import Optional, Dict, Tuple, List, BinaryIO + from typing import Optional, BinaryIO # Version is sent to the master-server with all commands. Can be incremented # if we need to change behavior server-side to go along with client changes. @@ -86,16 +86,16 @@ class Response: login: Optional[str] = None logout: bool = False dir_manifest: Optional[str] = None - uploads: Optional[Tuple[List[str], str, Dict]] = None - uploads_inline: Optional[List[str]] = None - downloads_inline: Optional[Dict[str, str]] = None - deletes: Optional[List[str]] = None + uploads: Optional[tuple[list[str], str, dict]] = None + uploads_inline: Optional[list[str]] = None + downloads_inline: Optional[dict[str, str]] = None + deletes: Optional[list[str]] = None dir_prune_empty: Optional[str] = None open_url: Optional[str] = None - input_prompt: Optional[Tuple[str, bool]] = None + input_prompt: Optional[tuple[str, bool]] = None end_message: Optional[str] = None end_message_end: str = '\n' - end_command: Optional[Tuple[str, Dict]] = None + end_command: Optional[tuple[str, dict]] = None def get_tz_offset_seconds() -> float: @@ -120,7 +120,7 @@ class DirManifest: def __init__(self) -> None: self.path = Path('') - self.files: Dict[str, DirManifestFile] = {} + self.files: dict[str, DirManifestFile] = {} @classmethod def load_from_disk(cls, path: Path) -> DirManifest: @@ -129,7 +129,7 @@ class DirManifest: package.path = path packagepathstr = str(path) - paths: List[str] = [] + paths: list[str] = [] # Simply return empty manifests if the given path isn't a dir. # (the server may intend to create it and is just asking what's @@ -146,7 +146,7 @@ class DirManifest: from concurrent.futures import ThreadPoolExecutor from multiprocessing import cpu_count - def _get_file_info(filepath: str) -> Tuple[str, DirManifestFile]: + def _get_file_info(filepath: str) -> tuple[str, DirManifestFile]: sha = hashlib.sha256() fullfilepath = os.path.join(packagepathstr, filepath) if not os.path.isfile(fullfilepath): @@ -172,7 +172,7 @@ class App: def __init__(self) -> None: self._state = StateData() self._project_root: Optional[Path] = None - self._end_command_args: Dict = {} + self._end_command_args: dict = {} def run(self) -> None: """Run the tool.""" @@ -231,8 +231,8 @@ class App: def _servercmd(self, cmd: str, - data: Dict, - files: Dict[str, BinaryIO] = None) -> Response: + data: dict, + files: dict[str, BinaryIO] = None) -> Response: """Issue a command to the server and get a response.""" response_raw_2 = requests.post( @@ -267,7 +267,7 @@ class App: return response - def _upload_file(self, filename: str, call: str, args: Dict) -> None: + def _upload_file(self, filename: str, call: str, args: dict) -> None: print(f'{Clr.BLU}Uploading {filename}{Clr.RST}', flush=True) with tempfile.TemporaryDirectory() as tempdir: srcpath = Path(filename) @@ -276,7 +276,7 @@ class App: shell=True, check=True) with open(gzpath, 'rb') as infile: - putfiles: Dict = {'file': infile} + putfiles: dict = {'file': infile} _response = self._servercmd( call, args, @@ -293,7 +293,7 @@ class App: for key, val in manifest.files.items()} } - def _handle_uploads(self, uploads: Tuple[List[str], str, Dict]) -> None: + def _handle_uploads(self, uploads: tuple[list[str], str, dict]) -> None: from concurrent.futures import ThreadPoolExecutor assert len(uploads) == 3 filenames, uploadcmd, uploadargs = uploads @@ -312,7 +312,7 @@ class App: # exceptions that occurred. list(executor.map(_do_filename, filenames)) - def _handle_downloads_inline(self, downloads_inline: Dict[str, + def _handle_downloads_inline(self, downloads_inline: dict[str, str]) -> None: """Handle inline file data to be saved to the client.""" import base64 @@ -326,16 +326,16 @@ class App: with open(fname, 'wb') as outfile: outfile.write(data) - def _handle_deletes(self, deletes: List[str]) -> None: + def _handle_deletes(self, deletes: list[str]) -> None: """Handle file deletes.""" for fname in deletes: os.unlink(fname) - def _handle_uploads_inline(self, uploads_inline: List[str]) -> None: + def _handle_uploads_inline(self, uploads_inline: list[str]) -> None: """Handle uploading files inline.""" import base64 import zlib - files: Dict[str, str] = {} + files: dict[str, str] = {} for filepath in uploads_inline: if not os.path.exists(filepath): raise CleanError(f'File not found: {filepath}') @@ -373,11 +373,11 @@ class App: print(prompt, end='', flush=True) self._end_command_args['input'] = input() - def run_user_command(self, args: List[str]) -> None: + def run_user_command(self, args: list[str]) -> None: """Run a single user command to completion.""" # pylint: disable=too-many-branches - nextcall: Optional[Tuple[str, Dict]] = ('user', {'a': args}) + nextcall: Optional[tuple[str, dict]] = ('user', {'a': args}) # Now talk to the server in a loop until there's nothing left to do. while nextcall is not None: diff --git a/tools/bacommon/assets.py b/tools/bacommon/assets.py index e3f572c7..311852d4 100644 --- a/tools/bacommon/assets.py +++ b/tools/bacommon/assets.py @@ -5,11 +5,9 @@ from __future__ import annotations from dataclasses import dataclass, field -from typing import TYPE_CHECKING, Dict, Optional, List +from typing import TYPE_CHECKING, Optional, Annotated from enum import Enum -from typing_extensions import Annotated - from efro.dataclassio import ioprepped, IOAttrs if TYPE_CHECKING: @@ -40,7 +38,7 @@ class AssetType(Enum): @dataclass class AssetPackageFlavorManifest: """A manifest of asset info for a specific flavor of an asset package.""" - assetfiles: Annotated[Dict[str, str], + assetfiles: Annotated[dict[str, str], IOAttrs('assetfiles')] = field(default_factory=dict) @@ -50,7 +48,7 @@ class AssetPackageBuildState: """Contains info about an in-progress asset cloud build.""" # Asset names still being built. - in_progress_builds: Annotated[List[str], + in_progress_builds: Annotated[list[str], IOAttrs('b')] = field(default_factory=list) # The initial number of assets needing to be built. diff --git a/tools/bacommon/net.py b/tools/bacommon/net.py index 6a1f6335..bd4ef1c9 100644 --- a/tools/bacommon/net.py +++ b/tools/bacommon/net.py @@ -4,11 +4,9 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional, List, Dict, Any, Tuple +from typing import TYPE_CHECKING, Optional, Any, Annotated from dataclasses import dataclass, field -from typing_extensions import Annotated - from efro.dataclassio import ioprepped, IOAttrs if TYPE_CHECKING: @@ -33,7 +31,7 @@ class ServerNodeQueryResponse: error: Annotated[Optional[str], IOAttrs('e', store_default=False)] = None # The set of servernodes. - servers: Annotated[List[ServerNodeEntry], + servers: Annotated[list[ServerNodeEntry], IOAttrs('s', store_default=False)] = field( default_factory=list) @@ -57,10 +55,10 @@ class PrivateHostingConfig: playlist_name: str = 'Unknown' randomize: bool = False tutorial: bool = False - custom_team_names: Optional[Tuple[str, str]] = None - custom_team_colors: Optional[Tuple[Tuple[float, float, float], - Tuple[float, float, float]]] = None - playlist: Optional[List[Dict[str, Any]]] = None + custom_team_names: Optional[tuple[str, str]] = None + custom_team_colors: Optional[tuple[tuple[float, float, float], + tuple[float, float, float]]] = None + playlist: Optional[list[dict[str, Any]]] = None exit_minutes: float = 120.0 exit_minutes_unclean: float = 180.0 exit_minutes_idle: float = 10.0 diff --git a/tools/bacommon/servermanager.py b/tools/bacommon/servermanager.py index 0ae3005c..b767006a 100644 --- a/tools/bacommon/servermanager.py +++ b/tools/bacommon/servermanager.py @@ -5,7 +5,7 @@ from __future__ import annotations from enum import Enum from dataclasses import field, dataclass -from typing import TYPE_CHECKING, List, Optional, Tuple, Dict, Any +from typing import TYPE_CHECKING, Optional, Any from efro.dataclassio import ioprepped @@ -33,7 +33,7 @@ class ServerConfig: # IDs of server admins. Server admins are not kickable through the default # kick vote system and they are able to kick players without a vote. To get # your account id, enter 'getaccountid' in settings->advanced->enter-code. - admins: List[str] = field(default_factory=list) + admins: list[str] = field(default_factory=list) # Whether the default kick-voting system is enabled. enable_default_kick_voting: bool = True @@ -64,7 +64,7 @@ class ServerConfig: # Alternately, you can embed playlist data here instead of using codes. # Make sure to set session_type to the correct type for the data here. - playlist_inline: Optional[List[Dict[str, Any]]] = None + playlist_inline: Optional[list[dict[str, Any]]] = None # Whether to shuffle the playlist or play its games in designated order. playlist_shuffle: bool = True @@ -131,11 +131,11 @@ class ServerConfig: show_tutorial: bool = False # Team names (teams mode only). - team_names: Optional[Tuple[str, str]] = None + team_names: Optional[tuple[str, str]] = None # Team colors (teams mode only). - team_colors: Optional[Tuple[Tuple[float, float, float], - Tuple[float, float, float]]] = None + team_colors: Optional[tuple[tuple[float, float, float], + tuple[float, float, float]]] = None # (internal) stress-testing mode. stress_test_players: Optional[int] = None @@ -171,15 +171,15 @@ class ShutdownCommand(ServerCommand): class ChatMessageCommand(ServerCommand): """Chat message from the server.""" message: str - clients: Optional[List[int]] + clients: Optional[list[int]] @dataclass class ScreenMessageCommand(ServerCommand): """Screen-message from the server.""" message: str - color: Optional[Tuple[float, float, float]] - clients: Optional[List[int]] + color: Optional[tuple[float, float, float]] + clients: Optional[list[int]] @dataclass diff --git a/tools/batools/android.py b/tools/batools/android.py index e7d640fa..9bc3144b 100644 --- a/tools/batools/android.py +++ b/tools/batools/android.py @@ -11,7 +11,7 @@ from typing import TYPE_CHECKING import efrotools if TYPE_CHECKING: - from typing import List, Optional, Set + pass def androidaddr(archive_dir: str, arch: str, addr: str) -> None: diff --git a/tools/batools/androidsdkutils.py b/tools/batools/androidsdkutils.py index 5bfcebe5..5c1aaf5e 100755 --- a/tools/batools/androidsdkutils.py +++ b/tools/batools/androidsdkutils.py @@ -11,7 +11,7 @@ from typing import TYPE_CHECKING from efro.error import CleanError if TYPE_CHECKING: - from typing import List + pass def _parse_lprop_file(local_properties_path: str) -> str: @@ -76,7 +76,7 @@ def _gen_lprop_file(local_properties_path: str) -> str: return sdk_dir -def run(projroot: str, args: List[str]) -> None: +def run(projroot: str, args: list[str]) -> None: """Main script entry point.""" # pylint: disable=too-many-branches # pylint: disable=too-many-locals diff --git a/tools/batools/assetsmakefile.py b/tools/batools/assetsmakefile.py index e64065e4..f6604ac9 100755 --- a/tools/batools/assetsmakefile.py +++ b/tools/batools/assetsmakefile.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.8 +#!/usr/bin/env python3.9 # Released under the MIT License. See LICENSE for details. # """Updates assets/Makefile based on source assets present.""" @@ -13,15 +13,15 @@ from typing import TYPE_CHECKING from efro.terminal import Clr if TYPE_CHECKING: - from typing import List, Set + pass -PYC_SUFFIX = '.cpython-38.opt-1.pyc' +PYC_SUFFIX = '.cpython-39.opt-1.pyc' def _get_targets(varname: str, inext: str, outext: str, - all_targets: Set, + all_targets: set, limit_to_prefix: str = None) -> str: """Generic function to map source extension to dst files.""" @@ -48,14 +48,14 @@ def _get_targets(varname: str, return '\n' + varname + ' = \\\n ' + ' \\\n '.join(sorted(targets)) -def _get_py_targets(src: str, dst: str, py_targets: List[str], - pyc_targets: List[str], all_targets: Set[str], +def _get_py_targets(src: str, dst: str, py_targets: list[str], + pyc_targets: list[str], all_targets: set[str], subset: str) -> None: # pylint: disable=too-many-branches py_generated_root = 'assets/src/ba_data/python/ba/_generated' - def _do_get_targets(root: str, fnames: List[str]) -> None: + def _do_get_targets(root: str, fnames: list[str]) -> None: # Special case: ignore temp py files in data src. if root == 'assets/src/ba_data/data/maps': return @@ -122,7 +122,7 @@ def _get_py_targets(src: str, dst: str, py_targets: List[str], # Now create targets for any of our dynamically generated stuff that # lives under this dir. - meta_targets: List[str] = [] + meta_targets: list[str] = [] for mantype in ['public', 'private']: with open(f'src/meta/.meta_manifest_{mantype}.json', encoding='utf-8') as infile: @@ -137,7 +137,7 @@ def _get_py_targets(src: str, dst: str, py_targets: List[str], fnames=[os.path.basename(target)]) -def _get_py_targets_subset(all_targets: Set[str], subset: str, +def _get_py_targets_subset(all_targets: set[str], subset: str, suffix: str) -> str: if subset == 'public_tools': src = 'tools' @@ -149,8 +149,8 @@ def _get_py_targets_subset(all_targets: Set[str], subset: str, copyrule = 'build/%.py : src/%.py' # Separate these into '1' and '2'. - py_targets: List[str] = [] - pyc_targets: List[str] = [] + py_targets: list[str] = [] + pyc_targets: list[str] = [] _get_py_targets(src, dst, @@ -213,8 +213,8 @@ def _get_py_targets_subset(all_targets: Set[str], subset: str, return out -def _get_extras_targets_win(all_targets: Set[str], platform: str) -> str: - targets: List[str] = [] +def _get_extras_targets_win(all_targets: set[str], platform: str) -> str: + targets: list[str] = [] base = 'assets/src/windows' dstbase = 'build/windows' for root, _dnames, fnames in os.walk(base): @@ -292,8 +292,8 @@ def update_assets_makefile(projroot: str, check: bool) -> None: auto_start_private = lines.index('#__AUTOGENERATED_PRIVATE_BEGIN__') auto_end_private = lines.index('#__AUTOGENERATED_PRIVATE_END__') - all_targets_public: Set[str] = set() - all_targets_private: Set[str] = set() + all_targets_public: set[str] = set() + all_targets_private: set[str] = set() # We always auto-generate the public section. our_lines_public = [ @@ -380,7 +380,7 @@ def update_assets_makefile(projroot: str, check: bool) -> None: all_targets_private, check) -def _write_manifest(manifest_path: str, all_targets: Set[str], +def _write_manifest(manifest_path: str, all_targets: set[str], check: bool) -> None: # Lastly, write a simple manifest of the things we expect to have # in build. We can use this to clear out orphaned files as part of builds. diff --git a/tools/batools/assetstaging.py b/tools/batools/assetstaging.py index d5f18435..9c231bc7 100755 --- a/tools/batools/assetstaging.py +++ b/tools/batools/assetstaging.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.8 +#!/usr/bin/env python3.9 # Released under the MIT License. See LICENSE for details. # """Stage assets for a build.""" @@ -15,7 +15,7 @@ from typing import TYPE_CHECKING from efrotools import PYVER if TYPE_CHECKING: - from typing import Optional, List + from typing import Optional from pathlib import Path # Suffix for the pyc files we include in stagings. @@ -53,7 +53,7 @@ class Config: self.is_payload_full = False self.debug: Optional[bool] = None - def _parse_android_args(self, args: List[str]) -> None: + def _parse_android_args(self, args: list[str]) -> None: # On Android we get nitpicky with what # we want to copy in since we can speed up # iterations by installing stripped down @@ -100,7 +100,7 @@ class Config: elif arg == '-audio': self.include_audio = True - def _parse_win_platform(self, platform: str, args: List[str]) -> None: + def _parse_win_platform(self, platform: str, args: list[str]) -> None: """Parse sub-args in the windows platform string.""" winempty, wintype, winplt, wincfg = platform.split('-') self.win_platform = winplt @@ -133,7 +133,7 @@ class Config: else: raise RuntimeError(f'Invalid wincfg: "{wincfg}"') - def parse_args(self, args: List[str]) -> None: + def parse_args(self, args: list[str]) -> None: """Parse args and apply to the cfg.""" if len(args) < 1: raise RuntimeError('Expected a platform argument.') @@ -275,7 +275,7 @@ def _sync_windows_extras(cfg: Config) -> None: # We could technically copy everything over but this keeps staging # dirs a bit tidier. dbgsfx = '_d' if cfg.debug else '' - toplevelfiles: List[str] = [f'python38{dbgsfx}.dll'] + toplevelfiles: list[str] = [f'python39{dbgsfx}.dll'] if cfg.win_type == 'win': toplevelfiles += [ @@ -469,7 +469,7 @@ def stage_server_file(projroot: str, mode: str, infilename: str, raise RuntimeError(f"Unknown server file for staging: '{basename}'.") -def main(projroot: str, args: Optional[List[str]] = None) -> None: +def main(projroot: str, args: Optional[list[str]] = None) -> None: """Stage assets for a build.""" if args is None: diff --git a/tools/batools/build.py b/tools/batools/build.py index 7c914573..f3c6a63a 100644 --- a/tools/batools/build.py +++ b/tools/batools/build.py @@ -16,7 +16,7 @@ from efro.error import CleanError from efro.terminal import Clr if TYPE_CHECKING: - from typing import List, Sequence, Optional, Any, Dict + from typing import Sequence, Optional, Any # Python pip packages we require for this project. @@ -24,7 +24,7 @@ if TYPE_CHECKING: class PipRequirement: """A pip package required by our project.""" modulename: Optional[str] = None - minversion: Optional[List[int]] = None # None implies no min version. + minversion: Optional[list[int]] = None # None implies no min version. pipname: Optional[str] = None # None implies same as modulename. @@ -50,7 +50,7 @@ PIP_REQUIREMENTS = [ # Parts of full-tests suite we only run on particular days. # (This runs in listed order so should be randomized by hand to avoid # clustering similar tests too much) -SPARSE_TEST_BUILDS: List[List[str]] = [ +SPARSE_TEST_BUILDS: list[list[str]] = [ ['ios.pylibs.debug', 'android.pylibs.arm'], ['linux.package', 'android.pylibs.arm64'], ['windows.package', 'mac.pylibs'], @@ -88,7 +88,7 @@ class PrefabTarget(Enum): SERVER_RELEASE = 'server-release' -def _lazybuild_check_paths(inpaths: List[str], category: SourceCategory, +def _lazybuild_check_paths(inpaths: list[str], category: SourceCategory, target: str) -> bool: # pylint: disable=too-many-branches @@ -170,7 +170,7 @@ def lazybuild(target: str, category: SourceCategory, command: str) -> None: Note that target's mod-time will *always* be updated to match the newest source regardless of whether the build itself was triggered. """ - paths: List[str] + paths: list[str] # Everything possibly affecting meta builds. if category is SourceCategory.META: @@ -214,7 +214,7 @@ def lazybuild(target: str, category: SourceCategory, command: str) -> None: def archive_old_builds(ssh_server: str, builds_dir: str, - ssh_args: List[str]) -> None: + ssh_args: list[str]) -> None: """Stuff our old public builds into the 'old' dir. (called after we push newer ones) @@ -295,7 +295,8 @@ def gen_fulltest_buildfile_android() -> None: cspre = 'tools/cloudshell linbeast --env android --' # This is currently broken; turning off. - do_py_android = False + # Update: should be working again; hooray! + do_py_android = True for extra in extras: if extra == 'android.pylibs.arm': @@ -347,7 +348,7 @@ def gen_fulltest_buildfile_windows() -> None: dayoffset = datetime.datetime.now().timetuple().tm_yday - lines: List[str] = [] + lines: list[str] = [] # We want to do one regular, one headless, and one oculus build, # but let's switch up 32 or 64 bit based on the day. @@ -571,7 +572,7 @@ def checkenv() -> None: assert 'Package' in piplist[0] and 'Version' in piplist[0] assert '--------' in piplist[1] piplist = piplist[2:] - pipvers: Dict[str, List[int]] = {} + pipvers: dict[str, list[int]] = {} for line in piplist: pname, pverraw = line.split()[:2] pver = [int(x) if x.isdigit() else 0 for x in pverraw.split('.')] @@ -648,9 +649,9 @@ def checkenv() -> None: print(f'{Clr.BLD}Environment ok.{Clr.RST}', flush=True) -def get_pip_reqs() -> List[str]: +def get_pip_reqs() -> list[str]: """Return the pip requirements needed to build/run stuff.""" - out: List[str] = [] + out: list[str] = [] for req in PIP_REQUIREMENTS: name = req.modulename if req.pipname is None else req.pipname assert isinstance(name, str) @@ -712,7 +713,7 @@ def _get_server_config_template_yaml(projroot: str) -> str: # pylint: disable=too-many-branches import yaml lines_in = _get_server_config_raw_contents(projroot).splitlines() - lines_out: List[str] = [] + lines_out: list[str] = [] ignore_vars = {'stress_test_players'} for line in lines_in: if any(line.startswith(f'{var}:') for var in ignore_vars): @@ -869,7 +870,7 @@ def cmake_prep_dir(dirname: str, verbose: bool = False) -> None: name: str current_value: str - entries: List[Entry] = [] + entries: list[Entry] = [] # Start fresh if cmake version changes. cmake_ver_output = subprocess.run(['cmake', '--version'], @@ -911,7 +912,7 @@ def cmake_prep_dir(dirname: str, verbose: bool = False) -> None: verfilename = os.path.join(dirname, '.ba_cmake_env') title = 'cmake_prep_dir' - versions: Dict[str, str] + versions: dict[str, str] if os.path.isfile(verfilename): with open(verfilename, encoding='utf-8') as infile: versions = json.loads(infile.read()) diff --git a/tools/batools/docs.py b/tools/batools/docs.py index 6beed9b6..7e840575 100755 --- a/tools/batools/docs.py +++ b/tools/batools/docs.py @@ -11,7 +11,7 @@ import datetime import inspect import subprocess from dataclasses import dataclass -from typing import TYPE_CHECKING, List, Union, cast +from typing import TYPE_CHECKING, Union, cast from enum import Enum from efro.error import CleanError @@ -19,8 +19,7 @@ from efro.terminal import Clr if TYPE_CHECKING: from types import ModuleType - from typing import (Type, Optional, Tuple, Callable, Dict, Any, Sequence, - Set) + from typing import Optional, Callable, Any, Sequence CATEGORY_STRING = 'Category:' @@ -61,15 +60,15 @@ class ClassInfo: """Info about a class of functions/classes.""" name: str category: str - methods: List[FunctionInfo] - inherited_methods: List[FunctionInfo] - attributes: List[AttributeInfo] - parents: List[str] + methods: list[FunctionInfo] + inherited_methods: list[FunctionInfo] + attributes: list[AttributeInfo] + parents: list[str] docs: Optional[str] - enum_values: Optional[List[str]] + enum_values: Optional[list[str]] -def parse_docs_attrs(attrs: List[AttributeInfo], docs: str) -> str: +def parse_docs_attrs(attrs: list[AttributeInfo], docs: str) -> str: """Given a docs str, parses attribute descriptions contained within.""" docs_lines = docs.splitlines() attr_line = None @@ -115,14 +114,14 @@ def parse_docs_attrs(attrs: List[AttributeInfo], docs: str) -> str: return docs -def _get_defining_class(cls: Type, name: str) -> Optional[Type]: +def _get_defining_class(cls: type, name: str) -> Optional[type]: for i in cls.mro()[1:]: if hasattr(i, name): return i return None -def _get_bases(cls: Type) -> List[str]: +def _get_bases(cls: type) -> list[str]: bases = [] for par in cls.mro()[1:]: if par is not object: @@ -199,7 +198,7 @@ def _split_into_paragraphs(docs: str, filter_type: str, indent: int) -> str: return docs -def _filter_type_settings(filter_type: str) -> Tuple[Optional[Callable], int]: +def _filter_type_settings(filter_type: str) -> tuple[Optional[Callable], int]: get_category_href_func = None if filter_type == 'class': indent = 30 @@ -216,7 +215,7 @@ def _filter_type_settings(filter_type: str) -> Tuple[Optional[Callable], int]: return get_category_href_func, indent -def _get_defining_class_backwards(cls: Type, name: str) -> Optional[Type]: +def _get_defining_class_backwards(cls: type, name: str) -> Optional[type]: mro = cls.mro() mro.reverse() for i in mro: @@ -225,7 +224,7 @@ def _get_defining_class_backwards(cls: Type, name: str) -> Optional[Type]: return None -def _get_module_classes(module: ModuleType) -> List[Tuple[str, Type]]: +def _get_module_classes(module: ModuleType) -> list[tuple[str, type]]: names = dir(module) # Look for all public classes in the provided module. @@ -250,7 +249,7 @@ def _get_module_classes(module: ModuleType) -> List[Tuple[str, Type]]: return classes_by_name -def _is_inherited(cls: Type, name: str) -> bool: +def _is_inherited(cls: type, name: str) -> bool: method = getattr(cls, name) @@ -314,7 +313,7 @@ def _get_category(docs: str, category_type: CategoryType) -> str: return category -def _print_child_classes(category_classes: List[ClassInfo], parent: str, +def _print_child_classes(category_classes: list[ClassInfo], parent: str, indent: int) -> str: out = '' valid_classes = [] @@ -349,8 +348,8 @@ def _print_child_classes(category_classes: List[ClassInfo], parent: str, return out -def _add_inner_classes(class_objs: Sequence[Type], - classes_by_name: List[Tuple[str, Type]]) -> None: +def _add_inner_classes(class_objs: Sequence[type], + classes_by_name: list[tuple[str, type]]) -> None: # Ok, now go through all existing classes and look for classes # defined within. @@ -371,21 +370,21 @@ class Generator: """class which handles docs generation.""" def __init__(self) -> None: - self._index_keys: List[str] = [] + self._index_keys: list[str] = [] # Make a list of missing stuff so we can warn about it in one # big chunk at the end (so the user can batch their corrections). - self._errors: List[Any] = [] - self._index: Dict[str, Tuple[str, Union[ClassInfo, FunctionInfo, + self._errors: list[Any] = [] + self._index: dict[str, tuple[str, Union[ClassInfo, FunctionInfo, AttributeInfo]]] = {} self._out = '' - self._classes: List[ClassInfo] = [] - self._functions: List[FunctionInfo] = [] - self._merged_categories: List[Tuple[str, str, - List[Union[ClassInfo, + self._classes: list[ClassInfo] = [] + self._functions: list[FunctionInfo] = [] + self._merged_categories: list[tuple[str, str, + list[Union[ClassInfo, FunctionInfo]]]] = [] - def name_variants(self, name: str) -> List[str]: + def name_variants(self, name: str) -> list[str]: """Return variants of a word (such as plural) for linking.""" # Do 'ies' plural for words ending in y. # (but not things like foo.y or display or prey) @@ -397,7 +396,7 @@ class Generator: def _add_index_links(self, docs: str, - ignore_links: Optional[List[str]] = None) -> str: + ignore_links: Optional[list[str]] = None) -> str: """Add links to indexed classes/methods/etc found in a docstr.""" sub_num = 0 subs = {} @@ -446,14 +445,14 @@ class Generator: docs = docs.replace(sub_name, sub_val) return docs - def _get_all_attrs_for_class(self, cls: Type, - docs: str) -> Tuple[str, List[AttributeInfo]]: + def _get_all_attrs_for_class(self, cls: type, + docs: str) -> tuple[str, list[AttributeInfo]]: """ if there's an 'Attributes' section in the docs, strip it out and create attributes entries out of it. Returns the stripped down docs as well as detected attrs. """ - attrs: List[AttributeInfo] = [] + attrs: list[AttributeInfo] = [] # Start by pulling any type info we find in the doc str. # (necessary in many non-property cases since there's no other way @@ -473,7 +472,7 @@ class Generator: return docs, attrs def _get_class_level_types_for_doc_attrs( - self, cls: Type, attrs: List[AttributeInfo]) -> None: + self, cls: type, attrs: list[AttributeInfo]) -> None: # Take note of all the attrs that we're aware of already; # these are the ones we can potentially provide type info for. existing_attrs_by_name = {a.name: a for a in attrs} @@ -494,8 +493,8 @@ class Generator: ' should just have one') existing_attrs_by_name[aname].attr_type = aval - def _get_property_attrs_for_class(self, cls: Type, - attrs: List[AttributeInfo]) -> None: + def _get_property_attrs_for_class(self, cls: type, + attrs: list[AttributeInfo]) -> None: for attrname in dir(cls): attr = getattr(cls, attrname) @@ -527,7 +526,7 @@ class Generator: docs=attrdocs, attr_type=attrtype)) - def _get_base_docs_for_class(self, cls: Type) -> str: + def _get_base_docs_for_class(self, cls: type) -> str: if cls.__doc__ is not None: docs = cls.__doc__ docs_lines = docs.splitlines() @@ -556,13 +555,13 @@ class Generator: self._errors.append(f'base docs for class {cls}') return docs - def _get_enum_values_for_class(self, cls: Type) -> Optional[List[str]]: + def _get_enum_values_for_class(self, cls: type) -> Optional[list[str]]: if issubclass(cls, Enum): return [val.name for val in cls] return None def _get_methods_for_class( - self, cls: Type) -> Tuple[List[FunctionInfo], List[FunctionInfo]]: + self, cls: type) -> tuple[list[FunctionInfo], list[FunctionInfo]]: import types method_types = [ @@ -576,8 +575,8 @@ class Generator: and '_no_init' not in name ] - methods: List[FunctionInfo] = [] - inherited_methods: List[FunctionInfo] = [] + methods: list[FunctionInfo] = [] + inherited_methods: list[FunctionInfo] = [] for mth in methods_raw: # Protocols seem to give this... @@ -616,8 +615,8 @@ class Generator: is_class_method=is_class_method)) return methods, inherited_methods - def _python_method_docs(self, cls: Type, - mth: Callable) -> Tuple[str, bool]: + def _python_method_docs(self, cls: type, + mth: Callable) -> tuple[str, bool]: import pydoc mdocs_lines = pydoc.plain(pydoc.render_doc(mth)).splitlines()[2:] @@ -664,9 +663,9 @@ class Generator: mdocs = '\n'.join(mdocs_lines) return mdocs, is_class_method - def _handle_single_line_method_docs(self, cls: Type, - mdocs_lines: List[str], - mth: Callable) -> List[str]: + def _handle_single_line_method_docs(self, cls: type, + mdocs_lines: list[str], + mth: Callable) -> list[str]: import pydoc for testclass in cls.mro()[1:]: testm = getattr(testclass, mth.__name__, None) @@ -734,7 +733,7 @@ class Generator: # ones are searched first (such as nested classes like ba.Foo.Bar). self._index_keys.reverse() - def _write_inherited_attrs(self, inherited_attrs: Dict[str, str]) -> None: + def _write_inherited_attrs(self, inherited_attrs: dict[str, str]) -> None: style = (' style="padding-left: 0px;"' if DO_STYLES else '') self._out += f'Attributes Inherited:\n' style = (' style="padding-left: 30px;"' if DO_STYLES else '') @@ -749,7 +748,7 @@ class Generator: self._out += '\n' def _write_attrs(self, cls: ClassInfo, - attributes: List[AttributeInfo]) -> None: + attributes: list[AttributeInfo]) -> None: # Include a block of links to our attrs if we have more # than one. if len(attributes) > 1: @@ -788,8 +787,8 @@ class Generator: self._out += '
\n' def _write_class_attrs_all(self, cls: ClassInfo, - attributes: List[AttributeInfo], - inherited_attrs: Dict[str, str]) -> None: + attributes: list[AttributeInfo], + inherited_attrs: dict[str, str]) -> None: # If this class has no non-inherited attrs, just print a link to # the base class instead of repeating everything. # Nevermind for now; we never have many attrs so this isn't as @@ -852,7 +851,7 @@ class Generator: self._out += '\n' def _write_methods_for_class(self, cls: ClassInfo, - methods: List[FunctionInfo]) -> None: + methods: list[FunctionInfo]) -> None: """Dump methods for a class.""" if cls.methods: # Just say "methods" if we had no inherited ones. @@ -973,8 +972,8 @@ class Generator: '<top level class>\n') def _get_inherited_attrs(self, cls: ClassInfo, - attr_name_set: Set[str]) -> Dict[str, str]: - inherited_attrs: Dict[str, str] = {} + attr_name_set: set[str]) -> dict[str, str]: + inherited_attrs: dict[str, str] = {} for par in cls.parents: if par in self._index: parent_class = self._index[par][1] @@ -1110,7 +1109,7 @@ class Generator: self._out += (f'

' + cname + '

\n') - classes_sorted = cast(List[ClassInfo], cmembers) + classes_sorted = cast(list[ClassInfo], cmembers) classes_sorted.sort(key=lambda x: x.name.lower()) pcc = _print_child_classes(classes_sorted, '', 0) self._out += pcc @@ -1121,7 +1120,7 @@ class Generator: _get_function_category_href(cname) + '">' + cname + '\n' '