diff --git a/.gitattributes b/.gitattributes index 7f31c0a..56f7b9d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,5 @@ components/third_party/* linguist-vendored components/livekit/protocol/*.c linguist-generated -components/livekit/protocol/*.h linguist-generated \ No newline at end of file +components/livekit/protocol/*.h linguist-generated +examples/**/main/images/*.c linguist-generated # LVGL images +examples/**/main/fonts/*.c linguist-generated # LVGL fonts \ No newline at end of file diff --git a/examples/voice_agent_lcd/CMakeLists.txt b/examples/voice_agent_lcd/CMakeLists.txt new file mode 100755 index 0000000..4bdc965 --- /dev/null +++ b/examples/voice_agent_lcd/CMakeLists.txt @@ -0,0 +1,6 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.5) +set(COMPONENTS main) # Trim build +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(voice_agent_lcd) \ No newline at end of file diff --git a/examples/voice_agent_lcd/README.md b/examples/voice_agent_lcd/README.md new file mode 100644 index 0000000..d35c1c1 --- /dev/null +++ b/examples/voice_agent_lcd/README.md @@ -0,0 +1,86 @@ +# Voice Agent LCD + +Example application combining this SDK with [LiveKit Agents](https://docs.livekit.io/agents/), enabling bidirectional voice communication with an AI agent. The agent can interact with hardware in response to user requests. Below is an example of a conversation between a user and the agent: + +> **User:** What is the current CPU temperature? \ +> **Agent:** The CPU temperature is currently 33°C. + +> **User:** Turn on the blue LED. \ +> **Agent:** *[turns blue LED on]* + +> **User:** Turn on the yellow LED. \ +> **Agent:** I'm sorry, the board does not have a yellow LED. + +## Requirements + +- Software: + - [IDF](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/get-started/index.html) release v5.4 or later + - Python 3.9 or later + - LiveKit Cloud Project + - Sandbox Token Server (created from your cloud project) + - API keys for OpenAI, Deepgram, and Cartesia. +- Hardware + - Dev board: [ESP32-S3-Korvo-2](https://docs.espressif.com/projects/esp-adf/en/latest/design-guide/dev-boards/user-guide-esp32-s3-korvo-2.html) + - Two micro USB cables: one for power, one for flashing + - Mono enclosed speaker (example from [Adafruit](https://www.adafruit.com/product/3351)) + +## Run example + +To run the example on your board, begin in your terminal by navigating to the example's root directory: *[examples/voice_agent](./examples/voice_agent/)*. + +### 1. Configuration + +The example requires a network connection and Sandbox ID from your [LiveKit Cloud Project](https://cloud.livekit.io/projects/p_/sandbox/templates/token-server). To configure these settings from your terminal, launch *menuconfig*: +```sh +idf.py menuconfig +``` + +With *menuconfig* open, navigate to the *LiveKit Example* menu and configure the following settings: + +- Network → Wi-Fi SSID +- Network → Wi-Fi password +- Room connection → Sandbox ID + +For more information about available options, please refer to [this guide](../README.md#configuration). + +### 2. Build & flash + +Begin by connecting your dev board via USB. With the board connected, use the following command +to build the example, flash it to your board, and monitor serial output: + +```sh +idf.py -D SDKCONFIG_DEFAULTS=sdkconfig.bsp.{board} flash monitor +``` + +Once running on device, the example will establish a network connection and then connect to a LiveKit room. Once connected, you will see the following log message: + +```sh +I (19508) livekit_example: Room state: connected +``` + +If you encounter any issues during this process, please refer to the example [troubleshooting guide](../README.md/#troubleshooting). + +## Run agent + +With the example running on your board, the next step is to run the agent so it can join the room. +Begin by navigating to the agent's source directory in your terminal: *[examples/voice_agent/agent](../voice_agent/agent)*. + +In this directory, create a *.env* file containing the required API keys: + +```sh +DEEPGRAM_API_KEY= +OPENAI_API_KEY= +CARTESIA_API_KEY= +LIVEKIT_API_KEY= +LIVEKIT_API_SECRET= +LIVEKIT_URL= +``` + +With the API keys in place, download the required files and run the agent in development mode as follows: + +```sh +python agent.py download-files +python agent.py dev +``` + +With the agent running, it will discover and join the room, and you will now be able to engage in two-way conversation. Try asking some of the questions shown above. \ No newline at end of file diff --git a/examples/voice_agent_lcd/agent/.gitignore b/examples/voice_agent_lcd/agent/.gitignore new file mode 100644 index 0000000..a681a85 --- /dev/null +++ b/examples/voice_agent_lcd/agent/.gitignore @@ -0,0 +1,13 @@ +# Python-generated files +__pycache__/ +*.py[oc] +build/ +dist/ +wheels/ +*.egg-info + +# Virtual environments +.venv + +# Environment variables +.env \ No newline at end of file diff --git a/examples/voice_agent_lcd/agent/.python-version b/examples/voice_agent_lcd/agent/.python-version new file mode 100644 index 0000000..24ee5b1 --- /dev/null +++ b/examples/voice_agent_lcd/agent/.python-version @@ -0,0 +1 @@ +3.13 diff --git a/examples/voice_agent_lcd/agent/agent.py b/examples/voice_agent_lcd/agent/agent.py new file mode 100644 index 0000000..ba949c1 --- /dev/null +++ b/examples/voice_agent_lcd/agent/agent.py @@ -0,0 +1,86 @@ +import json +from enum import Enum +from dotenv import load_dotenv +from livekit import agents +from livekit.agents import ( + AgentSession, + Agent, + RunContext, + RoomInputOptions, + function_tool, + get_job_context, + ToolError, +) +from livekit.plugins import ( + openai, + cartesia, + deepgram, + silero, +) +from livekit.plugins.turn_detector.multilingual import MultilingualModel + +# If enabled, RPC calls will not be performed. +TEST_MODE = False + +load_dotenv() + +class LEDColor(str, Enum): + RED = "red" + BLUE = "blue" + +class Assistant(Agent): + def __init__(self) -> None: + super().__init__( + instructions="""You are a helpful voice AI assistant running on an ESP-32 dev board. + You answer user's questions about the hardware state. + """ + ) + async def on_enter(self) -> None: + await self.session.say( + "Hi, how can I help you today?", + allow_interruptions=False + ) + + @function_tool() + async def get_cpu_temp(self, _: RunContext) -> float: + """Get the current temperature of the CPU. + + Returns: + The temperature reading in degrees Celsius. + """ + if TEST_MODE: return 25.0 + try: + room = get_job_context().room + participant_identity = next(iter(room.remote_participants)) + response = await room.local_participant.perform_rpc( + destination_identity=participant_identity, + method="get_cpu_temp", + response_timeout=10, + payload="" + ) + if isinstance(response, str): + try: + response = float(response) + except ValueError: + raise ToolError("Received invalid temperature value") + return response + except Exception: + raise ToolError("Unable to retrieve CPU temperature") + +async def entrypoint(ctx: agents.JobContext): + session = AgentSession( + stt=deepgram.STT(model="nova-3", language="multi"), + llm=openai.LLM(model="gpt-4o-mini"), + tts=cartesia.TTS(model="sonic-2", voice="c99d36f3-5ffd-4253-803a-535c1bc9c306"), + vad=silero.VAD.load(), + turn_detection=MultilingualModel(), + ) + await session.start( + room=ctx.room, + agent=Assistant(), + room_input_options=RoomInputOptions() + ) + await ctx.connect() + +if __name__ == "__main__": + agents.cli.run_app(agents.WorkerOptions(entrypoint_fnc=entrypoint)) \ No newline at end of file diff --git a/examples/voice_agent_lcd/agent/pyproject.toml b/examples/voice_agent_lcd/agent/pyproject.toml new file mode 100644 index 0000000..320a8da --- /dev/null +++ b/examples/voice_agent_lcd/agent/pyproject.toml @@ -0,0 +1,11 @@ +[project] +name = "esp-example-agent" +version = "0.1.0" +description = "Example agent for interacting with the ESP-32 voice chat example." +readme = "README.md" +license = {text = "MIT"} +requires-python = ">=3.13" +dependencies = [ + "livekit-agents[cartesia,deepgram,openai,silero,turn-detector]~=1.0", + "python-dotenv>=1.1.1" +] diff --git a/examples/voice_agent_lcd/agent/uv.lock b/examples/voice_agent_lcd/agent/uv.lock new file mode 100644 index 0000000..0f5fc98 --- /dev/null +++ b/examples/voice_agent_lcd/agent/uv.lock @@ -0,0 +1,1334 @@ +version = 1 +revision = 1 +requires-python = ">=3.13" + +[[package]] +name = "aiofiles" +version = "24.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/03/a88171e277e8caa88a4c77808c20ebb04ba74cc4681bf1e9416c862de237/aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c", size = 30247 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5", size = 15896 }, +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265 }, +] + +[[package]] +name = "aiohttp" +version = "3.12.13" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/6e/ab88e7cb2a4058bed2f7870276454f85a7c56cd6da79349eb314fc7bbcaa/aiohttp-3.12.13.tar.gz", hash = "sha256:47e2da578528264a12e4e3dd8dd72a7289e5f812758fe086473fab037a10fcce", size = 7819160 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/0f/db19abdf2d86aa1deec3c1e0e5ea46a587b97c07a16516b6438428b3a3f8/aiohttp-3.12.13-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d4a18e61f271127465bdb0e8ff36e8f02ac4a32a80d8927aa52371e93cd87938", size = 694910 }, + { url = "https://files.pythonhosted.org/packages/d5/81/0ab551e1b5d7f1339e2d6eb482456ccbe9025605b28eed2b1c0203aaaade/aiohttp-3.12.13-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:532542cb48691179455fab429cdb0d558b5e5290b033b87478f2aa6af5d20ace", size = 472566 }, + { url = "https://files.pythonhosted.org/packages/34/3f/6b7d336663337672d29b1f82d1f252ec1a040fe2d548f709d3f90fa2218a/aiohttp-3.12.13-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d7eea18b52f23c050ae9db5d01f3d264ab08f09e7356d6f68e3f3ac2de9dfabb", size = 464856 }, + { url = "https://files.pythonhosted.org/packages/26/7f/32ca0f170496aa2ab9b812630fac0c2372c531b797e1deb3deb4cea904bd/aiohttp-3.12.13-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad7c8e5c25f2a26842a7c239de3f7b6bfb92304593ef997c04ac49fb703ff4d7", size = 1703683 }, + { url = "https://files.pythonhosted.org/packages/ec/53/d5513624b33a811c0abea8461e30a732294112318276ce3dbf047dbd9d8b/aiohttp-3.12.13-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6af355b483e3fe9d7336d84539fef460120c2f6e50e06c658fe2907c69262d6b", size = 1684946 }, + { url = "https://files.pythonhosted.org/packages/37/72/4c237dd127827b0247dc138d3ebd49c2ded6114c6991bbe969058575f25f/aiohttp-3.12.13-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a95cf9f097498f35c88e3609f55bb47b28a5ef67f6888f4390b3d73e2bac6177", size = 1737017 }, + { url = "https://files.pythonhosted.org/packages/0d/67/8a7eb3afa01e9d0acc26e1ef847c1a9111f8b42b82955fcd9faeb84edeb4/aiohttp-3.12.13-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8ed8c38a1c584fe99a475a8f60eefc0b682ea413a84c6ce769bb19a7ff1c5ef", size = 1786390 }, + { url = "https://files.pythonhosted.org/packages/48/19/0377df97dd0176ad23cd8cad4fd4232cfeadcec6c1b7f036315305c98e3f/aiohttp-3.12.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0b9170d5d800126b5bc89d3053a2363406d6e327afb6afaeda2d19ee8bb103", size = 1708719 }, + { url = "https://files.pythonhosted.org/packages/61/97/ade1982a5c642b45f3622255173e40c3eed289c169f89d00eeac29a89906/aiohttp-3.12.13-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:372feeace612ef8eb41f05ae014a92121a512bd5067db8f25101dd88a8db11da", size = 1622424 }, + { url = "https://files.pythonhosted.org/packages/99/ab/00ad3eea004e1d07ccc406e44cfe2b8da5acb72f8c66aeeb11a096798868/aiohttp-3.12.13-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a946d3702f7965d81f7af7ea8fb03bb33fe53d311df48a46eeca17e9e0beed2d", size = 1675447 }, + { url = "https://files.pythonhosted.org/packages/3f/fe/74e5ce8b2ccaba445fe0087abc201bfd7259431d92ae608f684fcac5d143/aiohttp-3.12.13-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a0c4725fae86555bbb1d4082129e21de7264f4ab14baf735278c974785cd2041", size = 1707110 }, + { url = "https://files.pythonhosted.org/packages/ef/c4/39af17807f694f7a267bd8ab1fbacf16ad66740862192a6c8abac2bff813/aiohttp-3.12.13-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9b28ea2f708234f0a5c44eb6c7d9eb63a148ce3252ba0140d050b091b6e842d1", size = 1649706 }, + { url = "https://files.pythonhosted.org/packages/38/e8/f5a0a5f44f19f171d8477059aa5f28a158d7d57fe1a46c553e231f698435/aiohttp-3.12.13-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d4f5becd2a5791829f79608c6f3dc745388162376f310eb9c142c985f9441cc1", size = 1725839 }, + { url = "https://files.pythonhosted.org/packages/fd/ac/81acc594c7f529ef4419d3866913f628cd4fa9cab17f7bf410a5c3c04c53/aiohttp-3.12.13-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:60f2ce6b944e97649051d5f5cc0f439360690b73909230e107fd45a359d3e911", size = 1759311 }, + { url = "https://files.pythonhosted.org/packages/38/0d/aabe636bd25c6ab7b18825e5a97d40024da75152bec39aa6ac8b7a677630/aiohttp-3.12.13-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:69fc1909857401b67bf599c793f2183fbc4804717388b0b888f27f9929aa41f3", size = 1708202 }, + { url = "https://files.pythonhosted.org/packages/1f/ab/561ef2d8a223261683fb95a6283ad0d36cb66c87503f3a7dde7afe208bb2/aiohttp-3.12.13-cp313-cp313-win32.whl", hash = "sha256:7d7e68787a2046b0e44ba5587aa723ce05d711e3a3665b6b7545328ac8e3c0dd", size = 420794 }, + { url = "https://files.pythonhosted.org/packages/9d/47/b11d0089875a23bff0abd3edb5516bcd454db3fefab8604f5e4b07bd6210/aiohttp-3.12.13-cp313-cp313-win_amd64.whl", hash = "sha256:5a178390ca90419bfd41419a809688c368e63c86bd725e1186dd97f6b89c2706", size = 446735 }, +] + +[[package]] +name = "aiosignal" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ba/b5/6d55e80f6d8a08ce22b982eafa278d823b541c925f11ee774b0b9c43473d/aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54", size = 19424 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/6a/bc7e17a3e87a2985d3e8f4da4cd0f481060eb78fb08596c42be62c90a4d9/aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5", size = 7597 }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, +] + +[[package]] +name = "anyio" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "sniffio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916 }, +] + +[[package]] +name = "attrs" +version = "25.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815 }, +] + +[[package]] +name = "av" +version = "14.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/86/f6/0b473dab52dfdea05f28f3578b1c56b6c796ce85e76951bab7c4e38d5a74/av-14.4.0.tar.gz", hash = "sha256:3ecbf803a7fdf67229c0edada0830d6bfaea4d10bfb24f0c3f4e607cd1064b42", size = 3892203 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/4c/b0205f77352312ff457ecdf31723dbf4403b7a03fc1659075d6d32f23ef7/av-14.4.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:3d2aea7c602b105363903e4017103bc4b60336e7aff80e1c22e8b4ec09fd125f", size = 19917341 }, + { url = "https://files.pythonhosted.org/packages/e1/c4/9e783bd7d47828e9c67f9c773c99de45c5ae01b3e942f1abf6cbaf530267/av-14.4.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:38c18f036aeb6dc9abf5e867d998c867f9ec93a5f722b60721fdffc123bbb2ae", size = 23715363 }, + { url = "https://files.pythonhosted.org/packages/b5/26/b2b406a676864d06b1c591205782d8527e7c99e5bc51a09862c3576e0087/av-14.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58c1e18c8be73b6eada2d9ec397852ec74ebe51938451bdf83644a807189d6c8", size = 33496968 }, + { url = "https://files.pythonhosted.org/packages/89/09/0a032bbe30c7049fca243ec8cf01f4be49dd6e7f7b9c3c7f0cc13f83c9d3/av-14.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4c32ff03a357feb030634f093089a73cb474b04efe7fbfba31f229cb2fab115", size = 32075498 }, + { url = "https://files.pythonhosted.org/packages/0b/1f/0fee20f74c1f48086366e59dbd37fa0684cd0f3c782a65cbb719d26c7acd/av-14.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af31d16ae25964a6a02e09cc132b9decd5ee493c5dcb21bcdf0d71b2d6adbd59", size = 35224910 }, + { url = "https://files.pythonhosted.org/packages/9e/19/1c4a201c75a2a431a85a43fd15d1fad55a28c22d596461d861c8d70f9b92/av-14.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e9fb297009e528f4851d25f3bb2781b2db18b59b10aed10240e947b77c582fb7", size = 36172918 }, + { url = "https://files.pythonhosted.org/packages/00/48/26b7e5d911c807f5f017a285362470ba16f44e8ea46f8b09ab5e348dd15b/av-14.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:573314cb9eafec2827dc98c416c965330dc7508193adbccd281700d8673b9f0a", size = 34414492 }, + { url = "https://files.pythonhosted.org/packages/6d/26/2f4badfa5b5b7b8f5f83d562b143a83ed940fa458eea4cad495ce95c9741/av-14.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f82ab27ee57c3b80eb50a5293222307dfdc02f810ea41119078cfc85ea3cf9a8", size = 37245826 }, + { url = "https://files.pythonhosted.org/packages/f4/02/88dbb6f5a05998b730d2e695b05060297af127ac4250efbe0739daa446d5/av-14.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f682003bbcaac620b52f68ff0e85830fff165dea53949e217483a615993ca20", size = 27898395 }, +] + +[[package]] +name = "certifi" +version = "2025.6.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/73/f7/f14b46d4bcd21092d7d3ccef689615220d8a08fb25e564b65d20738e672e/certifi-2025.6.15.tar.gz", hash = "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b", size = 158753 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/ae/320161bd181fc06471eed047ecce67b693fd7515b16d495d8932db763426/certifi-2025.6.15-py3-none-any.whl", hash = "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057", size = 157650 }, +] + +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622 }, + { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435 }, + { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653 }, + { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231 }, + { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243 }, + { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442 }, + { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147 }, + { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057 }, + { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454 }, + { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174 }, + { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166 }, + { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064 }, + { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641 }, + { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626 }, +] + +[[package]] +name = "click" +version = "8.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "coloredlogs" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "humanfriendly" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cc/c7/eed8f27100517e8c0e6b923d5f0845d0cb99763da6fdee00478f91db7325/coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0", size = 278520 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934", size = 46018 }, +] + +[[package]] +name = "distro" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277 }, +] + +[[package]] +name = "docstring-parser" +version = "0.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/08/12/9c22a58c0b1e29271051222d8906257616da84135af9ed167c9e28f85cb3/docstring_parser-0.16.tar.gz", hash = "sha256:538beabd0af1e2db0146b6bd3caa526c35a34d61af9fd2887f3a8a27a739aa6e", size = 26565 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl", hash = "sha256:bf0a1387354d3691d102edef7ec124f219ef639982d096e26e3b60aeffa90637", size = 36533 }, +] + +[[package]] +name = "esp-example-agent" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "livekit-agents", extra = ["cartesia", "deepgram", "openai", "silero", "turn-detector"] }, + { name = "python-dotenv" }, +] + +[package.metadata] +requires-dist = [ + { name = "livekit-agents", extras = ["cartesia", "deepgram", "openai", "silero", "turn-detector"], specifier = "~=1.0" }, + { name = "python-dotenv", specifier = ">=1.1.1" }, +] + +[[package]] +name = "eval-type-backport" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/ea/8b0ac4469d4c347c6a385ff09dc3c048c2d021696664e26c7ee6791631b5/eval_type_backport-0.2.2.tar.gz", hash = "sha256:f0576b4cf01ebb5bd358d02314d31846af5e07678387486e2c798af0e7d849c1", size = 9079 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/31/55cd413eaccd39125368be33c46de24a1f639f2e12349b0361b4678f3915/eval_type_backport-0.2.2-py3-none-any.whl", hash = "sha256:cb6ad7c393517f476f96d456d0412ea80f0a8cf96f6892834cd9340149111b0a", size = 5830 }, +] + +[[package]] +name = "filelock" +version = "3.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215 }, +] + +[[package]] +name = "flatbuffers" +version = "25.2.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/30/eb5dce7994fc71a2f685d98ec33cc660c0a5887db5610137e60d8cbc4489/flatbuffers-25.2.10.tar.gz", hash = "sha256:97e451377a41262f8d9bd4295cc836133415cc03d8cb966410a4af92eb00d26e", size = 22170 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/25/155f9f080d5e4bc0082edfda032ea2bc2b8fab3f4d25d46c1e9dd22a1a89/flatbuffers-25.2.10-py2.py3-none-any.whl", hash = "sha256:ebba5f4d5ea615af3f7fd70fc310636fbb2bbd1f566ac0a23d98dd412de50051", size = 30953 }, +] + +[[package]] +name = "frozenlist" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/b1/b64018016eeb087db503b038296fd782586432b9c077fc5c7839e9cb6ef6/frozenlist-1.7.0.tar.gz", hash = "sha256:2e310d81923c2437ea8670467121cc3e9b0f76d3043cc1d2331d56c7fb7a3a8f", size = 45078 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/90/6b2cebdabdbd50367273c20ff6b57a3dfa89bd0762de02c3a1eb42cb6462/frozenlist-1.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee80eeda5e2a4e660651370ebffd1286542b67e268aa1ac8d6dbe973120ef7ee", size = 79791 }, + { url = "https://files.pythonhosted.org/packages/83/2e/5b70b6a3325363293fe5fc3ae74cdcbc3e996c2a11dde2fd9f1fb0776d19/frozenlist-1.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d1a81c85417b914139e3a9b995d4a1c84559afc839a93cf2cb7f15e6e5f6ed2d", size = 47165 }, + { url = "https://files.pythonhosted.org/packages/f4/25/a0895c99270ca6966110f4ad98e87e5662eab416a17e7fd53c364bf8b954/frozenlist-1.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cbb65198a9132ebc334f237d7b0df163e4de83fb4f2bdfe46c1e654bdb0c5d43", size = 45881 }, + { url = "https://files.pythonhosted.org/packages/19/7c/71bb0bbe0832793c601fff68cd0cf6143753d0c667f9aec93d3c323f4b55/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dab46c723eeb2c255a64f9dc05b8dd601fde66d6b19cdb82b2e09cc6ff8d8b5d", size = 232409 }, + { url = "https://files.pythonhosted.org/packages/c0/45/ed2798718910fe6eb3ba574082aaceff4528e6323f9a8570be0f7028d8e9/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6aeac207a759d0dedd2e40745575ae32ab30926ff4fa49b1635def65806fddee", size = 225132 }, + { url = "https://files.pythonhosted.org/packages/ba/e2/8417ae0f8eacb1d071d4950f32f229aa6bf68ab69aab797b72a07ea68d4f/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bd8c4e58ad14b4fa7802b8be49d47993182fdd4023393899632c88fd8cd994eb", size = 237638 }, + { url = "https://files.pythonhosted.org/packages/f8/b7/2ace5450ce85f2af05a871b8c8719b341294775a0a6c5585d5e6170f2ce7/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04fb24d104f425da3540ed83cbfc31388a586a7696142004c577fa61c6298c3f", size = 233539 }, + { url = "https://files.pythonhosted.org/packages/46/b9/6989292c5539553dba63f3c83dc4598186ab2888f67c0dc1d917e6887db6/frozenlist-1.7.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a5c505156368e4ea6b53b5ac23c92d7edc864537ff911d2fb24c140bb175e60", size = 215646 }, + { url = "https://files.pythonhosted.org/packages/72/31/bc8c5c99c7818293458fe745dab4fd5730ff49697ccc82b554eb69f16a24/frozenlist-1.7.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bd7eb96a675f18aa5c553eb7ddc24a43c8c18f22e1f9925528128c052cdbe00", size = 232233 }, + { url = "https://files.pythonhosted.org/packages/59/52/460db4d7ba0811b9ccb85af996019f5d70831f2f5f255f7cc61f86199795/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:05579bf020096fe05a764f1f84cd104a12f78eaab68842d036772dc6d4870b4b", size = 227996 }, + { url = "https://files.pythonhosted.org/packages/ba/c9/f4b39e904c03927b7ecf891804fd3b4df3db29b9e487c6418e37988d6e9d/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:376b6222d114e97eeec13d46c486facd41d4f43bab626b7c3f6a8b4e81a5192c", size = 242280 }, + { url = "https://files.pythonhosted.org/packages/b8/33/3f8d6ced42f162d743e3517781566b8481322be321b486d9d262adf70bfb/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0aa7e176ebe115379b5b1c95b4096fb1c17cce0847402e227e712c27bdb5a949", size = 217717 }, + { url = "https://files.pythonhosted.org/packages/3e/e8/ad683e75da6ccef50d0ab0c2b2324b32f84fc88ceee778ed79b8e2d2fe2e/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3fbba20e662b9c2130dc771e332a99eff5da078b2b2648153a40669a6d0e36ca", size = 236644 }, + { url = "https://files.pythonhosted.org/packages/b2/14/8d19ccdd3799310722195a72ac94ddc677541fb4bef4091d8e7775752360/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f3f4410a0a601d349dd406b5713fec59b4cee7e71678d5b17edda7f4655a940b", size = 238879 }, + { url = "https://files.pythonhosted.org/packages/ce/13/c12bf657494c2fd1079a48b2db49fa4196325909249a52d8f09bc9123fd7/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cdfaaec6a2f9327bf43c933c0319a7c429058e8537c508964a133dffee412e", size = 232502 }, + { url = "https://files.pythonhosted.org/packages/d7/8b/e7f9dfde869825489382bc0d512c15e96d3964180c9499efcec72e85db7e/frozenlist-1.7.0-cp313-cp313-win32.whl", hash = "sha256:5fc4df05a6591c7768459caba1b342d9ec23fa16195e744939ba5914596ae3e1", size = 39169 }, + { url = "https://files.pythonhosted.org/packages/35/89/a487a98d94205d85745080a37860ff5744b9820a2c9acbcdd9440bfddf98/frozenlist-1.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:52109052b9791a3e6b5d1b65f4b909703984b770694d3eb64fad124c835d7cba", size = 43219 }, + { url = "https://files.pythonhosted.org/packages/56/d5/5c4cf2319a49eddd9dd7145e66c4866bdc6f3dbc67ca3d59685149c11e0d/frozenlist-1.7.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a6f86e4193bb0e235ef6ce3dde5cbabed887e0b11f516ce8a0f4d3b33078ec2d", size = 84345 }, + { url = "https://files.pythonhosted.org/packages/a4/7d/ec2c1e1dc16b85bc9d526009961953df9cec8481b6886debb36ec9107799/frozenlist-1.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:82d664628865abeb32d90ae497fb93df398a69bb3434463d172b80fc25b0dd7d", size = 48880 }, + { url = "https://files.pythonhosted.org/packages/69/86/f9596807b03de126e11e7d42ac91e3d0b19a6599c714a1989a4e85eeefc4/frozenlist-1.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:912a7e8375a1c9a68325a902f3953191b7b292aa3c3fb0d71a216221deca460b", size = 48498 }, + { url = "https://files.pythonhosted.org/packages/5e/cb/df6de220f5036001005f2d726b789b2c0b65f2363b104bbc16f5be8084f8/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9537c2777167488d539bc5de2ad262efc44388230e5118868e172dd4a552b146", size = 292296 }, + { url = "https://files.pythonhosted.org/packages/83/1f/de84c642f17c8f851a2905cee2dae401e5e0daca9b5ef121e120e19aa825/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f34560fb1b4c3e30ba35fa9a13894ba39e5acfc5f60f57d8accde65f46cc5e74", size = 273103 }, + { url = "https://files.pythonhosted.org/packages/88/3c/c840bfa474ba3fa13c772b93070893c6e9d5c0350885760376cbe3b6c1b3/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:acd03d224b0175f5a850edc104ac19040d35419eddad04e7cf2d5986d98427f1", size = 292869 }, + { url = "https://files.pythonhosted.org/packages/a6/1c/3efa6e7d5a39a1d5ef0abeb51c48fb657765794a46cf124e5aca2c7a592c/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2038310bc582f3d6a09b3816ab01737d60bf7b1ec70f5356b09e84fb7408ab1", size = 291467 }, + { url = "https://files.pythonhosted.org/packages/4f/00/d5c5e09d4922c395e2f2f6b79b9a20dab4b67daaf78ab92e7729341f61f6/frozenlist-1.7.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8c05e4c8e5f36e5e088caa1bf78a687528f83c043706640a92cb76cd6999384", size = 266028 }, + { url = "https://files.pythonhosted.org/packages/4e/27/72765be905619dfde25a7f33813ac0341eb6b076abede17a2e3fbfade0cb/frozenlist-1.7.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:765bb588c86e47d0b68f23c1bee323d4b703218037765dcf3f25c838c6fecceb", size = 284294 }, + { url = "https://files.pythonhosted.org/packages/88/67/c94103a23001b17808eb7dd1200c156bb69fb68e63fcf0693dde4cd6228c/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:32dc2e08c67d86d0969714dd484fd60ff08ff81d1a1e40a77dd34a387e6ebc0c", size = 281898 }, + { url = "https://files.pythonhosted.org/packages/42/34/a3e2c00c00f9e2a9db5653bca3fec306349e71aff14ae45ecc6d0951dd24/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:c0303e597eb5a5321b4de9c68e9845ac8f290d2ab3f3e2c864437d3c5a30cd65", size = 290465 }, + { url = "https://files.pythonhosted.org/packages/bb/73/f89b7fbce8b0b0c095d82b008afd0590f71ccb3dee6eee41791cf8cd25fd/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:a47f2abb4e29b3a8d0b530f7c3598badc6b134562b1a5caee867f7c62fee51e3", size = 266385 }, + { url = "https://files.pythonhosted.org/packages/cd/45/e365fdb554159462ca12df54bc59bfa7a9a273ecc21e99e72e597564d1ae/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:3d688126c242a6fabbd92e02633414d40f50bb6002fa4cf995a1d18051525657", size = 288771 }, + { url = "https://files.pythonhosted.org/packages/00/11/47b6117002a0e904f004d70ec5194fe9144f117c33c851e3d51c765962d0/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:4e7e9652b3d367c7bd449a727dc79d5043f48b88d0cbfd4f9f1060cf2b414104", size = 288206 }, + { url = "https://files.pythonhosted.org/packages/40/37/5f9f3c3fd7f7746082ec67bcdc204db72dad081f4f83a503d33220a92973/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1a85e345b4c43db8b842cab1feb41be5cc0b10a1830e6295b69d7310f99becaf", size = 282620 }, + { url = "https://files.pythonhosted.org/packages/0b/31/8fbc5af2d183bff20f21aa743b4088eac4445d2bb1cdece449ae80e4e2d1/frozenlist-1.7.0-cp313-cp313t-win32.whl", hash = "sha256:3a14027124ddb70dfcee5148979998066897e79f89f64b13328595c4bdf77c81", size = 43059 }, + { url = "https://files.pythonhosted.org/packages/bb/ed/41956f52105b8dbc26e457c5705340c67c8cc2b79f394b79bffc09d0e938/frozenlist-1.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3bf8010d71d4507775f658e9823210b7427be36625b387221642725b515dcf3e", size = 47516 }, + { url = "https://files.pythonhosted.org/packages/ee/45/b82e3c16be2182bff01179db177fe144d58b5dc787a7d4492c6ed8b9317f/frozenlist-1.7.0-py3-none-any.whl", hash = "sha256:9a5af342e34f7e97caf8c995864c7a396418ae2859cc6fdf1b1073020d516a7e", size = 13106 }, +] + +[[package]] +name = "fsspec" +version = "2025.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/f7/27f15d41f0ed38e8fcc488584b57e902b331da7f7c6dcda53721b15838fc/fsspec-2025.5.1.tar.gz", hash = "sha256:2e55e47a540b91843b755e83ded97c6e897fa0942b11490113f09e9c443c2475", size = 303033 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/61/78c7b3851add1481b048b5fdc29067397a1784e2910592bc81bb3f608635/fsspec-2025.5.1-py3-none-any.whl", hash = "sha256:24d3a2e663d5fc735ab256263c4075f374a174c3410c0b25e5bd1970bceaa462", size = 199052 }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515 }, +] + +[[package]] +name = "hf-xet" +version = "1.1.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ed/d4/7685999e85945ed0d7f0762b686ae7015035390de1161dcea9d5276c134c/hf_xet-1.1.5.tar.gz", hash = "sha256:69ebbcfd9ec44fdc2af73441619eeb06b94ee34511bbcf57cd423820090f5694", size = 495969 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/89/a1119eebe2836cb25758e7661d6410d3eae982e2b5e974bcc4d250be9012/hf_xet-1.1.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:f52c2fa3635b8c37c7764d8796dfa72706cc4eded19d638331161e82b0792e23", size = 2687929 }, + { url = "https://files.pythonhosted.org/packages/de/5f/2c78e28f309396e71ec8e4e9304a6483dcbc36172b5cea8f291994163425/hf_xet-1.1.5-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:9fa6e3ee5d61912c4a113e0708eaaef987047616465ac7aa30f7121a48fc1af8", size = 2556338 }, + { url = "https://files.pythonhosted.org/packages/6d/2f/6cad7b5fe86b7652579346cb7f85156c11761df26435651cbba89376cd2c/hf_xet-1.1.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc874b5c843e642f45fd85cda1ce599e123308ad2901ead23d3510a47ff506d1", size = 3102894 }, + { url = "https://files.pythonhosted.org/packages/d0/54/0fcf2b619720a26fbb6cc941e89f2472a522cd963a776c089b189559447f/hf_xet-1.1.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dbba1660e5d810bd0ea77c511a99e9242d920790d0e63c0e4673ed36c4022d18", size = 3002134 }, + { url = "https://files.pythonhosted.org/packages/f3/92/1d351ac6cef7c4ba8c85744d37ffbfac2d53d0a6c04d2cabeba614640a78/hf_xet-1.1.5-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ab34c4c3104133c495785d5d8bba3b1efc99de52c02e759cf711a91fd39d3a14", size = 3171009 }, + { url = "https://files.pythonhosted.org/packages/c9/65/4b2ddb0e3e983f2508528eb4501288ae2f84963586fbdfae596836d5e57a/hf_xet-1.1.5-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:83088ecea236d5113de478acb2339f92c95b4fb0462acaa30621fac02f5a534a", size = 3279245 }, + { url = "https://files.pythonhosted.org/packages/f0/55/ef77a85ee443ae05a9e9cba1c9f0dd9241eb42da2aeba1dc50f51154c81a/hf_xet-1.1.5-cp37-abi3-win_amd64.whl", hash = "sha256:73e167d9807d166596b4b2f0b585c6d5bd84a26dea32843665a8b58f6edba245", size = 2738931 }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784 }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 }, +] + +[[package]] +name = "huggingface-hub" +version = "0.33.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "hf-xet", marker = "platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fa/42/8a95c5632080ae312c0498744b2b852195e10b05a20b1be11c5141092f4c/huggingface_hub-0.33.2.tar.gz", hash = "sha256:84221defaec8fa09c090390cd68c78b88e3c4c2b7befba68d3dc5aacbc3c2c5f", size = 426637 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/f4/5f3f22e762ad1965f01122b42dae5bf0e009286e2dba601ce1d0dba72424/huggingface_hub-0.33.2-py3-none-any.whl", hash = "sha256:3749498bfa91e8cde2ddc2c1db92c79981f40e66434c20133b39e5928ac9bcc5", size = 515373 }, +] + +[[package]] +name = "humanfriendly" +version = "10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyreadline3", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cc/3f/2c29224acb2e2df4d2046e4c73ee2662023c58ff5b113c4c1adac0886c43/humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc", size = 360702 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477", size = 86794 }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, +] + +[[package]] +name = "jiter" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/9d/ae7ddb4b8ab3fb1b51faf4deb36cb48a4fbbd7cb36bad6a5fca4741306f7/jiter-0.10.0.tar.gz", hash = "sha256:07a7142c38aacc85194391108dc91b5b57093c978a9932bd86a36862759d9500", size = 162759 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/b0/279597e7a270e8d22623fea6c5d4eeac328e7d95c236ed51a2b884c54f70/jiter-0.10.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e0588107ec8e11b6f5ef0e0d656fb2803ac6cf94a96b2b9fc675c0e3ab5e8644", size = 311617 }, + { url = "https://files.pythonhosted.org/packages/91/e3/0916334936f356d605f54cc164af4060e3e7094364add445a3bc79335d46/jiter-0.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cafc4628b616dc32530c20ee53d71589816cf385dd9449633e910d596b1f5c8a", size = 318947 }, + { url = "https://files.pythonhosted.org/packages/6a/8e/fd94e8c02d0e94539b7d669a7ebbd2776e51f329bb2c84d4385e8063a2ad/jiter-0.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:520ef6d981172693786a49ff5b09eda72a42e539f14788124a07530f785c3ad6", size = 344618 }, + { url = "https://files.pythonhosted.org/packages/6f/b0/f9f0a2ec42c6e9c2e61c327824687f1e2415b767e1089c1d9135f43816bd/jiter-0.10.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:554dedfd05937f8fc45d17ebdf298fe7e0c77458232bcb73d9fbbf4c6455f5b3", size = 368829 }, + { url = "https://files.pythonhosted.org/packages/e8/57/5bbcd5331910595ad53b9fd0c610392ac68692176f05ae48d6ce5c852967/jiter-0.10.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5bc299da7789deacf95f64052d97f75c16d4fc8c4c214a22bf8d859a4288a1c2", size = 491034 }, + { url = "https://files.pythonhosted.org/packages/9b/be/c393df00e6e6e9e623a73551774449f2f23b6ec6a502a3297aeeece2c65a/jiter-0.10.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5161e201172de298a8a1baad95eb85db4fb90e902353b1f6a41d64ea64644e25", size = 388529 }, + { url = "https://files.pythonhosted.org/packages/42/3e/df2235c54d365434c7f150b986a6e35f41ebdc2f95acea3036d99613025d/jiter-0.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e2227db6ba93cb3e2bf67c87e594adde0609f146344e8207e8730364db27041", size = 350671 }, + { url = "https://files.pythonhosted.org/packages/c6/77/71b0b24cbcc28f55ab4dbfe029f9a5b73aeadaba677843fc6dc9ed2b1d0a/jiter-0.10.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15acb267ea5e2c64515574b06a8bf393fbfee6a50eb1673614aa45f4613c0cca", size = 390864 }, + { url = "https://files.pythonhosted.org/packages/6a/d3/ef774b6969b9b6178e1d1e7a89a3bd37d241f3d3ec5f8deb37bbd203714a/jiter-0.10.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:901b92f2e2947dc6dfcb52fd624453862e16665ea909a08398dde19c0731b7f4", size = 522989 }, + { url = "https://files.pythonhosted.org/packages/0c/41/9becdb1d8dd5d854142f45a9d71949ed7e87a8e312b0bede2de849388cb9/jiter-0.10.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d0cb9a125d5a3ec971a094a845eadde2db0de85b33c9f13eb94a0c63d463879e", size = 513495 }, + { url = "https://files.pythonhosted.org/packages/9c/36/3468e5a18238bdedae7c4d19461265b5e9b8e288d3f86cd89d00cbb48686/jiter-0.10.0-cp313-cp313-win32.whl", hash = "sha256:48a403277ad1ee208fb930bdf91745e4d2d6e47253eedc96e2559d1e6527006d", size = 211289 }, + { url = "https://files.pythonhosted.org/packages/7e/07/1c96b623128bcb913706e294adb5f768fb7baf8db5e1338ce7b4ee8c78ef/jiter-0.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:75f9eb72ecb640619c29bf714e78c9c46c9c4eaafd644bf78577ede459f330d4", size = 205074 }, + { url = "https://files.pythonhosted.org/packages/54/46/caa2c1342655f57d8f0f2519774c6d67132205909c65e9aa8255e1d7b4f4/jiter-0.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:28ed2a4c05a1f32ef0e1d24c2611330219fed727dae01789f4a335617634b1ca", size = 318225 }, + { url = "https://files.pythonhosted.org/packages/43/84/c7d44c75767e18946219ba2d703a5a32ab37b0bc21886a97bc6062e4da42/jiter-0.10.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14a4c418b1ec86a195f1ca69da8b23e8926c752b685af665ce30777233dfe070", size = 350235 }, + { url = "https://files.pythonhosted.org/packages/01/16/f5a0135ccd968b480daad0e6ab34b0c7c5ba3bc447e5088152696140dcb3/jiter-0.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d7bfed2fe1fe0e4dda6ef682cee888ba444b21e7a6553e03252e4feb6cf0adca", size = 207278 }, + { url = "https://files.pythonhosted.org/packages/1c/9b/1d646da42c3de6c2188fdaa15bce8ecb22b635904fc68be025e21249ba44/jiter-0.10.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:5e9251a5e83fab8d87799d3e1a46cb4b7f2919b895c6f4483629ed2446f66522", size = 310866 }, + { url = "https://files.pythonhosted.org/packages/ad/0e/26538b158e8a7c7987e94e7aeb2999e2e82b1f9d2e1f6e9874ddf71ebda0/jiter-0.10.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:023aa0204126fe5b87ccbcd75c8a0d0261b9abdbbf46d55e7ae9f8e22424eeb8", size = 318772 }, + { url = "https://files.pythonhosted.org/packages/7b/fb/d302893151caa1c2636d6574d213e4b34e31fd077af6050a9c5cbb42f6fb/jiter-0.10.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c189c4f1779c05f75fc17c0c1267594ed918996a231593a21a5ca5438445216", size = 344534 }, + { url = "https://files.pythonhosted.org/packages/01/d8/5780b64a149d74e347c5128d82176eb1e3241b1391ac07935693466d6219/jiter-0.10.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:15720084d90d1098ca0229352607cd68256c76991f6b374af96f36920eae13c4", size = 369087 }, + { url = "https://files.pythonhosted.org/packages/e8/5b/f235a1437445160e777544f3ade57544daf96ba7e96c1a5b24a6f7ac7004/jiter-0.10.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4f2fb68e5f1cfee30e2b2a09549a00683e0fde4c6a2ab88c94072fc33cb7426", size = 490694 }, + { url = "https://files.pythonhosted.org/packages/85/a9/9c3d4617caa2ff89cf61b41e83820c27ebb3f7b5fae8a72901e8cd6ff9be/jiter-0.10.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce541693355fc6da424c08b7edf39a2895f58d6ea17d92cc2b168d20907dee12", size = 388992 }, + { url = "https://files.pythonhosted.org/packages/68/b1/344fd14049ba5c94526540af7eb661871f9c54d5f5601ff41a959b9a0bbd/jiter-0.10.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31c50c40272e189d50006ad5c73883caabb73d4e9748a688b216e85a9a9ca3b9", size = 351723 }, + { url = "https://files.pythonhosted.org/packages/41/89/4c0e345041186f82a31aee7b9d4219a910df672b9fef26f129f0cda07a29/jiter-0.10.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fa3402a2ff9815960e0372a47b75c76979d74402448509ccd49a275fa983ef8a", size = 392215 }, + { url = "https://files.pythonhosted.org/packages/55/58/ee607863e18d3f895feb802154a2177d7e823a7103f000df182e0f718b38/jiter-0.10.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:1956f934dca32d7bb647ea21d06d93ca40868b505c228556d3373cbd255ce853", size = 522762 }, + { url = "https://files.pythonhosted.org/packages/15/d0/9123fb41825490d16929e73c212de9a42913d68324a8ce3c8476cae7ac9d/jiter-0.10.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:fcedb049bdfc555e261d6f65a6abe1d5ad68825b7202ccb9692636c70fcced86", size = 513427 }, + { url = "https://files.pythonhosted.org/packages/d8/b3/2bd02071c5a2430d0b70403a34411fc519c2f227da7b03da9ba6a956f931/jiter-0.10.0-cp314-cp314-win32.whl", hash = "sha256:ac509f7eccca54b2a29daeb516fb95b6f0bd0d0d8084efaf8ed5dfc7b9f0b357", size = 210127 }, + { url = "https://files.pythonhosted.org/packages/03/0c/5fe86614ea050c3ecd728ab4035534387cd41e7c1855ef6c031f1ca93e3f/jiter-0.10.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5ed975b83a2b8639356151cef5c0d597c68376fc4922b45d0eb384ac058cfa00", size = 318527 }, + { url = "https://files.pythonhosted.org/packages/b3/4a/4175a563579e884192ba6e81725fc0448b042024419be8d83aa8a80a3f44/jiter-0.10.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa96f2abba33dc77f79b4cf791840230375f9534e5fac927ccceb58c5e604a5", size = 354213 }, +] + +[[package]] +name = "livekit" +version = "1.0.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiofiles" }, + { name = "numpy" }, + { name = "protobuf" }, + { name = "types-protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c8/28/9eefa7ddf5dbe0664d9503b21274509c2edc97fba7001e2deec7b270a159/livekit-1.0.11.tar.gz", hash = "sha256:f3a38f6e67067b0807c79acd00e6877214aeaeb5628f84e44543103f7848ef90", size = 311200 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/aa/aa/52181d0d98bad649893683a63965954b87a50a3a07373fde8d884d206cdb/livekit-1.0.11-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:b0acbed93eb1d152f9a03bd576f94d9750335d5e4bba32cdc07dfb8ea5c9da0c", size = 10805274 }, + { url = "https://files.pythonhosted.org/packages/8a/a8/52d2bf123e3c219248a8e54d7e40f3a91de51945e9c51b909fa154f2a346/livekit-1.0.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:615e0a1ffc57c424a57331c9051229dce2d4c6760484ae7ee968d5ba1d2163bc", size = 9516631 }, + { url = "https://files.pythonhosted.org/packages/59/eb/9790883b38d6df2618176f2686aafa57ca0cd18d9c3dbe31bc840a730d6a/livekit-1.0.11-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:c9d21de6fc8cd722da8b3db960023da5f1719edf9236c44d5e756127d1afc6b9", size = 10561388 }, + { url = "https://files.pythonhosted.org/packages/30/8e/1543d99b66449f6719c0250d761e4a62c243fb547ac59bcc5f3f8ed35af6/livekit-1.0.11-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:5c6ef90fb038f87ec5f85d1cf59f9e5e2a01dc7ea8c2ebe6a83750d291f9ce69", size = 12056402 }, + { url = "https://files.pythonhosted.org/packages/fb/c4/0dbb85176a12f5451bc0d7c8d356f774f9f72435bb354b76e8b3342f5df0/livekit-1.0.11-py3-none-win_amd64.whl", hash = "sha256:e118954092b3a11e601d0a246614e554bc93ef0aa5f18ee2b63957f1fb5fe38d", size = 11418672 }, +] + +[[package]] +name = "livekit-agents" +version = "1.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "av" }, + { name = "click" }, + { name = "colorama" }, + { name = "docstring-parser" }, + { name = "eval-type-backport" }, + { name = "livekit" }, + { name = "livekit-api" }, + { name = "livekit-protocol" }, + { name = "nest-asyncio" }, + { name = "numpy" }, + { name = "protobuf" }, + { name = "psutil" }, + { name = "pydantic" }, + { name = "pyjwt" }, + { name = "sounddevice" }, + { name = "types-protobuf" }, + { name = "typing-extensions" }, + { name = "watchfiles" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b6/72/8220d9047c96d5bb194292ac5076dc04898830031afaf672aab6c5a62452/livekit_agents-1.1.5.tar.gz", hash = "sha256:e0f7850cbf99f91e2edaf4f1c8423ef526b56696f63fdc0efdde5e0469ba846b", size = 482216 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/08/38d3e9efc1a13eec17377a4e4b07944a4c60f94c23b5cd06d3d24ab92e7d/livekit_agents-1.1.5-py3-none-any.whl", hash = "sha256:cccb79fc9e4cbaede529bb83dcbd8e6ce531baeaaddbcdc541f6955fafa693d2", size = 540232 }, +] + +[package.optional-dependencies] +cartesia = [ + { name = "livekit-plugins-cartesia" }, +] +codecs = [ + { name = "av" }, + { name = "numpy" }, +] +deepgram = [ + { name = "livekit-plugins-deepgram" }, +] +images = [ + { name = "pillow" }, +] +openai = [ + { name = "livekit-plugins-openai" }, +] +silero = [ + { name = "livekit-plugins-silero" }, +] +turn-detector = [ + { name = "livekit-plugins-turn-detector" }, +] + +[[package]] +name = "livekit-api" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "livekit-protocol" }, + { name = "protobuf" }, + { name = "pyjwt" }, + { name = "types-protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/cf/2476359a6eab73fab0e58ca0053887a9344db3ba7caca5a29913e270a86f/livekit_api-1.0.3.tar.gz", hash = "sha256:24ffd1f0a92fd91f1d9977034e317951259d0ec9d053c6315c1562ba699d4cc8", size = 14940 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/b3/ff1c47a553d8773281aef531fb660e296e811176390b887901e1bcd351ab/livekit_api-1.0.3-py3-none-any.whl", hash = "sha256:38eee0ba44e9bba7eb95d53d29a6ac56b89e32e6f90dfa11d2f65463db8f06c5", size = 17413 }, +] + +[[package]] +name = "livekit-plugins-cartesia" +version = "1.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "livekit-agents" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dd/51/b1fd9501ea9e4c3fce21f7eb05f94ee3b3a37054109d69535294833f5113/livekit_plugins_cartesia-1.1.5.tar.gz", hash = "sha256:e415719fa408a971244769bb91c294e6b5047dc3a56a6cf052c30d174424ad3c", size = 9951 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/44/fd7d3831e19b92f19bb1c3373ec81fd51c6a81759db668fecd1e41327227/livekit_plugins_cartesia-1.1.5-py3-none-any.whl", hash = "sha256:3cb35455c5261f26b6f88c99b32778046abf84555fc4e1803e23ef7f83edefbb", size = 12453 }, +] + +[[package]] +name = "livekit-plugins-deepgram" +version = "1.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "livekit-agents", extra = ["codecs"] }, + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8d/f5/61c8567396523aac84de2381e573ebe0130b256d3261f5444f54728302c4/livekit_plugins_deepgram-1.1.5.tar.gz", hash = "sha256:b46f7e231eb6bddd852d0e6f9b73b534fab55cf3ed7ee66bbc67dfc49cff773b", size = 12956 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/3e/585795606da64d4f113e650c52c6926ee2eefdee4a317eea7d11af0eafa6/livekit_plugins_deepgram-1.1.5-py3-none-any.whl", hash = "sha256:bfe00c6df58c5da34a166fd2c97f4b8e69a26afebe56e59c8f2f995a550158d0", size = 15099 }, +] + +[[package]] +name = "livekit-plugins-openai" +version = "1.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "livekit-agents", extra = ["codecs", "images"] }, + { name = "openai", extra = ["realtime"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d8/9c/23ff7db39842bc82da62106fd90842c21d4d7f290639685570e42a63f255/livekit_plugins_openai-1.1.5.tar.gz", hash = "sha256:dbee556aa419d1b16ba88623f6ea81299447f4c93baab7aa02048834ab05eca5", size = 29288 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/4d/5c485051166fdf2fbbb0e633c2a09a13d91a187cdd727a50e1ccad862374/livekit_plugins_openai-1.1.5-py3-none-any.whl", hash = "sha256:c955d51c69c2406886af88335f0798cf695c43da4f35306e7fe8538c70ed1ab9", size = 34548 }, +] + +[[package]] +name = "livekit-plugins-silero" +version = "1.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "livekit-agents" }, + { name = "numpy" }, + { name = "onnxruntime" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/fe/a4a0fdc97f99c40b9b902457c828bc3d87b409e980d3b65d247d69e57b3a/livekit_plugins_silero-1.1.5.tar.gz", hash = "sha256:ac2dfeaa0c06bf7bcf73a76bd27e0214141ee997b8ab46e9cbaca8c220f19f5d", size = 1952538 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f0/76/3d2d4c9b3f835b2cde126c89629e1a2bde3657d66562ba55473b97f51d2a/livekit_plugins_silero-1.1.5-py3-none-any.whl", hash = "sha256:1853abdb24989906fda958533c16d1be413e2a0f40637a10b6dd7abb8aa6d6a0", size = 3898410 }, +] + +[[package]] +name = "livekit-plugins-turn-detector" +version = "1.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jinja2" }, + { name = "livekit-agents" }, + { name = "numpy" }, + { name = "onnxruntime" }, + { name = "transformers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b8/8a/fb3bcdea489f298c65cbb7c1ee9c17fef0c84d65a44f6321fa286018d542/livekit_plugins_turn_detector-1.1.5.tar.gz", hash = "sha256:92eb7216165aa0ea8402ea41d8dfa16ce97904f8f74a2d4d185d7f5dad830e4e", size = 7199 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/f8/1a366e2c21d8435d62ee2df251819872bfcdfc4713dd32dfbf53570878ed/livekit_plugins_turn_detector-1.1.5-py3-none-any.whl", hash = "sha256:e532f408813b42a070c2463ed0b3bdd6d8ee5609e272ac55e545c0aaf63ca538", size = 8758 }, +] + +[[package]] +name = "livekit-protocol" +version = "1.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, + { name = "types-protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/75/ab0439ba2ce999e6212b32250ff8f0c93b56b0b3e95859c92052784b9d66/livekit_protocol-1.0.4.tar.gz", hash = "sha256:370477f7af376bbeb59ae3b26a052c1b93375abf1a69eb71c50b78bf73c70194", size = 56503 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/eb/88bc73fa434cb9cba85c7011bc40289205eb45784931226c9357f130796b/livekit_protocol-1.0.4-py3-none-any.whl", hash = "sha256:8359b3c7a3ebe1aa89c15db9e0128c3e2e95f3a49796941b04acf0b44310c4a0", size = 66823 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 }, +] + +[[package]] +name = "multidict" +version = "6.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/2c/5dad12e82fbdf7470f29bff2171484bf07cb3b16ada60a6589af8f376440/multidict-6.6.3.tar.gz", hash = "sha256:798a9eb12dab0a6c2e29c1de6f3468af5cb2da6053a20dfa3344907eed0937cc", size = 101006 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/1d/0bebcbbb4f000751fbd09957257903d6e002943fc668d841a4cf2fb7f872/multidict-6.6.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:540d3c06d48507357a7d57721e5094b4f7093399a0106c211f33540fdc374d55", size = 75843 }, + { url = "https://files.pythonhosted.org/packages/07/8f/cbe241b0434cfe257f65c2b1bcf9e8d5fb52bc708c5061fb29b0fed22bdf/multidict-6.6.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9c19cea2a690f04247d43f366d03e4eb110a0dc4cd1bbeee4d445435428ed35b", size = 45053 }, + { url = "https://files.pythonhosted.org/packages/32/d2/0b3b23f9dbad5b270b22a3ac3ea73ed0a50ef2d9a390447061178ed6bdb8/multidict-6.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7af039820cfd00effec86bda5d8debef711a3e86a1d3772e85bea0f243a4bd65", size = 43273 }, + { url = "https://files.pythonhosted.org/packages/fd/fe/6eb68927e823999e3683bc49678eb20374ba9615097d085298fd5b386564/multidict-6.6.3-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:500b84f51654fdc3944e936f2922114349bf8fdcac77c3092b03449f0e5bc2b3", size = 237124 }, + { url = "https://files.pythonhosted.org/packages/e7/ab/320d8507e7726c460cb77117848b3834ea0d59e769f36fdae495f7669929/multidict-6.6.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3fc723ab8a5c5ed6c50418e9bfcd8e6dceba6c271cee6728a10a4ed8561520c", size = 256892 }, + { url = "https://files.pythonhosted.org/packages/76/60/38ee422db515ac69834e60142a1a69111ac96026e76e8e9aa347fd2e4591/multidict-6.6.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:94c47ea3ade005b5976789baaed66d4de4480d0a0bf31cef6edaa41c1e7b56a6", size = 240547 }, + { url = "https://files.pythonhosted.org/packages/27/fb/905224fde2dff042b030c27ad95a7ae744325cf54b890b443d30a789b80e/multidict-6.6.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dbc7cf464cc6d67e83e136c9f55726da3a30176f020a36ead246eceed87f1cd8", size = 266223 }, + { url = "https://files.pythonhosted.org/packages/76/35/dc38ab361051beae08d1a53965e3e1a418752fc5be4d3fb983c5582d8784/multidict-6.6.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:900eb9f9da25ada070f8ee4a23f884e0ee66fe4e1a38c3af644256a508ad81ca", size = 267262 }, + { url = "https://files.pythonhosted.org/packages/1f/a3/0a485b7f36e422421b17e2bbb5a81c1af10eac1d4476f2ff92927c730479/multidict-6.6.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7c6df517cf177da5d47ab15407143a89cd1a23f8b335f3a28d57e8b0a3dbb884", size = 254345 }, + { url = "https://files.pythonhosted.org/packages/b4/59/bcdd52c1dab7c0e0d75ff19cac751fbd5f850d1fc39172ce809a74aa9ea4/multidict-6.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4ef421045f13879e21c994b36e728d8e7d126c91a64b9185810ab51d474f27e7", size = 252248 }, + { url = "https://files.pythonhosted.org/packages/bb/a4/2d96aaa6eae8067ce108d4acee6f45ced5728beda55c0f02ae1072c730d1/multidict-6.6.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:6c1e61bb4f80895c081790b6b09fa49e13566df8fbff817da3f85b3a8192e36b", size = 250115 }, + { url = "https://files.pythonhosted.org/packages/25/d2/ed9f847fa5c7d0677d4f02ea2c163d5e48573de3f57bacf5670e43a5ffaa/multidict-6.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e5e8523bb12d7623cd8300dbd91b9e439a46a028cd078ca695eb66ba31adee3c", size = 249649 }, + { url = "https://files.pythonhosted.org/packages/1f/af/9155850372563fc550803d3f25373308aa70f59b52cff25854086ecb4a79/multidict-6.6.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:ef58340cc896219e4e653dade08fea5c55c6df41bcc68122e3be3e9d873d9a7b", size = 261203 }, + { url = "https://files.pythonhosted.org/packages/36/2f/c6a728f699896252cf309769089568a33c6439626648843f78743660709d/multidict-6.6.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fc9dc435ec8699e7b602b94fe0cd4703e69273a01cbc34409af29e7820f777f1", size = 258051 }, + { url = "https://files.pythonhosted.org/packages/d0/60/689880776d6b18fa2b70f6cc74ff87dd6c6b9b47bd9cf74c16fecfaa6ad9/multidict-6.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9e864486ef4ab07db5e9cb997bad2b681514158d6954dd1958dfb163b83d53e6", size = 249601 }, + { url = "https://files.pythonhosted.org/packages/75/5e/325b11f2222a549019cf2ef879c1f81f94a0d40ace3ef55cf529915ba6cc/multidict-6.6.3-cp313-cp313-win32.whl", hash = "sha256:5633a82fba8e841bc5c5c06b16e21529573cd654f67fd833650a215520a6210e", size = 41683 }, + { url = "https://files.pythonhosted.org/packages/b1/ad/cf46e73f5d6e3c775cabd2a05976547f3f18b39bee06260369a42501f053/multidict-6.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:e93089c1570a4ad54c3714a12c2cef549dc9d58e97bcded193d928649cab78e9", size = 45811 }, + { url = "https://files.pythonhosted.org/packages/c5/c9/2e3fe950db28fb7c62e1a5f46e1e38759b072e2089209bc033c2798bb5ec/multidict-6.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:c60b401f192e79caec61f166da9c924e9f8bc65548d4246842df91651e83d600", size = 43056 }, + { url = "https://files.pythonhosted.org/packages/3a/58/aaf8114cf34966e084a8cc9517771288adb53465188843d5a19862cb6dc3/multidict-6.6.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:02fd8f32d403a6ff13864b0851f1f523d4c988051eea0471d4f1fd8010f11134", size = 82811 }, + { url = "https://files.pythonhosted.org/packages/71/af/5402e7b58a1f5b987a07ad98f2501fdba2a4f4b4c30cf114e3ce8db64c87/multidict-6.6.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f3aa090106b1543f3f87b2041eef3c156c8da2aed90c63a2fbed62d875c49c37", size = 48304 }, + { url = "https://files.pythonhosted.org/packages/39/65/ab3c8cafe21adb45b24a50266fd747147dec7847425bc2a0f6934b3ae9ce/multidict-6.6.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e924fb978615a5e33ff644cc42e6aa241effcf4f3322c09d4f8cebde95aff5f8", size = 46775 }, + { url = "https://files.pythonhosted.org/packages/49/ba/9fcc1b332f67cc0c0c8079e263bfab6660f87fe4e28a35921771ff3eea0d/multidict-6.6.3-cp313-cp313t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:b9fe5a0e57c6dbd0e2ce81ca66272282c32cd11d31658ee9553849d91289e1c1", size = 229773 }, + { url = "https://files.pythonhosted.org/packages/a4/14/0145a251f555f7c754ce2dcbcd012939bbd1f34f066fa5d28a50e722a054/multidict-6.6.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b24576f208793ebae00280c59927c3b7c2a3b1655e443a25f753c4611bc1c373", size = 250083 }, + { url = "https://files.pythonhosted.org/packages/9e/d4/d5c0bd2bbb173b586c249a151a26d2fb3ec7d53c96e42091c9fef4e1f10c/multidict-6.6.3-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:135631cb6c58eac37d7ac0df380294fecdc026b28837fa07c02e459c7fb9c54e", size = 228980 }, + { url = "https://files.pythonhosted.org/packages/21/32/c9a2d8444a50ec48c4733ccc67254100c10e1c8ae8e40c7a2d2183b59b97/multidict-6.6.3-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:274d416b0df887aef98f19f21578653982cfb8a05b4e187d4a17103322eeaf8f", size = 257776 }, + { url = "https://files.pythonhosted.org/packages/68/d0/14fa1699f4ef629eae08ad6201c6b476098f5efb051b296f4c26be7a9fdf/multidict-6.6.3-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e252017a817fad7ce05cafbe5711ed40faeb580e63b16755a3a24e66fa1d87c0", size = 256882 }, + { url = "https://files.pythonhosted.org/packages/da/88/84a27570fbe303c65607d517a5f147cd2fc046c2d1da02b84b17b9bdc2aa/multidict-6.6.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e4cc8d848cd4fe1cdee28c13ea79ab0ed37fc2e89dd77bac86a2e7959a8c3bc", size = 247816 }, + { url = "https://files.pythonhosted.org/packages/1c/60/dca352a0c999ce96a5d8b8ee0b2b9f729dcad2e0b0c195f8286269a2074c/multidict-6.6.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9e236a7094b9c4c1b7585f6b9cca34b9d833cf079f7e4c49e6a4a6ec9bfdc68f", size = 245341 }, + { url = "https://files.pythonhosted.org/packages/50/ef/433fa3ed06028f03946f3993223dada70fb700f763f70c00079533c34578/multidict-6.6.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:e0cb0ab69915c55627c933f0b555a943d98ba71b4d1c57bc0d0a66e2567c7471", size = 235854 }, + { url = "https://files.pythonhosted.org/packages/1b/1f/487612ab56fbe35715320905215a57fede20de7db40a261759690dc80471/multidict-6.6.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:81ef2f64593aba09c5212a3d0f8c906a0d38d710a011f2f42759704d4557d3f2", size = 243432 }, + { url = "https://files.pythonhosted.org/packages/da/6f/ce8b79de16cd885c6f9052c96a3671373d00c59b3ee635ea93e6e81b8ccf/multidict-6.6.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:b9cbc60010de3562545fa198bfc6d3825df430ea96d2cc509c39bd71e2e7d648", size = 252731 }, + { url = "https://files.pythonhosted.org/packages/bb/fe/a2514a6aba78e5abefa1624ca85ae18f542d95ac5cde2e3815a9fbf369aa/multidict-6.6.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:70d974eaaa37211390cd02ef93b7e938de564bbffa866f0b08d07e5e65da783d", size = 247086 }, + { url = "https://files.pythonhosted.org/packages/8c/22/b788718d63bb3cce752d107a57c85fcd1a212c6c778628567c9713f9345a/multidict-6.6.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3713303e4a6663c6d01d648a68f2848701001f3390a030edaaf3fc949c90bf7c", size = 243338 }, + { url = "https://files.pythonhosted.org/packages/22/d6/fdb3d0670819f2228f3f7d9af613d5e652c15d170c83e5f1c94fbc55a25b/multidict-6.6.3-cp313-cp313t-win32.whl", hash = "sha256:639ecc9fe7cd73f2495f62c213e964843826f44505a3e5d82805aa85cac6f89e", size = 47812 }, + { url = "https://files.pythonhosted.org/packages/b6/d6/a9d2c808f2c489ad199723197419207ecbfbc1776f6e155e1ecea9c883aa/multidict-6.6.3-cp313-cp313t-win_amd64.whl", hash = "sha256:9f97e181f344a0ef3881b573d31de8542cc0dbc559ec68c8f8b5ce2c2e91646d", size = 53011 }, + { url = "https://files.pythonhosted.org/packages/f2/40/b68001cba8188dd267590a111f9661b6256debc327137667e832bf5d66e8/multidict-6.6.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ce8b7693da41a3c4fde5871c738a81490cea5496c671d74374c8ab889e1834fb", size = 45254 }, + { url = "https://files.pythonhosted.org/packages/d8/30/9aec301e9772b098c1f5c0ca0279237c9766d94b97802e9888010c64b0ed/multidict-6.6.3-py3-none-any.whl", hash = "sha256:8db10f29c7541fc5da4defd8cd697e1ca429db743fa716325f236079b96f775a", size = 12313 }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, +] + +[[package]] +name = "numpy" +version = "2.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/19/d7c972dfe90a353dbd3efbbe1d14a5951de80c99c9dc1b93cd998d51dc0f/numpy-2.3.1.tar.gz", hash = "sha256:1ec9ae20a4226da374362cca3c62cd753faf2f951440b0e3b98e93c235441d2b", size = 20390372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/bd/35ad97006d8abff8631293f8ea6adf07b0108ce6fec68da3c3fcca1197f2/numpy-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25a1992b0a3fdcdaec9f552ef10d8103186f5397ab45e2d25f8ac51b1a6b97e8", size = 20889381 }, + { url = "https://files.pythonhosted.org/packages/f1/4f/df5923874d8095b6062495b39729178eef4a922119cee32a12ee1bd4664c/numpy-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7dea630156d39b02a63c18f508f85010230409db5b2927ba59c8ba4ab3e8272e", size = 14152726 }, + { url = "https://files.pythonhosted.org/packages/8c/0f/a1f269b125806212a876f7efb049b06c6f8772cf0121139f97774cd95626/numpy-2.3.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:bada6058dd886061f10ea15f230ccf7dfff40572e99fef440a4a857c8728c9c0", size = 5105145 }, + { url = "https://files.pythonhosted.org/packages/6d/63/a7f7fd5f375b0361682f6ffbf686787e82b7bbd561268e4f30afad2bb3c0/numpy-2.3.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:a894f3816eb17b29e4783e5873f92faf55b710c2519e5c351767c51f79d8526d", size = 6639409 }, + { url = "https://files.pythonhosted.org/packages/bf/0d/1854a4121af895aab383f4aa233748f1df4671ef331d898e32426756a8a6/numpy-2.3.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:18703df6c4a4fee55fd3d6e5a253d01c5d33a295409b03fda0c86b3ca2ff41a1", size = 14257630 }, + { url = "https://files.pythonhosted.org/packages/50/30/af1b277b443f2fb08acf1c55ce9d68ee540043f158630d62cef012750f9f/numpy-2.3.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5902660491bd7a48b2ec16c23ccb9124b8abfd9583c5fdfa123fe6b421e03de1", size = 16627546 }, + { url = "https://files.pythonhosted.org/packages/6e/ec/3b68220c277e463095342d254c61be8144c31208db18d3fd8ef02712bcd6/numpy-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:36890eb9e9d2081137bd78d29050ba63b8dab95dff7912eadf1185e80074b2a0", size = 15562538 }, + { url = "https://files.pythonhosted.org/packages/77/2b/4014f2bcc4404484021c74d4c5ee8eb3de7e3f7ac75f06672f8dcf85140a/numpy-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a780033466159c2270531e2b8ac063704592a0bc62ec4a1b991c7c40705eb0e8", size = 18360327 }, + { url = "https://files.pythonhosted.org/packages/40/8d/2ddd6c9b30fcf920837b8672f6c65590c7d92e43084c25fc65edc22e93ca/numpy-2.3.1-cp313-cp313-win32.whl", hash = "sha256:39bff12c076812595c3a306f22bfe49919c5513aa1e0e70fac756a0be7c2a2b8", size = 6312330 }, + { url = "https://files.pythonhosted.org/packages/dd/c8/beaba449925988d415efccb45bf977ff8327a02f655090627318f6398c7b/numpy-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d5ee6eec45f08ce507a6570e06f2f879b374a552087a4179ea7838edbcbfa42", size = 12731565 }, + { url = "https://files.pythonhosted.org/packages/0b/c3/5c0c575d7ec78c1126998071f58facfc124006635da75b090805e642c62e/numpy-2.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:0c4d9e0a8368db90f93bd192bfa771ace63137c3488d198ee21dfb8e7771916e", size = 10190262 }, + { url = "https://files.pythonhosted.org/packages/ea/19/a029cd335cf72f79d2644dcfc22d90f09caa86265cbbde3b5702ccef6890/numpy-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b0b5397374f32ec0649dd98c652a1798192042e715df918c20672c62fb52d4b8", size = 20987593 }, + { url = "https://files.pythonhosted.org/packages/25/91/8ea8894406209107d9ce19b66314194675d31761fe2cb3c84fe2eeae2f37/numpy-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c5bdf2015ccfcee8253fb8be695516ac4457c743473a43290fd36eba6a1777eb", size = 14300523 }, + { url = "https://files.pythonhosted.org/packages/a6/7f/06187b0066eefc9e7ce77d5f2ddb4e314a55220ad62dd0bfc9f2c44bac14/numpy-2.3.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d70f20df7f08b90a2062c1f07737dd340adccf2068d0f1b9b3d56e2038979fee", size = 5227993 }, + { url = "https://files.pythonhosted.org/packages/e8/ec/a926c293c605fa75e9cfb09f1e4840098ed46d2edaa6e2152ee35dc01ed3/numpy-2.3.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:2fb86b7e58f9ac50e1e9dd1290154107e47d1eef23a0ae9145ded06ea606f992", size = 6736652 }, + { url = "https://files.pythonhosted.org/packages/e3/62/d68e52fb6fde5586650d4c0ce0b05ff3a48ad4df4ffd1b8866479d1d671d/numpy-2.3.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:23ab05b2d241f76cb883ce8b9a93a680752fbfcbd51c50eff0b88b979e471d8c", size = 14331561 }, + { url = "https://files.pythonhosted.org/packages/fc/ec/b74d3f2430960044bdad6900d9f5edc2dc0fb8bf5a0be0f65287bf2cbe27/numpy-2.3.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ce2ce9e5de4703a673e705183f64fd5da5bf36e7beddcb63a25ee2286e71ca48", size = 16693349 }, + { url = "https://files.pythonhosted.org/packages/0d/15/def96774b9d7eb198ddadfcbd20281b20ebb510580419197e225f5c55c3e/numpy-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c4913079974eeb5c16ccfd2b1f09354b8fed7e0d6f2cab933104a09a6419b1ee", size = 15642053 }, + { url = "https://files.pythonhosted.org/packages/2b/57/c3203974762a759540c6ae71d0ea2341c1fa41d84e4971a8e76d7141678a/numpy-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:010ce9b4f00d5c036053ca684c77441f2f2c934fd23bee058b4d6f196efd8280", size = 18434184 }, + { url = "https://files.pythonhosted.org/packages/22/8a/ccdf201457ed8ac6245187850aff4ca56a79edbea4829f4e9f14d46fa9a5/numpy-2.3.1-cp313-cp313t-win32.whl", hash = "sha256:6269b9edfe32912584ec496d91b00b6d34282ca1d07eb10e82dfc780907d6c2e", size = 6440678 }, + { url = "https://files.pythonhosted.org/packages/f1/7e/7f431d8bd8eb7e03d79294aed238b1b0b174b3148570d03a8a8a8f6a0da9/numpy-2.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:2a809637460e88a113e186e87f228d74ae2852a2e0c44de275263376f17b5bdc", size = 12870697 }, + { url = "https://files.pythonhosted.org/packages/d4/ca/af82bf0fad4c3e573c6930ed743b5308492ff19917c7caaf2f9b6f9e2e98/numpy-2.3.1-cp313-cp313t-win_arm64.whl", hash = "sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244", size = 10260376 }, +] + +[[package]] +name = "onnxruntime" +version = "1.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coloredlogs" }, + { name = "flatbuffers" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "protobuf" }, + { name = "sympy" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/65/5cb5018d5b0b7cba820d2c4a1d1b02d40df538d49138ba36a509457e4df6/onnxruntime-1.22.0-cp313-cp313-macosx_13_0_universal2.whl", hash = "sha256:fe7c051236aae16d8e2e9ffbfc1e115a0cc2450e873a9c4cb75c0cc96c1dae07", size = 34298715 }, + { url = "https://files.pythonhosted.org/packages/e1/89/1dfe1b368831d1256b90b95cb8d11da8ab769febd5c8833ec85ec1f79d21/onnxruntime-1.22.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6a6bbed10bc5e770c04d422893d3045b81acbbadc9fb759a2cd1ca00993da919", size = 14443266 }, + { url = "https://files.pythonhosted.org/packages/1e/70/342514ade3a33ad9dd505dcee96ff1f0e7be6d0e6e9c911fe0f1505abf42/onnxruntime-1.22.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fe45ee3e756300fccfd8d61b91129a121d3d80e9d38e01f03ff1295badc32b8", size = 16406707 }, + { url = "https://files.pythonhosted.org/packages/3e/89/2f64e250945fa87140fb917ba377d6d0e9122e029c8512f389a9b7f953f4/onnxruntime-1.22.0-cp313-cp313-win_amd64.whl", hash = "sha256:5a31d84ef82b4b05d794a4ce8ba37b0d9deb768fd580e36e17b39e0b4840253b", size = 12691777 }, + { url = "https://files.pythonhosted.org/packages/9f/48/d61d5f1ed098161edd88c56cbac49207d7b7b149e613d2cd7e33176c63b3/onnxruntime-1.22.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a2ac5bd9205d831541db4e508e586e764a74f14efdd3f89af7fd20e1bf4a1ed", size = 14454003 }, + { url = "https://files.pythonhosted.org/packages/c3/16/873b955beda7bada5b0d798d3a601b2ff210e44ad5169f6d405b93892103/onnxruntime-1.22.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64845709f9e8a2809e8e009bc4c8f73b788cee9c6619b7d9930344eae4c9cd36", size = 16427482 }, +] + +[[package]] +name = "openai" +version = "1.93.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "distro" }, + { name = "httpx" }, + { name = "jiter" }, + { name = "pydantic" }, + { name = "sniffio" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/d7/e91c6a9cf71726420cddf539852ee4c29176ebb716a702d9118d0409fd8e/openai-1.93.0.tar.gz", hash = "sha256:988f31ade95e1ff0585af11cc5a64510225e4f5cd392698c675d0a9265b8e337", size = 486573 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/46/a10d9df4673df56f71201d129ba1cb19eaff3366d08c8664d61a7df52e65/openai-1.93.0-py3-none-any.whl", hash = "sha256:3d746fe5498f0dd72e0d9ab706f26c91c0f646bf7459e5629af8ba7c9dbdf090", size = 755038 }, +] + +[package.optional-dependencies] +realtime = [ + { name = "websockets" }, +] + +[[package]] +name = "packaging" +version = "25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, +] + +[[package]] +name = "pillow" +version = "11.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328 }, + { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652 }, + { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443 }, + { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474 }, + { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038 }, + { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407 }, + { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094 }, + { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503 }, + { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574 }, + { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060 }, + { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407 }, + { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841 }, + { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450 }, + { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055 }, + { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110 }, + { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547 }, + { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554 }, + { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132 }, + { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001 }, + { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814 }, + { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124 }, + { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186 }, + { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546 }, + { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102 }, + { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803 }, + { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520 }, + { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116 }, + { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597 }, + { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246 }, + { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336 }, + { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699 }, + { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789 }, + { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386 }, + { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911 }, + { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383 }, + { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385 }, + { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129 }, + { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580 }, + { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860 }, + { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694 }, + { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888 }, + { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330 }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089 }, + { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206 }, + { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370 }, + { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500 }, + { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835 }, +] + +[[package]] +name = "propcache" +version = "0.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/16/43264e4a779dd8588c21a70f0709665ee8f611211bdd2c87d952cfa7c776/propcache-0.3.2.tar.gz", hash = "sha256:20d7d62e4e7ef05f221e0db2856b979540686342e7dd9973b815599c7057e168", size = 44139 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/d1/8c747fafa558c603c4ca19d8e20b288aa0c7cda74e9402f50f31eb65267e/propcache-0.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ca592ed634a73ca002967458187109265e980422116c0a107cf93d81f95af945", size = 71286 }, + { url = "https://files.pythonhosted.org/packages/61/99/d606cb7986b60d89c36de8a85d58764323b3a5ff07770a99d8e993b3fa73/propcache-0.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9ecb0aad4020e275652ba3975740f241bd12a61f1a784df044cf7477a02bc252", size = 42425 }, + { url = "https://files.pythonhosted.org/packages/8c/96/ef98f91bbb42b79e9bb82bdd348b255eb9d65f14dbbe3b1594644c4073f7/propcache-0.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7f08f1cc28bd2eade7a8a3d2954ccc673bb02062e3e7da09bc75d843386b342f", size = 41846 }, + { url = "https://files.pythonhosted.org/packages/5b/ad/3f0f9a705fb630d175146cd7b1d2bf5555c9beaed54e94132b21aac098a6/propcache-0.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1a342c834734edb4be5ecb1e9fb48cb64b1e2320fccbd8c54bf8da8f2a84c33", size = 208871 }, + { url = "https://files.pythonhosted.org/packages/3a/38/2085cda93d2c8b6ec3e92af2c89489a36a5886b712a34ab25de9fbca7992/propcache-0.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a544caaae1ac73f1fecfae70ded3e93728831affebd017d53449e3ac052ac1e", size = 215720 }, + { url = "https://files.pythonhosted.org/packages/61/c1/d72ea2dc83ac7f2c8e182786ab0fc2c7bd123a1ff9b7975bee671866fe5f/propcache-0.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:310d11aa44635298397db47a3ebce7db99a4cc4b9bbdfcf6c98a60c8d5261cf1", size = 215203 }, + { url = "https://files.pythonhosted.org/packages/af/81/b324c44ae60c56ef12007105f1460d5c304b0626ab0cc6b07c8f2a9aa0b8/propcache-0.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c1396592321ac83157ac03a2023aa6cc4a3cc3cfdecb71090054c09e5a7cce3", size = 206365 }, + { url = "https://files.pythonhosted.org/packages/09/73/88549128bb89e66d2aff242488f62869014ae092db63ccea53c1cc75a81d/propcache-0.3.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cabf5b5902272565e78197edb682017d21cf3b550ba0460ee473753f28d23c1", size = 196016 }, + { url = "https://files.pythonhosted.org/packages/b9/3f/3bdd14e737d145114a5eb83cb172903afba7242f67c5877f9909a20d948d/propcache-0.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0a2f2235ac46a7aa25bdeb03a9e7060f6ecbd213b1f9101c43b3090ffb971ef6", size = 205596 }, + { url = "https://files.pythonhosted.org/packages/0f/ca/2f4aa819c357d3107c3763d7ef42c03980f9ed5c48c82e01e25945d437c1/propcache-0.3.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:92b69e12e34869a6970fd2f3da91669899994b47c98f5d430b781c26f1d9f387", size = 200977 }, + { url = "https://files.pythonhosted.org/packages/cd/4a/e65276c7477533c59085251ae88505caf6831c0e85ff8b2e31ebcbb949b1/propcache-0.3.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:54e02207c79968ebbdffc169591009f4474dde3b4679e16634d34c9363ff56b4", size = 197220 }, + { url = "https://files.pythonhosted.org/packages/7c/54/fc7152e517cf5578278b242396ce4d4b36795423988ef39bb8cd5bf274c8/propcache-0.3.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4adfb44cb588001f68c5466579d3f1157ca07f7504fc91ec87862e2b8e556b88", size = 210642 }, + { url = "https://files.pythonhosted.org/packages/b9/80/abeb4a896d2767bf5f1ea7b92eb7be6a5330645bd7fb844049c0e4045d9d/propcache-0.3.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fd3e6019dc1261cd0291ee8919dd91fbab7b169bb76aeef6c716833a3f65d206", size = 212789 }, + { url = "https://files.pythonhosted.org/packages/b3/db/ea12a49aa7b2b6d68a5da8293dcf50068d48d088100ac016ad92a6a780e6/propcache-0.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4c181cad81158d71c41a2bce88edce078458e2dd5ffee7eddd6b05da85079f43", size = 205880 }, + { url = "https://files.pythonhosted.org/packages/d1/e5/9076a0bbbfb65d1198007059c65639dfd56266cf8e477a9707e4b1999ff4/propcache-0.3.2-cp313-cp313-win32.whl", hash = "sha256:8a08154613f2249519e549de2330cf8e2071c2887309a7b07fb56098f5170a02", size = 37220 }, + { url = "https://files.pythonhosted.org/packages/d3/f5/b369e026b09a26cd77aa88d8fffd69141d2ae00a2abaaf5380d2603f4b7f/propcache-0.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e41671f1594fc4ab0a6dec1351864713cb3a279910ae8b58f884a88a0a632c05", size = 40678 }, + { url = "https://files.pythonhosted.org/packages/a4/3a/6ece377b55544941a08d03581c7bc400a3c8cd3c2865900a68d5de79e21f/propcache-0.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:9a3cf035bbaf035f109987d9d55dc90e4b0e36e04bbbb95af3055ef17194057b", size = 76560 }, + { url = "https://files.pythonhosted.org/packages/0c/da/64a2bb16418740fa634b0e9c3d29edff1db07f56d3546ca2d86ddf0305e1/propcache-0.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:156c03d07dc1323d8dacaa221fbe028c5c70d16709cdd63502778e6c3ccca1b0", size = 44676 }, + { url = "https://files.pythonhosted.org/packages/36/7b/f025e06ea51cb72c52fb87e9b395cced02786610b60a3ed51da8af017170/propcache-0.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74413c0ba02ba86f55cf60d18daab219f7e531620c15f1e23d95563f505efe7e", size = 44701 }, + { url = "https://files.pythonhosted.org/packages/a4/00/faa1b1b7c3b74fc277f8642f32a4c72ba1d7b2de36d7cdfb676db7f4303e/propcache-0.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f066b437bb3fa39c58ff97ab2ca351db465157d68ed0440abecb21715eb24b28", size = 276934 }, + { url = "https://files.pythonhosted.org/packages/74/ab/935beb6f1756e0476a4d5938ff44bf0d13a055fed880caf93859b4f1baf4/propcache-0.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1304b085c83067914721e7e9d9917d41ad87696bf70f0bc7dee450e9c71ad0a", size = 278316 }, + { url = "https://files.pythonhosted.org/packages/f8/9d/994a5c1ce4389610838d1caec74bdf0e98b306c70314d46dbe4fcf21a3e2/propcache-0.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab50cef01b372763a13333b4e54021bdcb291fc9a8e2ccb9c2df98be51bcde6c", size = 282619 }, + { url = "https://files.pythonhosted.org/packages/2b/00/a10afce3d1ed0287cef2e09506d3be9822513f2c1e96457ee369adb9a6cd/propcache-0.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad3b2a085ec259ad2c2842666b2a0a49dea8463579c606426128925af1ed725", size = 265896 }, + { url = "https://files.pythonhosted.org/packages/2e/a8/2aa6716ffa566ca57c749edb909ad27884680887d68517e4be41b02299f3/propcache-0.3.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:261fa020c1c14deafd54c76b014956e2f86991af198c51139faf41c4d5e83892", size = 252111 }, + { url = "https://files.pythonhosted.org/packages/36/4f/345ca9183b85ac29c8694b0941f7484bf419c7f0fea2d1e386b4f7893eed/propcache-0.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:46d7f8aa79c927e5f987ee3a80205c987717d3659f035c85cf0c3680526bdb44", size = 268334 }, + { url = "https://files.pythonhosted.org/packages/3e/ca/fcd54f78b59e3f97b3b9715501e3147f5340167733d27db423aa321e7148/propcache-0.3.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:6d8f3f0eebf73e3c0ff0e7853f68be638b4043c65a70517bb575eff54edd8dbe", size = 255026 }, + { url = "https://files.pythonhosted.org/packages/8b/95/8e6a6bbbd78ac89c30c225210a5c687790e532ba4088afb8c0445b77ef37/propcache-0.3.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:03c89c1b14a5452cf15403e291c0ccd7751d5b9736ecb2c5bab977ad6c5bcd81", size = 250724 }, + { url = "https://files.pythonhosted.org/packages/ee/b0/0dd03616142baba28e8b2d14ce5df6631b4673850a3d4f9c0f9dd714a404/propcache-0.3.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:0cc17efde71e12bbaad086d679ce575268d70bc123a5a71ea7ad76f70ba30bba", size = 268868 }, + { url = "https://files.pythonhosted.org/packages/c5/98/2c12407a7e4fbacd94ddd32f3b1e3d5231e77c30ef7162b12a60e2dd5ce3/propcache-0.3.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:acdf05d00696bc0447e278bb53cb04ca72354e562cf88ea6f9107df8e7fd9770", size = 271322 }, + { url = "https://files.pythonhosted.org/packages/35/91/9cb56efbb428b006bb85db28591e40b7736847b8331d43fe335acf95f6c8/propcache-0.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4445542398bd0b5d32df908031cb1b30d43ac848e20470a878b770ec2dcc6330", size = 265778 }, + { url = "https://files.pythonhosted.org/packages/9a/4c/b0fe775a2bdd01e176b14b574be679d84fc83958335790f7c9a686c1f468/propcache-0.3.2-cp313-cp313t-win32.whl", hash = "sha256:f86e5d7cd03afb3a1db8e9f9f6eff15794e79e791350ac48a8c924e6f439f394", size = 41175 }, + { url = "https://files.pythonhosted.org/packages/a4/ff/47f08595e3d9b5e149c150f88d9714574f1a7cbd89fe2817158a952674bf/propcache-0.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9704bedf6e7cbe3c65eca4379a9b53ee6a83749f047808cbb5044d40d7d72198", size = 44857 }, + { url = "https://files.pythonhosted.org/packages/cc/35/cc0aaecf278bb4575b8555f2b137de5ab821595ddae9da9d3cd1da4072c7/propcache-0.3.2-py3-none-any.whl", hash = "sha256:98f1ec44fb675f5052cccc8e609c46ed23a35a1cfd18545ad4e29002d858a43f", size = 12663 }, +] + +[[package]] +name = "protobuf" +version = "6.31.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/f3/b9655a711b32c19720253f6f06326faf90580834e2e83f840472d752bc8b/protobuf-6.31.1.tar.gz", hash = "sha256:d8cac4c982f0b957a4dc73a80e2ea24fab08e679c0de9deb835f4a12d69aca9a", size = 441797 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/6f/6ab8e4bf962fd5570d3deaa2d5c38f0a363f57b4501047b5ebeb83ab1125/protobuf-6.31.1-cp310-abi3-win32.whl", hash = "sha256:7fa17d5a29c2e04b7d90e5e32388b8bfd0e7107cd8e616feef7ed3fa6bdab5c9", size = 423603 }, + { url = "https://files.pythonhosted.org/packages/44/3a/b15c4347dd4bf3a1b0ee882f384623e2063bb5cf9fa9d57990a4f7df2fb6/protobuf-6.31.1-cp310-abi3-win_amd64.whl", hash = "sha256:426f59d2964864a1a366254fa703b8632dcec0790d8862d30034d8245e1cd447", size = 435283 }, + { url = "https://files.pythonhosted.org/packages/6a/c9/b9689a2a250264a84e66c46d8862ba788ee7a641cdca39bccf64f59284b7/protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:6f1227473dc43d44ed644425268eb7c2e488ae245d51c6866d19fe158e207402", size = 425604 }, + { url = "https://files.pythonhosted.org/packages/76/a1/7a5a94032c83375e4fe7e7f56e3976ea6ac90c5e85fac8576409e25c39c3/protobuf-6.31.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:a40fc12b84c154884d7d4c4ebd675d5b3b5283e155f324049ae396b95ddebc39", size = 322115 }, + { url = "https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4ee898bf66f7a8b0bd21bce523814e6fbd8c6add948045ce958b73af7e8878c6", size = 321070 }, + { url = "https://files.pythonhosted.org/packages/f7/af/ab3c51ab7507a7325e98ffe691d9495ee3d3aa5f589afad65ec920d39821/protobuf-6.31.1-py3-none-any.whl", hash = "sha256:720a6c7e6b77288b85063569baae8536671b39f15cc22037ec7045658d80489e", size = 168724 }, +] + +[[package]] +name = "psutil" +version = "7.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051 }, + { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535 }, + { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004 }, + { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986 }, + { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544 }, + { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053 }, + { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885 }, +] + +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, +] + +[[package]] +name = "pydantic" +version = "2.11.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782 }, +] + +[[package]] +name = "pydantic-core" +version = "2.33.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688 }, + { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808 }, + { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580 }, + { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859 }, + { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810 }, + { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498 }, + { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611 }, + { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924 }, + { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196 }, + { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389 }, + { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223 }, + { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473 }, + { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269 }, + { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921 }, + { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162 }, + { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560 }, + { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777 }, +] + +[[package]] +name = "pyjwt" +version = "2.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997 }, +] + +[[package]] +name = "pyreadline3" +version = "3.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/49/4cea918a08f02817aabae639e3d0ac046fef9f9180518a3ad394e22da148/pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7", size = 99839 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6", size = 83178 }, +] + +[[package]] +name = "python-dotenv" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/b0/4bc07ccd3572a2f9df7e6782f52b0c6c90dcbb803ac4a167702d7d0dfe1e/python_dotenv-1.1.1.tar.gz", hash = "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab", size = 41978 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc", size = 20556 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +] + +[[package]] +name = "regex" +version = "2024.11.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/73/bcb0e36614601016552fa9344544a3a2ae1809dc1401b100eab02e772e1f/regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", size = 483525 }, + { url = "https://files.pythonhosted.org/packages/0f/3f/f1a082a46b31e25291d830b369b6b0c5576a6f7fb89d3053a354c24b8a83/regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", size = 288324 }, + { url = "https://files.pythonhosted.org/packages/09/c9/4e68181a4a652fb3ef5099e077faf4fd2a694ea6e0f806a7737aff9e758a/regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", size = 284617 }, + { url = "https://files.pythonhosted.org/packages/fc/fd/37868b75eaf63843165f1d2122ca6cb94bfc0271e4428cf58c0616786dce/regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0", size = 795023 }, + { url = "https://files.pythonhosted.org/packages/c4/7c/d4cd9c528502a3dedb5c13c146e7a7a539a3853dc20209c8e75d9ba9d1b2/regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7", size = 833072 }, + { url = "https://files.pythonhosted.org/packages/4f/db/46f563a08f969159c5a0f0e722260568425363bea43bb7ae370becb66a67/regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7", size = 823130 }, + { url = "https://files.pythonhosted.org/packages/db/60/1eeca2074f5b87df394fccaa432ae3fc06c9c9bfa97c5051aed70e6e00c2/regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c", size = 796857 }, + { url = "https://files.pythonhosted.org/packages/10/db/ac718a08fcee981554d2f7bb8402f1faa7e868c1345c16ab1ebec54b0d7b/regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3", size = 784006 }, + { url = "https://files.pythonhosted.org/packages/c2/41/7da3fe70216cea93144bf12da2b87367590bcf07db97604edeea55dac9ad/regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07", size = 781650 }, + { url = "https://files.pythonhosted.org/packages/a7/d5/880921ee4eec393a4752e6ab9f0fe28009435417c3102fc413f3fe81c4e5/regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e", size = 789545 }, + { url = "https://files.pythonhosted.org/packages/dc/96/53770115e507081122beca8899ab7f5ae28ae790bfcc82b5e38976df6a77/regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6", size = 853045 }, + { url = "https://files.pythonhosted.org/packages/31/d3/1372add5251cc2d44b451bd94f43b2ec78e15a6e82bff6a290ef9fd8f00a/regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4", size = 860182 }, + { url = "https://files.pythonhosted.org/packages/ed/e3/c446a64984ea9f69982ba1a69d4658d5014bc7a0ea468a07e1a1265db6e2/regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d", size = 787733 }, + { url = "https://files.pythonhosted.org/packages/2b/f1/e40c8373e3480e4f29f2692bd21b3e05f296d3afebc7e5dcf21b9756ca1c/regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", size = 262122 }, + { url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", size = 273545 }, +] + +[[package]] +name = "requests" +version = "2.32.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847 }, +] + +[[package]] +name = "safetensors" +version = "0.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/71/7e/2d5d6ee7b40c0682315367ec7475693d110f512922d582fef1bd4a63adc3/safetensors-0.5.3.tar.gz", hash = "sha256:b6b0d6ecacec39a4fdd99cc19f4576f5219ce858e6fd8dbe7609df0b8dc56965", size = 67210 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/ae/88f6c49dbd0cc4da0e08610019a3c78a7d390879a919411a410a1876d03a/safetensors-0.5.3-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bd20eb133db8ed15b40110b7c00c6df51655a2998132193de2f75f72d99c7073", size = 436917 }, + { url = "https://files.pythonhosted.org/packages/b8/3b/11f1b4a2f5d2ab7da34ecc062b0bc301f2be024d110a6466726bec8c055c/safetensors-0.5.3-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:21d01c14ff6c415c485616b8b0bf961c46b3b343ca59110d38d744e577f9cce7", size = 418419 }, + { url = "https://files.pythonhosted.org/packages/5d/9a/add3e6fef267658075c5a41573c26d42d80c935cdc992384dfae435feaef/safetensors-0.5.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11bce6164887cd491ca75c2326a113ba934be596e22b28b1742ce27b1d076467", size = 459493 }, + { url = "https://files.pythonhosted.org/packages/df/5c/bf2cae92222513cc23b3ff85c4a1bb2811a2c3583ac0f8e8d502751de934/safetensors-0.5.3-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4a243be3590bc3301c821da7a18d87224ef35cbd3e5f5727e4e0728b8172411e", size = 472400 }, + { url = "https://files.pythonhosted.org/packages/58/11/7456afb740bd45782d0f4c8e8e1bb9e572f1bf82899fb6ace58af47b4282/safetensors-0.5.3-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8bd84b12b1670a6f8e50f01e28156422a2bc07fb16fc4e98bded13039d688a0d", size = 522891 }, + { url = "https://files.pythonhosted.org/packages/57/3d/fe73a9d2ace487e7285f6e157afee2383bd1ddb911b7cb44a55cf812eae3/safetensors-0.5.3-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:391ac8cab7c829452175f871fcaf414aa1e292b5448bd02620f675a7f3e7abb9", size = 537694 }, + { url = "https://files.pythonhosted.org/packages/a6/f8/dae3421624fcc87a89d42e1898a798bc7ff72c61f38973a65d60df8f124c/safetensors-0.5.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cead1fa41fc54b1e61089fa57452e8834f798cb1dc7a09ba3524f1eb08e0317a", size = 471642 }, + { url = "https://files.pythonhosted.org/packages/ce/20/1fbe16f9b815f6c5a672f5b760951e20e17e43f67f231428f871909a37f6/safetensors-0.5.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1077f3e94182d72618357b04b5ced540ceb71c8a813d3319f1aba448e68a770d", size = 502241 }, + { url = "https://files.pythonhosted.org/packages/5f/18/8e108846b506487aa4629fe4116b27db65c3dde922de2c8e0cc1133f3f29/safetensors-0.5.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:799021e78287bac619c7b3f3606730a22da4cda27759ddf55d37c8db7511c74b", size = 638001 }, + { url = "https://files.pythonhosted.org/packages/82/5a/c116111d8291af6c8c8a8b40628fe833b9db97d8141c2a82359d14d9e078/safetensors-0.5.3-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:df26da01aaac504334644e1b7642fa000bfec820e7cef83aeac4e355e03195ff", size = 734013 }, + { url = "https://files.pythonhosted.org/packages/7d/ff/41fcc4d3b7de837963622e8610d998710705bbde9a8a17221d85e5d0baad/safetensors-0.5.3-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:32c3ef2d7af8b9f52ff685ed0bc43913cdcde135089ae322ee576de93eae5135", size = 670687 }, + { url = "https://files.pythonhosted.org/packages/40/ad/2b113098e69c985a3d8fbda4b902778eae4a35b7d5188859b4a63d30c161/safetensors-0.5.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:37f1521be045e56fc2b54c606d4455573e717b2d887c579ee1dbba5f868ece04", size = 643147 }, + { url = "https://files.pythonhosted.org/packages/0a/0c/95aeb51d4246bd9a3242d3d8349c1112b4ee7611a4b40f0c5c93b05f001d/safetensors-0.5.3-cp38-abi3-win32.whl", hash = "sha256:cfc0ec0846dcf6763b0ed3d1846ff36008c6e7290683b61616c4b040f6a54ace", size = 296677 }, + { url = "https://files.pythonhosted.org/packages/69/e2/b011c38e5394c4c18fb5500778a55ec43ad6106126e74723ffaee246f56e/safetensors-0.5.3-cp38-abi3-win_amd64.whl", hash = "sha256:836cbbc320b47e80acd40e44c8682db0e8ad7123209f69b093def21ec7cafd11", size = 308878 }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 }, +] + +[[package]] +name = "sounddevice" +version = "0.5.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/a6/91e9f08ed37c7c9f56b5227c6aea7f2ae63ba2d59520eefb24e82cbdd589/sounddevice-0.5.2.tar.gz", hash = "sha256:c634d51bd4e922d6f0fa5e1a975cc897c947f61d31da9f79ba7ea34dff448b49", size = 53150 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/2d/582738fc01352a5bc20acac9221e58538365cecb3bb264838f66419df219/sounddevice-0.5.2-py3-none-any.whl", hash = "sha256:82375859fac2e73295a4ab3fc60bd4782743157adc339561c1f1142af472f505", size = 32450 }, + { url = "https://files.pythonhosted.org/packages/3f/6f/e3dd751face4fcb5be25e8abba22f25d8e6457ebd7e9ed79068b768dc0e5/sounddevice-0.5.2-py3-none-macosx_10_6_x86_64.macosx_10_6_universal2.whl", hash = "sha256:943f27e66037d41435bdd0293454072cdf657b594c9cde63cd01ee3daaac7ab3", size = 108088 }, + { url = "https://files.pythonhosted.org/packages/45/0b/bfad79af0b380aa7c0bfe73e4b03e0af45354a48ad62549489bd7696c5b0/sounddevice-0.5.2-py3-none-win32.whl", hash = "sha256:3a113ce614a2c557f14737cb20123ae6298c91fc9301eb014ada0cba6d248c5f", size = 312665 }, + { url = "https://files.pythonhosted.org/packages/e1/3e/61d88e6b0a7383127cdc779195cb9d83ebcf11d39bc961de5777e457075e/sounddevice-0.5.2-py3-none-win_amd64.whl", hash = "sha256:e18944b767d2dac3771a7771bdd7ff7d3acd7d334e72c4bedab17d1aed5dbc22", size = 363808 }, +] + +[[package]] +name = "sympy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353 }, +] + +[[package]] +name = "tokenizers" +version = "0.21.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/2d/b0fce2b8201635f60e8c95990080f58461cc9ca3d5026de2e900f38a7f21/tokenizers-0.21.2.tar.gz", hash = "sha256:fdc7cffde3e2113ba0e6cc7318c40e3438a4d74bbc62bf04bcc63bdfb082ac77", size = 351545 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/cc/2936e2d45ceb130a21d929743f1e9897514691bec123203e10837972296f/tokenizers-0.21.2-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:342b5dfb75009f2255ab8dec0041287260fed5ce00c323eb6bab639066fef8ec", size = 2875206 }, + { url = "https://files.pythonhosted.org/packages/6c/e6/33f41f2cc7861faeba8988e7a77601407bf1d9d28fc79c5903f8f77df587/tokenizers-0.21.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:126df3205d6f3a93fea80c7a8a266a78c1bd8dd2fe043386bafdd7736a23e45f", size = 2732655 }, + { url = "https://files.pythonhosted.org/packages/33/2b/1791eb329c07122a75b01035b1a3aa22ad139f3ce0ece1b059b506d9d9de/tokenizers-0.21.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a32cd81be21168bd0d6a0f0962d60177c447a1aa1b1e48fa6ec9fc728ee0b12", size = 3019202 }, + { url = "https://files.pythonhosted.org/packages/05/15/fd2d8104faa9f86ac68748e6f7ece0b5eb7983c7efc3a2c197cb98c99030/tokenizers-0.21.2-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8bd8999538c405133c2ab999b83b17c08b7fc1b48c1ada2469964605a709ef91", size = 2934539 }, + { url = "https://files.pythonhosted.org/packages/a5/2e/53e8fd053e1f3ffbe579ca5f9546f35ac67cf0039ed357ad7ec57f5f5af0/tokenizers-0.21.2-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e9944e61239b083a41cf8fc42802f855e1dca0f499196df37a8ce219abac6eb", size = 3248665 }, + { url = "https://files.pythonhosted.org/packages/00/15/79713359f4037aa8f4d1f06ffca35312ac83629da062670e8830917e2153/tokenizers-0.21.2-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:514cd43045c5d546f01142ff9c79a96ea69e4b5cda09e3027708cb2e6d5762ab", size = 3451305 }, + { url = "https://files.pythonhosted.org/packages/38/5f/959f3a8756fc9396aeb704292777b84f02a5c6f25c3fc3ba7530db5feb2c/tokenizers-0.21.2-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1b9405822527ec1e0f7d8d2fdb287a5730c3a6518189c968254a8441b21faae", size = 3214757 }, + { url = "https://files.pythonhosted.org/packages/c5/74/f41a432a0733f61f3d21b288de6dfa78f7acff309c6f0f323b2833e9189f/tokenizers-0.21.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fed9a4d51c395103ad24f8e7eb976811c57fbec2af9f133df471afcd922e5020", size = 3121887 }, + { url = "https://files.pythonhosted.org/packages/3c/6a/bc220a11a17e5d07b0dfb3b5c628621d4dcc084bccd27cfaead659963016/tokenizers-0.21.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2c41862df3d873665ec78b6be36fcc30a26e3d4902e9dd8608ed61d49a48bc19", size = 9091965 }, + { url = "https://files.pythonhosted.org/packages/6c/bd/ac386d79c4ef20dc6f39c4706640c24823dca7ebb6f703bfe6b5f0292d88/tokenizers-0.21.2-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:ed21dc7e624e4220e21758b2e62893be7101453525e3d23264081c9ef9a6d00d", size = 9053372 }, + { url = "https://files.pythonhosted.org/packages/63/7b/5440bf203b2a5358f074408f7f9c42884849cd9972879e10ee6b7a8c3b3d/tokenizers-0.21.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:0e73770507e65a0e0e2a1affd6b03c36e3bc4377bd10c9ccf51a82c77c0fe365", size = 9298632 }, + { url = "https://files.pythonhosted.org/packages/a4/d2/faa1acac3f96a7427866e94ed4289949b2524f0c1878512516567d80563c/tokenizers-0.21.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:106746e8aa9014a12109e58d540ad5465b4c183768ea96c03cbc24c44d329958", size = 9470074 }, + { url = "https://files.pythonhosted.org/packages/d8/a5/896e1ef0707212745ae9f37e84c7d50269411aef2e9ccd0de63623feecdf/tokenizers-0.21.2-cp39-abi3-win32.whl", hash = "sha256:cabda5a6d15d620b6dfe711e1af52205266d05b379ea85a8a301b3593c60e962", size = 2330115 }, + { url = "https://files.pythonhosted.org/packages/13/c3/cc2755ee10be859c4338c962a35b9a663788c0c0b50c0bdd8078fb6870cf/tokenizers-0.21.2-cp39-abi3-win_amd64.whl", hash = "sha256:58747bb898acdb1007f37a7bbe614346e98dc28708ffb66a3fd50ce169ac6c98", size = 2509918 }, +] + +[[package]] +name = "tqdm" +version = "4.67.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, +] + +[[package]] +name = "transformers" +version = "4.53.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "huggingface-hub" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "regex" }, + { name = "requests" }, + { name = "safetensors" }, + { name = "tokenizers" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e8/40/f2d2c3bcf5c6135027cab0fd7db52f6149a1c23acc4e45f914c43d362386/transformers-4.53.0.tar.gz", hash = "sha256:f89520011b4a73066fdc7aabfa158317c3934a22e3cd652d7ffbc512c4063841", size = 9177265 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/0c/68d03a38f6ab2ba2b2829eb11b334610dd236e7926787f7656001b68e1f2/transformers-4.53.0-py3-none-any.whl", hash = "sha256:7d8039ff032c01a2d7f8a8fe0066620367003275f023815a966e62203f9f5dd7", size = 10821970 }, +] + +[[package]] +name = "types-protobuf" +version = "4.25.0.20240417" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/76/21/757620113af23233496c04b8a66e0201e78695495b1db8e676672608588b/types-protobuf-4.25.0.20240417.tar.gz", hash = "sha256:c34eff17b9b3a0adb6830622f0f302484e4c089f533a46e3f147568313544352", size = 53340 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/78/6f0351f80a682c4005775c7e1fd2b17235b88d87c85ef59214bd1f60ff60/types_protobuf-4.25.0.20240417-py3-none-any.whl", hash = "sha256:e9b613227c2127e3d4881d75d93c93b4d6fd97b5f6a099a0b654a05351c8685d", size = 67896 }, +] + +[[package]] +name = "typing-extensions" +version = "4.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/bc/51647cd02527e87d05cb083ccc402f93e441606ff1f01739a62c8ad09ba5/typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", size = 107423 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/e0/552843e0d356fbb5256d21449fa957fa4eff3bbc135a74a691ee70c7c5da/typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af", size = 43839 }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552 }, +] + +[[package]] +name = "urllib3" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795 }, +] + +[[package]] +name = "watchfiles" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2a/9a/d451fcc97d029f5812e898fd30a53fd8c15c7bbd058fd75cfc6beb9bd761/watchfiles-1.1.0.tar.gz", hash = "sha256:693ed7ec72cbfcee399e92c895362b6e66d63dac6b91e2c11ae03d10d503e575", size = 94406 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/42/fae874df96595556a9089ade83be34a2e04f0f11eb53a8dbf8a8a5e562b4/watchfiles-1.1.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5007f860c7f1f8df471e4e04aaa8c43673429047d63205d1630880f7637bca30", size = 402004 }, + { url = "https://files.pythonhosted.org/packages/fa/55/a77e533e59c3003d9803c09c44c3651224067cbe7fb5d574ddbaa31e11ca/watchfiles-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:20ecc8abbd957046f1fe9562757903f5eaf57c3bce70929fda6c7711bb58074a", size = 393671 }, + { url = "https://files.pythonhosted.org/packages/05/68/b0afb3f79c8e832e6571022611adbdc36e35a44e14f129ba09709aa4bb7a/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2f0498b7d2a3c072766dba3274fe22a183dbea1f99d188f1c6c72209a1063dc", size = 449772 }, + { url = "https://files.pythonhosted.org/packages/ff/05/46dd1f6879bc40e1e74c6c39a1b9ab9e790bf1f5a2fe6c08b463d9a807f4/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:239736577e848678e13b201bba14e89718f5c2133dfd6b1f7846fa1b58a8532b", size = 456789 }, + { url = "https://files.pythonhosted.org/packages/8b/ca/0eeb2c06227ca7f12e50a47a3679df0cd1ba487ea19cf844a905920f8e95/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eff4b8d89f444f7e49136dc695599a591ff769300734446c0a86cba2eb2f9895", size = 482551 }, + { url = "https://files.pythonhosted.org/packages/31/47/2cecbd8694095647406645f822781008cc524320466ea393f55fe70eed3b/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12b0a02a91762c08f7264e2e79542f76870c3040bbc847fb67410ab81474932a", size = 597420 }, + { url = "https://files.pythonhosted.org/packages/d9/7e/82abc4240e0806846548559d70f0b1a6dfdca75c1b4f9fa62b504ae9b083/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29e7bc2eee15cbb339c68445959108803dc14ee0c7b4eea556400131a8de462b", size = 477950 }, + { url = "https://files.pythonhosted.org/packages/25/0d/4d564798a49bf5482a4fa9416dea6b6c0733a3b5700cb8a5a503c4b15853/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9481174d3ed982e269c090f780122fb59cee6c3796f74efe74e70f7780ed94c", size = 451706 }, + { url = "https://files.pythonhosted.org/packages/81/b5/5516cf46b033192d544102ea07c65b6f770f10ed1d0a6d388f5d3874f6e4/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:80f811146831c8c86ab17b640801c25dc0a88c630e855e2bef3568f30434d52b", size = 625814 }, + { url = "https://files.pythonhosted.org/packages/0c/dd/7c1331f902f30669ac3e754680b6edb9a0dd06dea5438e61128111fadd2c/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:60022527e71d1d1fda67a33150ee42869042bce3d0fcc9cc49be009a9cded3fb", size = 622820 }, + { url = "https://files.pythonhosted.org/packages/1b/14/36d7a8e27cd128d7b1009e7715a7c02f6c131be9d4ce1e5c3b73d0e342d8/watchfiles-1.1.0-cp313-cp313-win32.whl", hash = "sha256:32d6d4e583593cb8576e129879ea0991660b935177c0f93c6681359b3654bfa9", size = 279194 }, + { url = "https://files.pythonhosted.org/packages/25/41/2dd88054b849aa546dbeef5696019c58f8e0774f4d1c42123273304cdb2e/watchfiles-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:f21af781a4a6fbad54f03c598ab620e3a77032c5878f3d780448421a6e1818c7", size = 292349 }, + { url = "https://files.pythonhosted.org/packages/c8/cf/421d659de88285eb13941cf11a81f875c176f76a6d99342599be88e08d03/watchfiles-1.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:5366164391873ed76bfdf618818c82084c9db7fac82b64a20c44d335eec9ced5", size = 283836 }, + { url = "https://files.pythonhosted.org/packages/45/10/6faf6858d527e3599cc50ec9fcae73590fbddc1420bd4fdccfebffeedbc6/watchfiles-1.1.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:17ab167cca6339c2b830b744eaf10803d2a5b6683be4d79d8475d88b4a8a4be1", size = 400343 }, + { url = "https://files.pythonhosted.org/packages/03/20/5cb7d3966f5e8c718006d0e97dfe379a82f16fecd3caa7810f634412047a/watchfiles-1.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:328dbc9bff7205c215a7807da7c18dce37da7da718e798356212d22696404339", size = 392916 }, + { url = "https://files.pythonhosted.org/packages/8c/07/d8f1176328fa9e9581b6f120b017e286d2a2d22ae3f554efd9515c8e1b49/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7208ab6e009c627b7557ce55c465c98967e8caa8b11833531fdf95799372633", size = 449582 }, + { url = "https://files.pythonhosted.org/packages/66/e8/80a14a453cf6038e81d072a86c05276692a1826471fef91df7537dba8b46/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8f6f72974a19efead54195bc9bed4d850fc047bb7aa971268fd9a8387c89011", size = 456752 }, + { url = "https://files.pythonhosted.org/packages/5a/25/0853b3fe0e3c2f5af9ea60eb2e781eade939760239a72c2d38fc4cc335f6/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d181ef50923c29cf0450c3cd47e2f0557b62218c50b2ab8ce2ecaa02bd97e670", size = 481436 }, + { url = "https://files.pythonhosted.org/packages/fe/9e/4af0056c258b861fbb29dcb36258de1e2b857be4a9509e6298abcf31e5c9/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adb4167043d3a78280d5d05ce0ba22055c266cf8655ce942f2fb881262ff3cdf", size = 596016 }, + { url = "https://files.pythonhosted.org/packages/c5/fa/95d604b58aa375e781daf350897aaaa089cff59d84147e9ccff2447c8294/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5701dc474b041e2934a26d31d39f90fac8a3dee2322b39f7729867f932b1d4", size = 476727 }, + { url = "https://files.pythonhosted.org/packages/65/95/fe479b2664f19be4cf5ceeb21be05afd491d95f142e72d26a42f41b7c4f8/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b067915e3c3936966a8607f6fe5487df0c9c4afb85226613b520890049deea20", size = 451864 }, + { url = "https://files.pythonhosted.org/packages/d3/8a/3c4af14b93a15ce55901cd7a92e1a4701910f1768c78fb30f61d2b79785b/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:9c733cda03b6d636b4219625a4acb5c6ffb10803338e437fb614fef9516825ef", size = 625626 }, + { url = "https://files.pythonhosted.org/packages/da/f5/cf6aa047d4d9e128f4b7cde615236a915673775ef171ff85971d698f3c2c/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:cc08ef8b90d78bfac66f0def80240b0197008e4852c9f285907377b2947ffdcb", size = 622744 }, + { url = "https://files.pythonhosted.org/packages/2c/00/70f75c47f05dea6fd30df90f047765f6fc2d6eb8b5a3921379b0b04defa2/watchfiles-1.1.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9974d2f7dc561cce3bb88dfa8eb309dab64c729de85fba32e98d75cf24b66297", size = 402114 }, + { url = "https://files.pythonhosted.org/packages/53/03/acd69c48db4a1ed1de26b349d94077cca2238ff98fd64393f3e97484cae6/watchfiles-1.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c68e9f1fcb4d43798ad8814c4c1b61547b014b667216cb754e606bfade587018", size = 393879 }, + { url = "https://files.pythonhosted.org/packages/2f/c8/a9a2a6f9c8baa4eceae5887fecd421e1b7ce86802bcfc8b6a942e2add834/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95ab1594377effac17110e1352989bdd7bdfca9ff0e5eeccd8c69c5389b826d0", size = 450026 }, + { url = "https://files.pythonhosted.org/packages/fe/51/d572260d98388e6e2b967425c985e07d47ee6f62e6455cefb46a6e06eda5/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fba9b62da882c1be1280a7584ec4515d0a6006a94d6e5819730ec2eab60ffe12", size = 457917 }, + { url = "https://files.pythonhosted.org/packages/c6/2d/4258e52917bf9f12909b6ec314ff9636276f3542f9d3807d143f27309104/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3434e401f3ce0ed6b42569128b3d1e3af773d7ec18751b918b89cd49c14eaafb", size = 483602 }, + { url = "https://files.pythonhosted.org/packages/84/99/bee17a5f341a4345fe7b7972a475809af9e528deba056f8963d61ea49f75/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa257a4d0d21fcbca5b5fcba9dca5a78011cb93c0323fb8855c6d2dfbc76eb77", size = 596758 }, + { url = "https://files.pythonhosted.org/packages/40/76/e4bec1d59b25b89d2b0716b41b461ed655a9a53c60dc78ad5771fda5b3e6/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fd1b3879a578a8ec2076c7961076df540b9af317123f84569f5a9ddee64ce92", size = 477601 }, + { url = "https://files.pythonhosted.org/packages/1f/fa/a514292956f4a9ce3c567ec0c13cce427c158e9f272062685a8a727d08fc/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc7a30eeb0e20ecc5f4bd113cd69dcdb745a07c68c0370cea919f373f65d9e", size = 451936 }, + { url = "https://files.pythonhosted.org/packages/32/5d/c3bf927ec3bbeb4566984eba8dd7a8eb69569400f5509904545576741f88/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:891c69e027748b4a73847335d208e374ce54ca3c335907d381fde4e41661b13b", size = 626243 }, + { url = "https://files.pythonhosted.org/packages/e6/65/6e12c042f1a68c556802a84d54bb06d35577c81e29fba14019562479159c/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:12fe8eaffaf0faa7906895b4f8bb88264035b3f0243275e0bf24af0436b27259", size = 623073 }, + { url = "https://files.pythonhosted.org/packages/89/ab/7f79d9bf57329e7cbb0a6fd4c7bd7d0cee1e4a8ef0041459f5409da3506c/watchfiles-1.1.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:bfe3c517c283e484843cb2e357dd57ba009cff351edf45fb455b5fbd1f45b15f", size = 400872 }, + { url = "https://files.pythonhosted.org/packages/df/d5/3f7bf9912798e9e6c516094db6b8932df53b223660c781ee37607030b6d3/watchfiles-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a9ccbf1f129480ed3044f540c0fdbc4ee556f7175e5ab40fe077ff6baf286d4e", size = 392877 }, + { url = "https://files.pythonhosted.org/packages/0d/c5/54ec7601a2798604e01c75294770dbee8150e81c6e471445d7601610b495/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba0e3255b0396cac3cc7bbace76404dd72b5438bf0d8e7cefa2f79a7f3649caa", size = 449645 }, + { url = "https://files.pythonhosted.org/packages/0a/04/c2f44afc3b2fce21ca0b7802cbd37ed90a29874f96069ed30a36dfe57c2b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4281cd9fce9fc0a9dbf0fc1217f39bf9cf2b4d315d9626ef1d4e87b84699e7e8", size = 457424 }, + { url = "https://files.pythonhosted.org/packages/9f/b0/eec32cb6c14d248095261a04f290636da3df3119d4040ef91a4a50b29fa5/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d2404af8db1329f9a3c9b79ff63e0ae7131986446901582067d9304ae8aaf7f", size = 481584 }, + { url = "https://files.pythonhosted.org/packages/d1/e2/ca4bb71c68a937d7145aa25709e4f5d68eb7698a25ce266e84b55d591bbd/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e78b6ed8165996013165eeabd875c5dfc19d41b54f94b40e9fff0eb3193e5e8e", size = 596675 }, + { url = "https://files.pythonhosted.org/packages/a1/dd/b0e4b7fb5acf783816bc950180a6cd7c6c1d2cf7e9372c0ea634e722712b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:249590eb75ccc117f488e2fabd1bfa33c580e24b96f00658ad88e38844a040bb", size = 477363 }, + { url = "https://files.pythonhosted.org/packages/69/c4/088825b75489cb5b6a761a4542645718893d395d8c530b38734f19da44d2/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05686b5487cfa2e2c28ff1aa370ea3e6c5accfe6435944ddea1e10d93872147", size = 452240 }, + { url = "https://files.pythonhosted.org/packages/10/8c/22b074814970eeef43b7c44df98c3e9667c1f7bf5b83e0ff0201b0bd43f9/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d0e10e6f8f6dc5762adee7dece33b722282e1f59aa6a55da5d493a97282fedd8", size = 625607 }, + { url = "https://files.pythonhosted.org/packages/32/fa/a4f5c2046385492b2273213ef815bf71a0d4c1943b784fb904e184e30201/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:af06c863f152005c7592df1d6a7009c836a247c9d8adb78fef8575a5a98699db", size = 623315 }, +] + +[[package]] +name = "websockets" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440 }, + { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098 }, + { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329 }, + { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111 }, + { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054 }, + { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496 }, + { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829 }, + { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217 }, + { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195 }, + { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393 }, + { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837 }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743 }, +] + +[[package]] +name = "yarl" +version = "1.20.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3c/fb/efaa23fa4e45537b827620f04cf8f3cd658b76642205162e072703a5b963/yarl-1.20.1.tar.gz", hash = "sha256:d017a4997ee50c91fd5466cef416231bb82177b93b029906cefc542ce14c35ac", size = 186428 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/e1/2411b6d7f769a07687acee88a062af5833cf1966b7266f3d8dfb3d3dc7d3/yarl-1.20.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:0b5ff0fbb7c9f1b1b5ab53330acbfc5247893069e7716840c8e7d5bb7355038a", size = 131811 }, + { url = "https://files.pythonhosted.org/packages/b2/27/584394e1cb76fb771371770eccad35de400e7b434ce3142c2dd27392c968/yarl-1.20.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:14f326acd845c2b2e2eb38fb1346c94f7f3b01a4f5c788f8144f9b630bfff9a3", size = 90078 }, + { url = "https://files.pythonhosted.org/packages/bf/9a/3246ae92d4049099f52d9b0fe3486e3b500e29b7ea872d0f152966fc209d/yarl-1.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f60e4ad5db23f0b96e49c018596707c3ae89f5d0bd97f0ad3684bcbad899f1e7", size = 88748 }, + { url = "https://files.pythonhosted.org/packages/a3/25/35afe384e31115a1a801fbcf84012d7a066d89035befae7c5d4284df1e03/yarl-1.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49bdd1b8e00ce57e68ba51916e4bb04461746e794e7c4d4bbc42ba2f18297691", size = 349595 }, + { url = "https://files.pythonhosted.org/packages/28/2d/8aca6cb2cabc8f12efcb82749b9cefecbccfc7b0384e56cd71058ccee433/yarl-1.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:66252d780b45189975abfed839616e8fd2dbacbdc262105ad7742c6ae58f3e31", size = 342616 }, + { url = "https://files.pythonhosted.org/packages/0b/e9/1312633d16b31acf0098d30440ca855e3492d66623dafb8e25b03d00c3da/yarl-1.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59174e7332f5d153d8f7452a102b103e2e74035ad085f404df2e40e663a22b28", size = 361324 }, + { url = "https://files.pythonhosted.org/packages/bc/a0/688cc99463f12f7669eec7c8acc71ef56a1521b99eab7cd3abb75af887b0/yarl-1.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3968ec7d92a0c0f9ac34d5ecfd03869ec0cab0697c91a45db3fbbd95fe1b653", size = 359676 }, + { url = "https://files.pythonhosted.org/packages/af/44/46407d7f7a56e9a85a4c207724c9f2c545c060380718eea9088f222ba697/yarl-1.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1a4fbb50e14396ba3d375f68bfe02215d8e7bc3ec49da8341fe3157f59d2ff5", size = 352614 }, + { url = "https://files.pythonhosted.org/packages/b1/91/31163295e82b8d5485d31d9cf7754d973d41915cadce070491778d9c9825/yarl-1.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11a62c839c3a8eac2410e951301309426f368388ff2f33799052787035793b02", size = 336766 }, + { url = "https://files.pythonhosted.org/packages/b4/8e/c41a5bc482121f51c083c4c2bcd16b9e01e1cf8729e380273a952513a21f/yarl-1.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:041eaa14f73ff5a8986b4388ac6bb43a77f2ea09bf1913df7a35d4646db69e53", size = 364615 }, + { url = "https://files.pythonhosted.org/packages/e3/5b/61a3b054238d33d70ea06ebba7e58597891b71c699e247df35cc984ab393/yarl-1.20.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:377fae2fef158e8fd9d60b4c8751387b8d1fb121d3d0b8e9b0be07d1b41e83dc", size = 360982 }, + { url = "https://files.pythonhosted.org/packages/df/a3/6a72fb83f8d478cb201d14927bc8040af901811a88e0ff2da7842dd0ed19/yarl-1.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1c92f4390e407513f619d49319023664643d3339bd5e5a56a3bebe01bc67ec04", size = 369792 }, + { url = "https://files.pythonhosted.org/packages/7c/af/4cc3c36dfc7c077f8dedb561eb21f69e1e9f2456b91b593882b0b18c19dc/yarl-1.20.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d25ddcf954df1754ab0f86bb696af765c5bfaba39b74095f27eececa049ef9a4", size = 382049 }, + { url = "https://files.pythonhosted.org/packages/19/3a/e54e2c4752160115183a66dc9ee75a153f81f3ab2ba4bf79c3c53b33de34/yarl-1.20.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:909313577e9619dcff8c31a0ea2aa0a2a828341d92673015456b3ae492e7317b", size = 384774 }, + { url = "https://files.pythonhosted.org/packages/9c/20/200ae86dabfca89060ec6447649f219b4cbd94531e425e50d57e5f5ac330/yarl-1.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:793fd0580cb9664548c6b83c63b43c477212c0260891ddf86809e1c06c8b08f1", size = 374252 }, + { url = "https://files.pythonhosted.org/packages/83/75/11ee332f2f516b3d094e89448da73d557687f7d137d5a0f48c40ff211487/yarl-1.20.1-cp313-cp313-win32.whl", hash = "sha256:468f6e40285de5a5b3c44981ca3a319a4b208ccc07d526b20b12aeedcfa654b7", size = 81198 }, + { url = "https://files.pythonhosted.org/packages/ba/ba/39b1ecbf51620b40ab402b0fc817f0ff750f6d92712b44689c2c215be89d/yarl-1.20.1-cp313-cp313-win_amd64.whl", hash = "sha256:495b4ef2fea40596bfc0affe3837411d6aa3371abcf31aac0ccc4bdd64d4ef5c", size = 86346 }, + { url = "https://files.pythonhosted.org/packages/43/c7/669c52519dca4c95153c8ad96dd123c79f354a376346b198f438e56ffeb4/yarl-1.20.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:f60233b98423aab21d249a30eb27c389c14929f47be8430efa7dbd91493a729d", size = 138826 }, + { url = "https://files.pythonhosted.org/packages/6a/42/fc0053719b44f6ad04a75d7f05e0e9674d45ef62f2d9ad2c1163e5c05827/yarl-1.20.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6f3eff4cc3f03d650d8755c6eefc844edde99d641d0dcf4da3ab27141a5f8ddf", size = 93217 }, + { url = "https://files.pythonhosted.org/packages/4f/7f/fa59c4c27e2a076bba0d959386e26eba77eb52ea4a0aac48e3515c186b4c/yarl-1.20.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:69ff8439d8ba832d6bed88af2c2b3445977eba9a4588b787b32945871c2444e3", size = 92700 }, + { url = "https://files.pythonhosted.org/packages/2f/d4/062b2f48e7c93481e88eff97a6312dca15ea200e959f23e96d8ab898c5b8/yarl-1.20.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cf34efa60eb81dd2645a2e13e00bb98b76c35ab5061a3989c7a70f78c85006d", size = 347644 }, + { url = "https://files.pythonhosted.org/packages/89/47/78b7f40d13c8f62b499cc702fdf69e090455518ae544c00a3bf4afc9fc77/yarl-1.20.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8e0fe9364ad0fddab2688ce72cb7a8e61ea42eff3c7caeeb83874a5d479c896c", size = 323452 }, + { url = "https://files.pythonhosted.org/packages/eb/2b/490d3b2dc66f52987d4ee0d3090a147ea67732ce6b4d61e362c1846d0d32/yarl-1.20.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f64fbf81878ba914562c672024089e3401974a39767747691c65080a67b18c1", size = 346378 }, + { url = "https://files.pythonhosted.org/packages/66/ad/775da9c8a94ce925d1537f939a4f17d782efef1f973039d821cbe4bcc211/yarl-1.20.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6342d643bf9a1de97e512e45e4b9560a043347e779a173250824f8b254bd5ce", size = 353261 }, + { url = "https://files.pythonhosted.org/packages/4b/23/0ed0922b47a4f5c6eb9065d5ff1e459747226ddce5c6a4c111e728c9f701/yarl-1.20.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56dac5f452ed25eef0f6e3c6a066c6ab68971d96a9fb441791cad0efba6140d3", size = 335987 }, + { url = "https://files.pythonhosted.org/packages/3e/49/bc728a7fe7d0e9336e2b78f0958a2d6b288ba89f25a1762407a222bf53c3/yarl-1.20.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7d7f497126d65e2cad8dc5f97d34c27b19199b6414a40cb36b52f41b79014be", size = 329361 }, + { url = "https://files.pythonhosted.org/packages/93/8f/b811b9d1f617c83c907e7082a76e2b92b655400e61730cd61a1f67178393/yarl-1.20.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:67e708dfb8e78d8a19169818eeb5c7a80717562de9051bf2413aca8e3696bf16", size = 346460 }, + { url = "https://files.pythonhosted.org/packages/70/fd/af94f04f275f95da2c3b8b5e1d49e3e79f1ed8b6ceb0f1664cbd902773ff/yarl-1.20.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:595c07bc79af2494365cc96ddeb772f76272364ef7c80fb892ef9d0649586513", size = 334486 }, + { url = "https://files.pythonhosted.org/packages/84/65/04c62e82704e7dd0a9b3f61dbaa8447f8507655fd16c51da0637b39b2910/yarl-1.20.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7bdd2f80f4a7df852ab9ab49484a4dee8030023aa536df41f2d922fd57bf023f", size = 342219 }, + { url = "https://files.pythonhosted.org/packages/91/95/459ca62eb958381b342d94ab9a4b6aec1ddec1f7057c487e926f03c06d30/yarl-1.20.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c03bfebc4ae8d862f853a9757199677ab74ec25424d0ebd68a0027e9c639a390", size = 350693 }, + { url = "https://files.pythonhosted.org/packages/a6/00/d393e82dd955ad20617abc546a8f1aee40534d599ff555ea053d0ec9bf03/yarl-1.20.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:344d1103e9c1523f32a5ed704d576172d2cabed3122ea90b1d4e11fe17c66458", size = 355803 }, + { url = "https://files.pythonhosted.org/packages/9e/ed/c5fb04869b99b717985e244fd93029c7a8e8febdfcffa06093e32d7d44e7/yarl-1.20.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:88cab98aa4e13e1ade8c141daeedd300a4603b7132819c484841bb7af3edce9e", size = 341709 }, + { url = "https://files.pythonhosted.org/packages/24/fd/725b8e73ac2a50e78a4534ac43c6addf5c1c2d65380dd48a9169cc6739a9/yarl-1.20.1-cp313-cp313t-win32.whl", hash = "sha256:b121ff6a7cbd4abc28985b6028235491941b9fe8fe226e6fdc539c977ea1739d", size = 86591 }, + { url = "https://files.pythonhosted.org/packages/94/c3/b2e9f38bc3e11191981d57ea08cab2166e74ea770024a646617c9cddd9f6/yarl-1.20.1-cp313-cp313t-win_amd64.whl", hash = "sha256:541d050a355bbbc27e55d906bc91cb6fe42f96c01413dd0f4ed5a5240513874f", size = 93003 }, + { url = "https://files.pythonhosted.org/packages/b4/2d/2345fce04cfd4bee161bf1e7d9cdc702e3e16109021035dbb24db654a622/yarl-1.20.1-py3-none-any.whl", hash = "sha256:83b8eb083fe4683c6115795d9fc1cfaf2cbbefb19b3a1cb68f6527460f483a77", size = 46542 }, +] diff --git a/examples/voice_agent_lcd/agent_js/realtime_agent.ts b/examples/voice_agent_lcd/agent_js/realtime_agent.ts new file mode 100644 index 0000000..80c9406 --- /dev/null +++ b/examples/voice_agent_lcd/agent_js/realtime_agent.ts @@ -0,0 +1,121 @@ +// SPDX-FileCopyrightText: 2025 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import { + type JobContext, + type JobProcess, + WorkerOptions, + cli, + defineAgent, + llm, + voice, +} from '@livekit/agents'; +import * as openai from '@livekit/agents-plugin-openai'; +import * as silero from '@livekit/agents-plugin-silero'; +import * as deepgram from '@livekit/agents-plugin-deepgram'; +import * as cartesia from '@livekit/agents-plugin-cartesia'; +import { fileURLToPath } from 'node:url'; +import { z } from 'zod'; +import { log } from 'node:console'; + +const roomNameSchema = z.enum(['bedroom', 'living room', 'kitchen', 'bathroom', 'office']); + +export default defineAgent({ + prewarm: async (proc: JobProcess) => { + proc.userData.vad = await silero.VAD.load(); + }, + entry: async (ctx: JobContext) => { + const getWeather = llm.tool({ + description: ' Called when the user asks about the weather.', + parameters: z.object({ + location: z.string().describe('The location to get the weather for'), + }), + execute: async ({ location }) => { + return `The weather in ${location} is sunny today.`; + }, + }); + + const toggleLight = llm.tool({ + description: 'Called when the user asks to turn on or off the light.', + parameters: z.object({ + room: roomNameSchema.describe('The room to turn the light in'), + switchTo: z.enum(['on', 'off']).describe('The state to turn the light to'), + }), + execute: async ({ room, switchTo }) => { + return `The light in the ${room} is now ${switchTo}.`; + }, + }); + + const setLedState = llm.tool({ + description: 'Called when the user asks to turn on or off the LED light.', + parameters: z.object({ + //color: ledColorSchema.describe('The color of the LED light'), + colorR: z.number().int().min(0).max(255).describe('The red component of the LED color (0-255)'), + colorG: z.number().int().min(0).max(255).describe('The green component of the LED color (0-255)'), + colorB: z.number().int().min(0).max(255).describe('The blue component of the LED color (0-255)'), + + }), + execute: async ({ colorR, colorG, colorB }) => { + log(`Setting LED color to R: ${colorR}, G: ${colorG}, B: ${colorB}`); + + const remoteParticipant = ctx.room.remoteParticipants.values().next().value; + if (!remoteParticipant) { + return 'No remote participant found to set the LED color.'; + } + + const result = await ctx.room.localParticipant!.performRpc({ + destinationIdentity: remoteParticipant.identity!, + method: 'set_led_color', + payload: [colorR, colorG, colorB].join(',') + }) + + return `The LED color has been changed.`; + // Simulate setting the LED state + //if (response.success) { + return `The LED color has been changed.`; + //} else { + //return 'Failed to set the LED state. Please try again later.'; + //} + }, + }); + + const agent = new voice.Agent({ + instructions: + "You are a helpful assistant created by LiveKit, always speaking English, you can hear the user's message and respond to it.", + tools: { + getWeather, + toggleLight, + setLedState, + }, + }); + + const session = new voice.AgentSession({ + llm: new openai.realtime.RealtimeModel(), + stt: new deepgram.STT({ + model: 'nova-2-general', + language: 'multi', + }), + //llm: new openai.LLM({ + // model: 'gpt-4o-mini', + //}), + tts: new cartesia.TTS({ + model: 'sonic-english', + voice: 'c99d36f3-5ffd-4253-803a-535c1bc9c306', + }), + // enable to allow chaining of tool calls + voiceOptions: { + maxToolSteps: 5, + }, + }); + + await session.start({ + agent, + room: ctx.room, + }); + + // join the room when agent is ready + await ctx.connect(); + }, +}); + +cli.runApp(new WorkerOptions({ agent: fileURLToPath(import.meta.url) })); diff --git a/examples/voice_agent_lcd/main/CMakeLists.txt b/examples/voice_agent_lcd/main/CMakeLists.txt new file mode 100755 index 0000000..42e9711 --- /dev/null +++ b/examples/voice_agent_lcd/main/CMakeLists.txt @@ -0,0 +1,14 @@ +file(GLOB_RECURSE ALL_SOURCES ./*.c) + +idf_component_register(SRC_DIRS "." "fonts" "images") + +set_source_files_properties( + ${ALL_SOURCES} + PROPERTIES COMPILE_OPTIONS + -DLV_LVGL_H_INCLUDE_SIMPLE +) + +# Image and font generation +# 1. Fonts are generated using the LVGL online font converter +# 2. Images are converted manually using LVGLImage.py script form LVGL repo: +# python LVGLImage.py --ofmt C --cf AUTO --name img_ .png \ No newline at end of file diff --git a/examples/voice_agent_lcd/main/board.c b/examples/voice_agent_lcd/main/board.c new file mode 100755 index 0000000..2e2beb6 --- /dev/null +++ b/examples/voice_agent_lcd/main/board.c @@ -0,0 +1,52 @@ +#include "esp_log.h" +#include "codec_init.h" +#include "codec_board.h" +#include "driver/temperature_sensor.h" +#include "bsp/esp-bsp.h" + +#include "board.h" + +static const char *TAG = "board"; + +static temperature_sensor_handle_t temp_sensor = NULL; + +extern void example_ui(lv_obj_t *scr); + +void board_init() +{ + ESP_LOGI(TAG, "Initializing board"); + + bsp_i2c_init(); + + bsp_display_cfg_t display_cfg = { + .lvgl_port_cfg = ESP_LVGL_PORT_INIT_CONFIG(), + .buffer_size = BSP_LCD_H_RES * CONFIG_BSP_LCD_DRAW_BUF_HEIGHT, + .double_buffer = 0, + .flags = { .buff_dma = true } + }; + display_cfg.lvgl_port_cfg.task_affinity = 1; // Put LVGL on core 1 + bsp_display_start_with_config(&display_cfg); + + bsp_display_backlight_on(); + + // Initialize codec board + set_codec_board_type(CONFIG_CODEC_BOARD_TYPE); + codec_init_cfg_t codec_cfg = { + .in_mode = CODEC_I2S_MODE_TDM, + .in_use_tdm = true, + .reuse_dev = false + }; + init_codec(&codec_cfg); + + // Initialize temperature sensor + temperature_sensor_config_t temp_sensor_config = TEMPERATURE_SENSOR_CONFIG_DEFAULT(10, 50); + ESP_ERROR_CHECK(temperature_sensor_install(&temp_sensor_config, &temp_sensor)); + ESP_ERROR_CHECK(temperature_sensor_enable(temp_sensor)); +} + +float board_get_temp(void) +{ + float temp_out; + ESP_ERROR_CHECK(temperature_sensor_get_celsius(temp_sensor, &temp_out)); + return temp_out; +} \ No newline at end of file diff --git a/examples/voice_agent_lcd/main/board.h b/examples/voice_agent_lcd/main/board.h new file mode 100644 index 0000000..dee616e --- /dev/null +++ b/examples/voice_agent_lcd/main/board.h @@ -0,0 +1,15 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +/// Initialize board. +void board_init(void); + +/// Read the chip's internal temperature in degrees Celsius. +float board_get_temp(void); + +#ifdef __cplusplus +} +#endif diff --git a/examples/voice_agent_lcd/main/example.c b/examples/voice_agent_lcd/main/example.c new file mode 100644 index 0000000..6922eb1 --- /dev/null +++ b/examples/voice_agent_lcd/main/example.c @@ -0,0 +1,133 @@ +#include "esp_log.h" +#include "cJSON.h" +#include "bsp/esp-bsp.h" +#include "livekit.h" +#include "livekit_sandbox.h" +#include "media.h" +#include "board.h" +#include "ui.h" +#include "example.h" + +static const char *TAG = "livekit_example"; + +static livekit_room_handle_t room_handle; + +extern lv_subject_t ui_room_state; +extern lv_subject_t ui_is_call_active; + +/// Invoked when the room's connection state changes. +static void on_state_changed(livekit_connection_state_t state, void* ctx) +{ + ESP_LOGI(TAG, "Room state: %s", livekit_connection_state_str(state)); + ui_acquire(); + lv_subject_set_int(&ui_room_state, (int)state); + ui_release(); +} + +/// Invoked when participant information is received. +static void on_participant_info(const livekit_participant_info_t* info, void* ctx) +{ + if (info->kind != LIVEKIT_PARTICIPANT_KIND_AGENT) { + // Only handle agent participants for this example. + return; + } + char* verb; + switch (info->state) { + case LIVEKIT_PARTICIPANT_STATE_ACTIVE: + verb = "joined"; + break; + case LIVEKIT_PARTICIPANT_STATE_DISCONNECTED: + verb = "left"; + break; + default: + return; + } + ESP_LOGI(TAG, "Agent has %s the room", verb); +} + +/// Invoked by a remote participant to get the current CPU temperature. +static void get_cpu_temp(const livekit_rpc_invocation_t* invocation, void* ctx) +{ + float temp = board_get_temp(); + char temp_string[16]; + snprintf(temp_string, sizeof(temp_string), "%.2f", temp); + livekit_rpc_return_ok(temp_string); +} + +/// Creates and configures the LiveKit room object. +static void init_room() +{ + livekit_room_options_t room_options = { + .publish = { + .kind = LIVEKIT_MEDIA_TYPE_AUDIO, + .audio_encode = { + .codec = LIVEKIT_AUDIO_CODEC_OPUS, + .sample_rate = 16000, + .channel_count = 1 + }, + .capturer = media_get_capturer() + }, + .subscribe = { + .kind = LIVEKIT_MEDIA_TYPE_AUDIO, + .renderer = media_get_renderer() + }, + .on_state_changed = on_state_changed, + .on_participant_info = on_participant_info + }; + ESP_ERROR_CHECK(livekit_room_create(&room_handle, &room_options)); + + // Register RPC handlers so they can be invoked by remote participants. + livekit_room_rpc_register(room_handle, "get_cpu_temp", get_cpu_temp); +} + +static void connect_room_async(void* arg) +{ + livekit_err_t connect_res; +#ifdef CONFIG_LK_USE_SANDBOX + // Option A: Sandbox token server. + livekit_sandbox_res_t res = {}; + livekit_sandbox_options_t gen_options = { + .sandbox_id = CONFIG_LK_SANDBOX_ID, + .room_name = CONFIG_LK_SANDBOX_ROOM_NAME, + .participant_name = CONFIG_LK_SANDBOX_PARTICIPANT_NAME + }; + if (!livekit_sandbox_generate(&gen_options, &res)) { + ESP_LOGE(TAG, "Failed to generate sandbox token"); + return; + } + connect_res = livekit_room_connect(room_handle, res.server_url, res.token); + livekit_sandbox_res_free(&res); +#else + // Option B: Pre-generated token. + connect_res = livekit_room_connect(room_handle, CONFIG_LK_SERVER_URL, CONFIG_LK_TOKEN); +#endif + + if (connect_res != LIVEKIT_ERR_NONE) { + ESP_LOGE(TAG, "Failed to connect to room"); + } + media_lib_thread_destroy(NULL); +} + +static void close_room_async(void* arg) +{ + livekit_room_close(room_handle); + media_lib_thread_destroy(NULL); +} + +static void on_ui_is_call_active_changed(lv_observer_t* observer, lv_subject_t* subject) +{ + bool is_call_active = lv_subject_get_int(subject); + ESP_LOGI(TAG, "Call active changed: %d", is_call_active); + + const char* name = is_call_active ? "connect" : "close"; + void (*body)(void*) = is_call_active ? connect_room_async : close_room_async; + ESP_ERROR_CHECK(media_lib_thread_create_from_scheduler(NULL, name, body, NULL)); +} + +void example_init() +{ + init_room(); + + // Observe UI state changes + lv_subject_add_observer(&ui_is_call_active, on_ui_is_call_active_changed, NULL); +} \ No newline at end of file diff --git a/examples/voice_agent_lcd/main/example.h b/examples/voice_agent_lcd/main/example.h new file mode 100644 index 0000000..97f290a --- /dev/null +++ b/examples/voice_agent_lcd/main/example.h @@ -0,0 +1,15 @@ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +// void join_room(); +// void leave_room(); + +void example_init(); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/examples/voice_agent_lcd/main/fonts/commit_mono_700_14.c b/examples/voice_agent_lcd/main/fonts/commit_mono_700_14.c new file mode 100644 index 0000000..38ab6c9 --- /dev/null +++ b/examples/voice_agent_lcd/main/fonts/commit_mono_700_14.c @@ -0,0 +1,354 @@ +/******************************************************************************* + * Size: 14 px + * Bpp: 4 + * Opts: --bpp 4 --size 14 --no-compress --stride 1 --align 1 --font CommitMono-700-Regular.ttf --range 65-90,46,32 --format lvgl -o commit_mono_700_14.c + ******************************************************************************/ + +#ifdef __has_include + #if __has_include("lvgl.h") + #ifndef LV_LVGL_H_INCLUDE_SIMPLE + #define LV_LVGL_H_INCLUDE_SIMPLE + #endif + #endif +#endif + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE + #include "lvgl.h" +#else + #include "lvgl/lvgl.h" +#endif + + + +#ifndef COMMIT_MONO_700_14 +#define COMMIT_MONO_700_14 1 +#endif + +#if COMMIT_MONO_700_14 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+0020 " " */ + + /* U+002E "." */ + 0x7, 0xa1, 0x1f, 0xf7, 0xb, 0xe3, + + /* U+0041 "A" */ + 0x0, 0x2f, 0xf8, 0x0, 0x0, 0x6, 0xff, 0xd0, + 0x0, 0x0, 0xaf, 0xaf, 0x10, 0x0, 0xe, 0xb5, + 0xf5, 0x0, 0x3, 0xf7, 0x1f, 0x90, 0x0, 0x7f, + 0x30, 0xde, 0x0, 0xb, 0xff, 0xff, 0xf2, 0x0, + 0xfd, 0x99, 0xaf, 0x60, 0x4f, 0x60, 0x0, 0xfa, + 0x8, 0xf2, 0x0, 0xc, 0xe0, + + /* U+0042 "B" */ + 0xdf, 0xff, 0xd4, 0xd, 0xf9, 0x9e, 0xf1, 0xdf, + 0x0, 0x6f, 0x5d, 0xf0, 0x9, 0xf2, 0xdf, 0xff, + 0xf9, 0xd, 0xf9, 0x9e, 0xf2, 0xdf, 0x0, 0x3f, + 0x8d, 0xf0, 0x3, 0xf9, 0xdf, 0x99, 0xef, 0x4d, + 0xff, 0xfe, 0x60, + + /* U+0043 "C" */ + 0x0, 0x4d, 0xfd, 0x50, 0x4, 0xff, 0xbe, 0xf4, + 0xc, 0xf2, 0x2, 0xb6, 0x1f, 0xb0, 0x0, 0x0, + 0x3f, 0x80, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, + 0x1f, 0xa0, 0x0, 0x0, 0xc, 0xf2, 0x1, 0xd9, + 0x4, 0xff, 0xbe, 0xf5, 0x0, 0x4d, 0xfd, 0x50, + + /* U+0044 "D" */ + 0xff, 0xff, 0xa1, 0xf, 0xe9, 0xbf, 0xd0, 0xfc, + 0x0, 0x7f, 0x7f, 0xc0, 0x0, 0xfc, 0xfc, 0x0, + 0xd, 0xef, 0xc0, 0x0, 0xde, 0xfc, 0x0, 0xf, + 0xcf, 0xc0, 0x7, 0xf7, 0xfe, 0x9b, 0xfd, 0xf, + 0xff, 0xfa, 0x10, + + /* U+0045 "E" */ + 0x8f, 0xff, 0xff, 0x68, 0xfa, 0x99, 0x93, 0x8f, + 0x30, 0x0, 0x8, 0xf3, 0x0, 0x0, 0x8f, 0xff, + 0xfd, 0x8, 0xfa, 0x99, 0x80, 0x8f, 0x30, 0x0, + 0x8, 0xf3, 0x0, 0x0, 0x8f, 0xa9, 0x99, 0x38, + 0xff, 0xff, 0xf6, + + /* U+0046 "F" */ + 0x7f, 0xff, 0xff, 0x67, 0xfb, 0x99, 0x94, 0x7f, + 0x40, 0x0, 0x7, 0xf4, 0x0, 0x0, 0x7f, 0xff, + 0xfe, 0x7, 0xfb, 0x99, 0x80, 0x7f, 0x40, 0x0, + 0x7, 0xf4, 0x0, 0x0, 0x7f, 0x40, 0x0, 0x7, + 0xf4, 0x0, 0x0, + + /* U+0047 "G" */ + 0x0, 0x7e, 0xfc, 0x30, 0x7, 0xfe, 0xbf, 0xf1, + 0x1f, 0xd1, 0x3, 0x83, 0x5f, 0x70, 0x0, 0x0, + 0x7f, 0x40, 0xff, 0xf9, 0x7f, 0x40, 0x9a, 0xf9, + 0x5f, 0x70, 0x3, 0xf9, 0x1f, 0xd0, 0x8, 0xf9, + 0x9, 0xfc, 0xaf, 0xf9, 0x0, 0x9f, 0xe4, 0xf9, + + /* U+0048 "H" */ + 0x2f, 0x90, 0x3, 0xf9, 0x2f, 0x90, 0x3, 0xf9, + 0x2f, 0x90, 0x3, 0xf9, 0x2f, 0x90, 0x3, 0xf9, + 0x2f, 0xff, 0xff, 0xf9, 0x2f, 0xda, 0xab, 0xf9, + 0x2f, 0x90, 0x3, 0xf9, 0x2f, 0x90, 0x3, 0xf9, + 0x2f, 0x90, 0x3, 0xf9, 0x2f, 0x90, 0x3, 0xf9, + + /* U+0049 "I" */ + 0xaf, 0xff, 0xff, 0x16, 0x9d, 0xfa, 0x90, 0x0, + 0xaf, 0x10, 0x0, 0xa, 0xf1, 0x0, 0x0, 0xaf, + 0x10, 0x0, 0xa, 0xf1, 0x0, 0x0, 0xaf, 0x10, + 0x0, 0xa, 0xf1, 0x0, 0x69, 0xdf, 0xa9, 0x1b, + 0xff, 0xff, 0xf1, + + /* U+004A "J" */ + 0x1, 0xff, 0xff, 0xf2, 0x1, 0x99, 0x9d, 0xf2, + 0x0, 0x0, 0x9, 0xf2, 0x0, 0x0, 0x9, 0xf2, + 0x0, 0x0, 0x9, 0xf2, 0x0, 0x0, 0x9, 0xf2, + 0x0, 0x0, 0x9, 0xf2, 0x3d, 0x60, 0xb, 0xf1, + 0xe, 0xfa, 0xbf, 0xb0, 0x2, 0xbf, 0xfa, 0x10, + + /* U+004B "K" */ + 0x2f, 0x90, 0x4, 0xfd, 0x2, 0xf9, 0x2, 0xee, + 0x10, 0x2f, 0x90, 0xdf, 0x30, 0x2, 0xf9, 0xaf, + 0x60, 0x0, 0x2f, 0xef, 0xf2, 0x0, 0x2, 0xff, + 0xdf, 0xb0, 0x0, 0x2f, 0xe1, 0xaf, 0x50, 0x2, + 0xf9, 0x1, 0xfe, 0x0, 0x2f, 0x90, 0x7, 0xf8, + 0x2, 0xf9, 0x0, 0xd, 0xf2, + + /* U+004C "L" */ + 0x6f, 0x50, 0x0, 0x6, 0xf5, 0x0, 0x0, 0x6f, + 0x50, 0x0, 0x6, 0xf5, 0x0, 0x0, 0x6f, 0x50, + 0x0, 0x6, 0xf5, 0x0, 0x0, 0x6f, 0x50, 0x0, + 0x6, 0xf5, 0x0, 0x0, 0x6f, 0xb9, 0x99, 0x36, + 0xff, 0xff, 0xf6, + + /* U+004D "M" */ + 0x9f, 0xe0, 0x8, 0xff, 0x9f, 0xf2, 0xc, 0xff, + 0x9f, 0xd6, 0xf, 0xdf, 0x9f, 0x99, 0x3f, 0xaf, + 0x9f, 0x6d, 0x7c, 0xaf, 0x9f, 0x2f, 0xb8, 0xaf, + 0x9f, 0xe, 0xf4, 0xaf, 0x9f, 0xa, 0xf1, 0xaf, + 0x9f, 0x0, 0x0, 0xaf, 0x9f, 0x0, 0x0, 0xaf, + + /* U+004E "N" */ + 0x3f, 0xf9, 0x0, 0xfa, 0x3f, 0xfe, 0x0, 0xfa, + 0x3f, 0xaf, 0x40, 0xfa, 0x3f, 0x6e, 0xa0, 0xfa, + 0x3f, 0x69, 0xf0, 0xfa, 0x3f, 0x64, 0xf5, 0xfa, + 0x3f, 0x60, 0xea, 0xfa, 0x3f, 0x60, 0x8f, 0xfa, + 0x3f, 0x60, 0x3f, 0xfa, 0x3f, 0x60, 0xd, 0xfa, + + /* U+004F "O" */ + 0x0, 0x8e, 0xfb, 0x20, 0x9, 0xfd, 0xbf, 0xe1, + 0x2f, 0xc0, 0x6, 0xf8, 0x6f, 0x50, 0x0, 0xfd, + 0x8f, 0x30, 0x0, 0xcf, 0x8f, 0x30, 0x0, 0xcf, + 0x6f, 0x50, 0x0, 0xfd, 0x2f, 0xc0, 0x6, 0xf8, + 0x9, 0xfd, 0xbf, 0xe1, 0x0, 0x8e, 0xfb, 0x20, + + /* U+0050 "P" */ + 0xcf, 0xff, 0xe8, 0xc, 0xf9, 0x9c, 0xf7, 0xcf, + 0x0, 0xe, 0xdc, 0xf0, 0x0, 0xed, 0xcf, 0x99, + 0xcf, 0x7c, 0xff, 0xfe, 0x80, 0xcf, 0x0, 0x0, + 0xc, 0xf0, 0x0, 0x0, 0xcf, 0x0, 0x0, 0xc, + 0xf0, 0x0, 0x0, + + /* U+0051 "Q" */ + 0x0, 0x8e, 0xfb, 0x20, 0x0, 0x9f, 0xdb, 0xfe, + 0x10, 0x2f, 0xc0, 0x6, 0xf8, 0x6, 0xf5, 0x0, + 0xf, 0xd0, 0x8f, 0x30, 0x0, 0xcf, 0x8, 0xf3, + 0x1, 0xc, 0xf0, 0x6f, 0x56, 0xe2, 0xfd, 0x2, + 0xfc, 0xa, 0xff, 0x80, 0x9, 0xfd, 0xcf, 0xf3, + 0x0, 0x8, 0xef, 0xbb, 0xe2, 0x0, 0x0, 0x0, + 0x9, 0x20, + + /* U+0052 "R" */ + 0xdf, 0xff, 0xe7, 0x0, 0xdf, 0x99, 0xcf, 0x60, + 0xde, 0x0, 0xf, 0xb0, 0xde, 0x0, 0x4f, 0xa0, + 0xdf, 0xff, 0xff, 0x20, 0xdf, 0x9e, 0xf2, 0x0, + 0xde, 0x7, 0xf7, 0x0, 0xde, 0x0, 0xfe, 0x0, + 0xde, 0x0, 0x8f, 0x50, 0xde, 0x0, 0x1f, 0xd0, + + /* U+0053 "S" */ + 0x0, 0x9e, 0xfc, 0x30, 0xa, 0xfc, 0xae, 0xf2, + 0xf, 0xc0, 0x2, 0xb5, 0xf, 0xd1, 0x0, 0x0, + 0x7, 0xff, 0xc9, 0x20, 0x0, 0x38, 0xbf, 0xf2, + 0x0, 0x0, 0x4, 0xf8, 0x2e, 0x80, 0x3, 0xf8, + 0xc, 0xfb, 0xae, 0xf3, 0x1, 0x9e, 0xfd, 0x50, + + /* U+0054 "T" */ + 0x7f, 0xff, 0xff, 0xfd, 0x49, 0x9d, 0xfa, 0x98, + 0x0, 0xa, 0xf1, 0x0, 0x0, 0xa, 0xf1, 0x0, + 0x0, 0xa, 0xf1, 0x0, 0x0, 0xa, 0xf1, 0x0, + 0x0, 0xa, 0xf1, 0x0, 0x0, 0xa, 0xf1, 0x0, + 0x0, 0xa, 0xf1, 0x0, 0x0, 0xa, 0xf1, 0x0, + + /* U+0055 "U" */ + 0x2f, 0x90, 0x3, 0xf9, 0x2f, 0x90, 0x3, 0xf9, + 0x2f, 0x90, 0x3, 0xf9, 0x2f, 0x90, 0x3, 0xf9, + 0x2f, 0x90, 0x3, 0xf9, 0x2f, 0x90, 0x3, 0xf9, + 0x2f, 0x90, 0x3, 0xf8, 0x1f, 0xc0, 0x6, 0xf7, + 0xa, 0xfd, 0xbf, 0xf1, 0x0, 0x9e, 0xfc, 0x30, + + /* U+0056 "V" */ + 0x9f, 0x20, 0x0, 0xbf, 0x4, 0xf7, 0x0, 0xf, + 0xb0, 0xf, 0xb0, 0x4, 0xf7, 0x0, 0xcf, 0x0, + 0x8f, 0x20, 0x7, 0xf3, 0xc, 0xe0, 0x0, 0x3f, + 0x81, 0xf9, 0x0, 0x0, 0xec, 0x5f, 0x50, 0x0, + 0xa, 0xfa, 0xf1, 0x0, 0x0, 0x6f, 0xfc, 0x0, + 0x0, 0x1, 0xff, 0x80, 0x0, + + /* U+0057 "W" */ + 0x1f, 0x80, 0x0, 0x1, 0xf8, 0xf, 0x90, 0x58, + 0x2, 0xf6, 0xe, 0xa0, 0xbf, 0x23, 0xf5, 0xd, + 0xb0, 0xff, 0x65, 0xf3, 0xc, 0xc3, 0xfc, 0xa6, + 0xf2, 0xa, 0xe7, 0xd7, 0xd7, 0xf1, 0x9, 0xfb, + 0x93, 0xfa, 0xf0, 0x7, 0xff, 0x50, 0xff, 0xe0, + 0x6, 0xff, 0x20, 0xbf, 0xd0, 0x5, 0xfe, 0x0, + 0x7f, 0xb0, + + /* U+0058 "X" */ + 0x6f, 0x80, 0x2, 0xfc, 0x0, 0xcf, 0x20, 0xbf, + 0x30, 0x3, 0xfb, 0x5f, 0x90, 0x0, 0x9, 0xff, + 0xe1, 0x0, 0x0, 0x1f, 0xf6, 0x0, 0x0, 0x4, + 0xff, 0xa0, 0x0, 0x0, 0xdf, 0xbf, 0x40, 0x0, + 0x7f, 0x72, 0xfd, 0x0, 0x1f, 0xd0, 0x7, 0xf7, + 0xa, 0xf4, 0x0, 0xd, 0xf1, + + /* U+0059 "Y" */ + 0x8f, 0x50, 0x0, 0xee, 0x1, 0xed, 0x0, 0x6f, + 0x60, 0x7, 0xf6, 0xe, 0xd0, 0x0, 0xe, 0xe8, + 0xf4, 0x0, 0x0, 0x5f, 0xfc, 0x0, 0x0, 0x0, + 0xdf, 0x30, 0x0, 0x0, 0xa, 0xf1, 0x0, 0x0, + 0x0, 0xaf, 0x10, 0x0, 0x0, 0xa, 0xf1, 0x0, + 0x0, 0x0, 0xaf, 0x10, 0x0, + + /* U+005A "Z" */ + 0x2f, 0xff, 0xff, 0xf7, 0x19, 0x99, 0x9e, 0xf5, + 0x0, 0x0, 0x4f, 0xc0, 0x0, 0x0, 0xef, 0x20, + 0x0, 0x9, 0xf6, 0x0, 0x0, 0x4f, 0xc0, 0x0, + 0x0, 0xef, 0x20, 0x0, 0x9, 0xf6, 0x0, 0x0, + 0x3f, 0xf9, 0x99, 0x96, 0x4f, 0xff, 0xff, 0xfb +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 134, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 0, .adv_w = 134, .box_w = 4, .box_h = 3, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 6, .adv_w = 134, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 51, .adv_w = 134, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 86, .adv_w = 134, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 126, .adv_w = 134, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 161, .adv_w = 134, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 196, .adv_w = 134, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 231, .adv_w = 134, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 271, .adv_w = 134, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 311, .adv_w = 134, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 346, .adv_w = 134, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 386, .adv_w = 134, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 431, .adv_w = 134, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 466, .adv_w = 134, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 506, .adv_w = 134, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 546, .adv_w = 134, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 586, .adv_w = 134, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 621, .adv_w = 134, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 671, .adv_w = 134, .box_w = 8, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 711, .adv_w = 134, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 751, .adv_w = 134, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 791, .adv_w = 134, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 831, .adv_w = 134, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 876, .adv_w = 134, .box_w = 10, .box_h = 10, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 926, .adv_w = 134, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 971, .adv_w = 134, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1016, .adv_w = 134, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + +static const uint16_t unicode_list_0[] = { + 0x0, 0xe +}; + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 32, .range_length = 15, .glyph_id_start = 1, + .unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 2, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + }, + { + .range_start = 65, .range_length = 26, .glyph_id_start = 3, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LVGL_VERSION_MAJOR == 8 +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +#endif + +#if LVGL_VERSION_MAJOR >= 8 +static const lv_font_fmt_txt_dsc_t font_dsc = { +#else +static lv_font_fmt_txt_dsc_t font_dsc = { +#endif + .glyph_bitmap = glyph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = NULL, + .kern_scale = 0, + .cmap_num = 2, + .bpp = 4, + .kern_classes = 0, + .bitmap_format = 0, +#if LVGL_VERSION_MAJOR == 8 + .cache = &cache +#endif + +}; + + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LVGL_VERSION_MAJOR >= 8 +const lv_font_t commit_mono_700_14 = { +#else +lv_font_t commit_mono_700_14 = { +#endif + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 11, /*The maximum line height required by the font*/ + .base_line = 1, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif +#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 + .underline_position = -1, + .underline_thickness = 1, +#endif + .static_bitmap = 0, + .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9 + .fallback = NULL, +#endif + .user_data = NULL, +}; + + + +#endif /*#if COMMIT_MONO_700_14*/ diff --git a/examples/voice_agent_lcd/main/fonts/public_sans_medium_16.c b/examples/voice_agent_lcd/main/fonts/public_sans_medium_16.c new file mode 100644 index 0000000..413d06c --- /dev/null +++ b/examples/voice_agent_lcd/main/fonts/public_sans_medium_16.c @@ -0,0 +1,1269 @@ +/******************************************************************************* + * Size: 16 px + * Bpp: 4 + * Opts: --bpp 4 --size 16 --no-compress --stride 1 --align 1 --font PublicSans-Medium.ttf --range 32-126 --format lvgl -o public_sans_medium_16.c + ******************************************************************************/ + +#ifdef __has_include + #if __has_include("lvgl.h") + #ifndef LV_LVGL_H_INCLUDE_SIMPLE + #define LV_LVGL_H_INCLUDE_SIMPLE + #endif + #endif +#endif + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE + #include "lvgl.h" +#else + #include "lvgl/lvgl.h" +#endif + + + +#ifndef PUBLIC_SANS_MEDIUM_16 +#define PUBLIC_SANS_MEDIUM_16 1 +#endif + +#if PUBLIC_SANS_MEDIUM_16 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+0020 " " */ + + /* U+0021 "!" */ + 0xff, 0xe, 0xf0, 0xde, 0xc, 0xd0, 0xcd, 0xb, + 0xc0, 0xab, 0x9, 0xa0, 0x89, 0x2, 0x30, 0xff, + 0xf, 0xf0, + + /* U+0022 "\"" */ + 0xee, 0xe, 0xf0, 0xcc, 0xc, 0xd0, 0xaa, 0xa, + 0xb0, 0x88, 0x8, 0x90, 0x11, 0x1, 0x10, + + /* U+0023 "#" */ + 0x0, 0x6, 0x60, 0x2a, 0x0, 0x0, 0x9, 0x60, + 0x4b, 0x0, 0x0, 0xc, 0x30, 0x79, 0x0, 0x0, + 0xe, 0x10, 0x96, 0x0, 0xf, 0xff, 0xff, 0xff, + 0xf1, 0x0, 0x3d, 0x0, 0xe2, 0x0, 0x0, 0x5a, + 0x0, 0xf0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0x80, + 0x2, 0xb7, 0x26, 0xb2, 0x10, 0x0, 0xc3, 0x7, + 0x80, 0x0, 0x0, 0xe1, 0x9, 0x60, 0x0, 0x1, + 0xe0, 0xc, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, + + /* U+0024 "$" */ + 0x0, 0x0, 0x18, 0x20, 0x0, 0x0, 0x0, 0x3f, + 0x50, 0x0, 0x0, 0x0, 0x3f, 0x50, 0x0, 0x0, + 0x2a, 0xef, 0xe9, 0x0, 0x2, 0xef, 0xb8, 0xbf, + 0xc0, 0x9, 0xf6, 0x0, 0x9, 0xf5, 0xb, 0xf2, + 0x0, 0x1, 0x63, 0x8, 0xfc, 0x30, 0x0, 0x0, + 0x0, 0xbf, 0xfe, 0xa5, 0x0, 0x0, 0x3, 0x8c, + 0xff, 0xc0, 0x0, 0x0, 0x0, 0x1a, 0xf7, 0x5, + 0x40, 0x0, 0x2, 0xfb, 0xe, 0xf2, 0x0, 0x6, + 0xf9, 0x5, 0xff, 0xa8, 0xbf, 0xf2, 0x0, 0x3b, + 0xff, 0xea, 0x20, 0x0, 0x0, 0x5f, 0x30, 0x0, + 0x0, 0x0, 0x28, 0x10, 0x0, + + /* U+0025 "%" */ + 0x2, 0xbe, 0xd4, 0x0, 0x0, 0xc4, 0x0, 0xc, + 0x80, 0x5f, 0x10, 0x6, 0xa0, 0x0, 0x2f, 0x20, + 0xe, 0x50, 0x2d, 0x10, 0x0, 0x2f, 0x20, 0xf, + 0x50, 0xb5, 0x0, 0x0, 0xd, 0x90, 0x5f, 0x16, + 0xb0, 0x0, 0x0, 0x2, 0xbf, 0xd4, 0x1e, 0x17, + 0xfe, 0x60, 0x0, 0x0, 0x0, 0xa6, 0x5e, 0x12, + 0xf4, 0x0, 0x0, 0x5, 0xc0, 0xb8, 0x0, 0xa9, + 0x0, 0x0, 0x1d, 0x20, 0xd7, 0x0, 0x9b, 0x0, + 0x0, 0xa7, 0x0, 0xb8, 0x0, 0xaa, 0x0, 0x4, + 0xc0, 0x0, 0x6d, 0x1, 0xe4, 0x0, 0xd, 0x30, + 0x0, 0x8, 0xee, 0x70, + + /* U+0026 "&" */ + 0x0, 0x1a, 0xff, 0xc4, 0x0, 0x0, 0xa, 0xf6, + 0x3a, 0xf3, 0x0, 0x0, 0xed, 0x0, 0x2f, 0x60, + 0x0, 0xa, 0xf1, 0x5, 0xf1, 0x0, 0x0, 0x1e, + 0x95, 0xd3, 0x0, 0x0, 0x4, 0xef, 0xf1, 0x0, + 0xc8, 0x6, 0xfc, 0x7f, 0xa0, 0x2f, 0x60, 0xfe, + 0x0, 0x8f, 0x78, 0xf0, 0x4f, 0xa0, 0x0, 0xbf, + 0xf7, 0x3, 0xfd, 0x0, 0x3, 0xff, 0x20, 0xd, + 0xfc, 0x79, 0xfd, 0xfc, 0x0, 0x1a, 0xff, 0xd7, + 0x6, 0xf9, + + /* U+0027 "'" */ + 0xee, 0xcc, 0xaa, 0x88, 0x11, + + /* U+0028 "(" */ + 0x0, 0xe5, 0x7, 0xe0, 0xe, 0x80, 0x4f, 0x30, + 0x8f, 0x0, 0xcd, 0x0, 0xeb, 0x0, 0xeb, 0x0, + 0xeb, 0x0, 0xcd, 0x0, 0x9f, 0x0, 0x5f, 0x30, + 0xe, 0x70, 0x8, 0xd0, 0x1, 0xf3, + + /* U+0029 ")" */ + 0x7c, 0x0, 0x1f, 0x40, 0xb, 0xb0, 0x6, 0xf1, + 0x2, 0xf6, 0x0, 0xf9, 0x0, 0xeb, 0x0, 0xdb, + 0x0, 0xeb, 0x0, 0xf9, 0x2, 0xf6, 0x6, 0xf2, + 0xa, 0xc0, 0xf, 0x50, 0x6d, 0x0, + + /* U+002A "*" */ + 0x0, 0x3e, 0x0, 0x1, 0x22, 0xd0, 0x40, 0x5f, + 0xce, 0xdd, 0x10, 0xb, 0xf6, 0x0, 0x4, 0xe5, + 0xe1, 0x0, 0x96, 0xa, 0x40, 0x0, 0x0, 0x0, + 0x0, + + /* U+002B "+" */ + 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x2f, 0x20, + 0x0, 0x0, 0x2, 0xf2, 0x0, 0x0, 0x11, 0x4f, + 0x41, 0x10, 0xf, 0xff, 0xff, 0xff, 0x10, 0x44, + 0x6f, 0x64, 0x40, 0x0, 0x2, 0xf2, 0x0, 0x0, + 0x0, 0x2f, 0x20, 0x0, 0x0, 0x0, 0x40, 0x0, + 0x0, + + /* U+002C "," */ + 0x1, 0x1, 0xfe, 0x1f, 0xd0, 0x96, 0x1b, 0x0, + + /* U+002D "-" */ + 0x1, 0x11, 0x10, 0xf, 0xff, 0xf2, 0x4, 0x44, + 0x40, + + /* U+002E "." */ + 0x3, 0x22, 0xfd, 0x2f, 0xd0, + + /* U+002F "/" */ + 0x0, 0x0, 0xe5, 0x0, 0x3, 0xf1, 0x0, 0x8, + 0xb0, 0x0, 0xd, 0x60, 0x0, 0x2f, 0x10, 0x0, + 0x7c, 0x0, 0x0, 0xc7, 0x0, 0x1, 0xf2, 0x0, + 0x6, 0xd0, 0x0, 0xb, 0x90, 0x0, 0xf, 0x40, + 0x0, 0x5e, 0x0, 0x0, 0xaa, 0x0, 0x0, + + /* U+0030 "0" */ + 0x0, 0x2b, 0xff, 0xb2, 0x0, 0x1, 0xef, 0x99, + 0xfe, 0x10, 0x9, 0xf4, 0x0, 0x5f, 0x90, 0xf, + 0xd0, 0x0, 0xe, 0xe0, 0x2f, 0xa0, 0x0, 0xb, + 0xf1, 0x3f, 0x90, 0x0, 0xa, 0xf2, 0x3f, 0x90, + 0x0, 0xa, 0xf2, 0x2f, 0xa0, 0x0, 0xb, 0xf1, + 0xf, 0xd0, 0x0, 0xe, 0xe0, 0xa, 0xf4, 0x0, + 0x5f, 0x90, 0x2, 0xff, 0x9a, 0xfe, 0x10, 0x0, + 0x2b, 0xff, 0xb2, 0x0, + + /* U+0031 "1" */ + 0x0, 0x2c, 0xa4, 0xff, 0xfa, 0x2, 0x3f, 0xa0, + 0x1, 0xfa, 0x0, 0x1f, 0xa0, 0x1, 0xfa, 0x0, + 0x1f, 0xa0, 0x1, 0xfa, 0x0, 0x1f, 0xa0, 0x1, + 0xfa, 0x0, 0x1f, 0xa0, 0x1, 0xfa, + + /* U+0032 "2" */ + 0x0, 0x5c, 0xff, 0xc4, 0x0, 0x7f, 0xe9, 0xaf, + 0xf4, 0xf, 0xd1, 0x0, 0x3f, 0xc3, 0xd6, 0x0, + 0x0, 0xfd, 0x0, 0x0, 0x0, 0x3f, 0xb0, 0x0, + 0x0, 0x5e, 0xf3, 0x0, 0x2, 0xbf, 0xe3, 0x0, + 0x7, 0xff, 0x70, 0x0, 0x6, 0xfc, 0x10, 0x0, + 0x0, 0xef, 0x10, 0x0, 0x0, 0xf, 0xf9, 0x99, + 0x99, 0x80, 0xff, 0xff, 0xff, 0xfe, + + /* U+0033 "3" */ + 0x0, 0x6c, 0xff, 0xd8, 0x10, 0x8, 0xfd, 0x88, + 0xdf, 0xc0, 0xf, 0xc0, 0x0, 0xc, 0xf2, 0x4, + 0x20, 0x0, 0x1d, 0xf0, 0x0, 0x1, 0x9a, 0xee, + 0x40, 0x0, 0x2, 0xff, 0xfb, 0x20, 0x0, 0x0, + 0x0, 0x6f, 0xe0, 0x0, 0x0, 0x0, 0x8, 0xf6, + 0x3e, 0x70, 0x0, 0x6, 0xf7, 0xf, 0xe1, 0x0, + 0xc, 0xf4, 0x7, 0xfe, 0x99, 0xdf, 0xb0, 0x0, + 0x5c, 0xff, 0xc6, 0x0, + + /* U+0034 "4" */ + 0x0, 0x0, 0x4, 0xfd, 0x0, 0x0, 0x0, 0x1e, + 0xfd, 0x0, 0x0, 0x0, 0xbd, 0xed, 0x0, 0x0, + 0x7, 0xf3, 0xed, 0x0, 0x0, 0x3f, 0x70, 0xed, + 0x0, 0x0, 0xdb, 0x0, 0xed, 0x0, 0x9, 0xe1, + 0x0, 0xed, 0x0, 0x3f, 0xc9, 0x99, 0xfe, 0x96, + 0x4f, 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, + 0xdd, 0x0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x0, + 0x0, 0x0, 0xdd, 0x0, + + /* U+0035 "5" */ + 0x2, 0xff, 0xff, 0xff, 0xe0, 0x3, 0xfa, 0x88, + 0x88, 0x70, 0x5, 0xf3, 0x0, 0x0, 0x0, 0x6, + 0xf2, 0x0, 0x0, 0x0, 0x8, 0xf6, 0xdf, 0xe9, + 0x10, 0x9, 0xff, 0xa8, 0xdf, 0xd0, 0x1, 0x72, + 0x0, 0xa, 0xf6, 0x0, 0x0, 0x0, 0x3, 0xf9, + 0x6, 0x40, 0x0, 0x3, 0xf9, 0x1f, 0xe1, 0x0, + 0xa, 0xf5, 0x4, 0xff, 0x98, 0xcf, 0xc0, 0x0, + 0x2a, 0xef, 0xe8, 0x0, + + /* U+0036 "6" */ + 0x0, 0x19, 0xef, 0xd7, 0x0, 0x0, 0xdf, 0xa8, + 0xbf, 0xa0, 0x8, 0xf5, 0x0, 0x8, 0xe2, 0xe, + 0xd0, 0x1, 0x0, 0x0, 0x1f, 0xa5, 0xef, 0xfa, + 0x10, 0x3f, 0xde, 0x75, 0xaf, 0xb0, 0x3f, 0xf2, + 0x0, 0xc, 0xf3, 0x2f, 0xd0, 0x0, 0x7, 0xf5, + 0xf, 0xf0, 0x0, 0x8, 0xf5, 0x9, 0xf6, 0x0, + 0xe, 0xf1, 0x1, 0xef, 0x98, 0xdf, 0x70, 0x0, + 0x1a, 0xef, 0xd6, 0x0, + + /* U+0037 "7" */ + 0x4f, 0xff, 0xff, 0xff, 0xf2, 0x88, 0x88, 0x89, + 0xfe, 0x0, 0x0, 0x0, 0x7f, 0x50, 0x0, 0x0, + 0x1f, 0xc0, 0x0, 0x0, 0x9, 0xf3, 0x0, 0x0, + 0x1, 0xfc, 0x0, 0x0, 0x0, 0x8f, 0x50, 0x0, + 0x0, 0xe, 0xe0, 0x0, 0x0, 0x4, 0xf8, 0x0, + 0x0, 0x0, 0x9f, 0x30, 0x0, 0x0, 0xe, 0xe0, + 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, + + /* U+0038 "8" */ + 0x0, 0x4c, 0xff, 0xd8, 0x0, 0x5, 0xfd, 0x65, + 0x9f, 0xc0, 0xb, 0xf1, 0x0, 0xa, 0xf2, 0xa, + 0xf3, 0x0, 0xb, 0xf1, 0x2, 0xdf, 0xa9, 0xdf, + 0x70, 0x0, 0x9f, 0xff, 0xfd, 0x30, 0xa, 0xf8, + 0x10, 0x4e, 0xf2, 0x2f, 0xc0, 0x0, 0x4, 0xf9, + 0x3f, 0xa0, 0x0, 0x2, 0xfb, 0x1f, 0xe1, 0x0, + 0x8, 0xf8, 0x7, 0xfe, 0x87, 0xbf, 0xe1, 0x0, + 0x5c, 0xff, 0xe9, 0x10, + + /* U+0039 "9" */ + 0x0, 0x5c, 0xff, 0xb2, 0x0, 0x6, 0xfe, 0x88, + 0xef, 0x20, 0xe, 0xe1, 0x0, 0x2f, 0xb0, 0x2f, + 0xb0, 0x0, 0xc, 0xf1, 0x2f, 0xc0, 0x0, 0xc, + 0xf4, 0xd, 0xf6, 0x1, 0x8f, 0xf6, 0x3, 0xef, + 0xff, 0xe7, 0xf5, 0x0, 0x5, 0x86, 0x16, 0xf4, + 0x4, 0x20, 0x0, 0xa, 0xf1, 0x1f, 0xc0, 0x0, + 0x3f, 0xb0, 0x7, 0xfc, 0x8a, 0xfe, 0x20, 0x0, + 0x5d, 0xfe, 0xa2, 0x0, + + /* U+003A ":" */ + 0x2f, 0xd2, 0xfd, 0x2, 0x20, 0x0, 0x0, 0x0, + 0x0, 0x3, 0x22, 0xfd, 0x2f, 0xd0, + + /* U+003B ";" */ + 0xf, 0xf0, 0xf, 0xf0, 0x3, 0x30, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2, 0x30, 0xf, 0xf0, + 0xf, 0xf0, 0x5, 0xb0, 0xa, 0x40, 0xc, 0x0, + + /* U+003C "<" */ + 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x29, 0xfe, + 0x0, 0x5c, 0xff, 0xa3, 0xe, 0xfe, 0x71, 0x0, + 0xf, 0xfa, 0x30, 0x0, 0x2, 0x8e, 0xfd, 0x60, + 0x0, 0x0, 0x6c, 0xfd, 0x0, 0x0, 0x0, 0x38, + + /* U+003D "=" */ + 0xf, 0xff, 0xff, 0xff, 0x10, 0x66, 0x66, 0x66, + 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x11, + 0x11, 0x10, 0xf, 0xff, 0xff, 0xff, 0x10, 0x44, + 0x44, 0x44, 0x40, + + /* U+003E ">" */ + 0x6, 0x0, 0x0, 0x0, 0xf, 0xe8, 0x20, 0x0, + 0x4, 0xbf, 0xfb, 0x40, 0x0, 0x2, 0x8e, 0xfc, + 0x0, 0x0, 0x4b, 0xfe, 0x1, 0x7d, 0xfe, 0x81, + 0xf, 0xfb, 0x50, 0x0, 0x9, 0x20, 0x0, 0x0, + + /* U+003F "?" */ + 0x2, 0xaf, 0xfd, 0x60, 0x2e, 0xe7, 0x6c, 0xf6, + 0x5c, 0x10, 0x0, 0xfc, 0x0, 0x0, 0x0, 0xfb, + 0x0, 0x0, 0x8, 0xf4, 0x0, 0x0, 0x6f, 0x80, + 0x0, 0x2, 0xf8, 0x0, 0x0, 0x9, 0xe0, 0x0, + 0x0, 0x8, 0x70, 0x0, 0x0, 0x2, 0x20, 0x0, + 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x1f, 0xe0, 0x0, + + /* U+0040 "@" */ + 0x0, 0x0, 0x7c, 0xff, 0xc7, 0x0, 0x0, 0x2, + 0xdc, 0x53, 0x36, 0xdd, 0x10, 0x1, 0xd8, 0x0, + 0x0, 0x0, 0xbc, 0x0, 0x8b, 0x2, 0xcf, 0xc6, + 0x51, 0xf3, 0xe, 0x40, 0xdc, 0x4a, 0xf8, 0xb, + 0x72, 0xf0, 0x4f, 0x20, 0x1f, 0x60, 0x99, 0x4e, + 0x7, 0xe0, 0x0, 0xf3, 0xa, 0x84, 0xe0, 0x7e, + 0x0, 0x3f, 0x10, 0xd5, 0x1f, 0x13, 0xf4, 0x1c, + 0xf1, 0x6e, 0x0, 0xc7, 0xa, 0xff, 0xac, 0xfe, + 0x30, 0x4, 0xf3, 0x2, 0x10, 0x2, 0x0, 0x0, + 0x7, 0xf8, 0x20, 0x2, 0xa3, 0x0, 0x0, 0x4, + 0xbf, 0xff, 0xe8, 0x0, 0x0, 0x0, 0x0, 0x1, + 0x10, 0x0, 0x0, + + /* U+0041 "A" */ + 0x0, 0x0, 0x6f, 0xd0, 0x0, 0x0, 0x0, 0xb, + 0xff, 0x20, 0x0, 0x0, 0x1, 0xf7, 0xf8, 0x0, + 0x0, 0x0, 0x7f, 0x1a, 0xd0, 0x0, 0x0, 0xc, + 0xb0, 0x4f, 0x30, 0x0, 0x2, 0xf6, 0x0, 0xe9, + 0x0, 0x0, 0x7f, 0x10, 0x9, 0xe0, 0x0, 0xd, + 0xff, 0xff, 0xff, 0x40, 0x2, 0xfc, 0xaa, 0xaa, + 0xf9, 0x0, 0x8f, 0x20, 0x0, 0xb, 0xe0, 0xe, + 0xd0, 0x0, 0x0, 0x6f, 0x43, 0xf8, 0x0, 0x0, + 0x1, 0xfa, + + /* U+0042 "B" */ + 0x8f, 0xff, 0xfe, 0xb3, 0x8, 0xf9, 0x77, 0x9f, + 0xf3, 0x8f, 0x20, 0x0, 0x3f, 0x98, 0xf2, 0x0, + 0x1, 0xf9, 0x8f, 0x20, 0x1, 0xaf, 0x38, 0xff, + 0xff, 0xfe, 0x40, 0x8f, 0x98, 0x8a, 0xfe, 0x28, + 0xf2, 0x0, 0x2, 0xfb, 0x8f, 0x20, 0x0, 0xd, + 0xe8, 0xf2, 0x0, 0x1, 0xfd, 0x8f, 0x97, 0x79, + 0xef, 0x68, 0xff, 0xff, 0xfc, 0x50, + + /* U+0043 "C" */ + 0x0, 0x7, 0xdf, 0xfb, 0x30, 0x0, 0xb, 0xfd, + 0x9a, 0xff, 0x40, 0x6, 0xfa, 0x0, 0x3, 0xfe, + 0x0, 0xdf, 0x10, 0x0, 0x9, 0xe3, 0xf, 0xd0, + 0x0, 0x0, 0x0, 0x2, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x2f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xfd, + 0x0, 0x0, 0x0, 0x0, 0xc, 0xf1, 0x0, 0x0, + 0xaf, 0x30, 0x6f, 0xa0, 0x0, 0x3f, 0xe0, 0x0, + 0xbf, 0xd9, 0xaf, 0xf4, 0x0, 0x0, 0x7d, 0xff, + 0xb4, 0x0, + + /* U+0044 "D" */ + 0x8f, 0xff, 0xec, 0x70, 0x0, 0x8f, 0x98, 0xae, + 0xfc, 0x10, 0x8f, 0x30, 0x0, 0x9f, 0xa0, 0x8f, + 0x30, 0x0, 0xd, 0xf0, 0x8f, 0x30, 0x0, 0x8, + 0xf4, 0x8f, 0x30, 0x0, 0x7, 0xf5, 0x8f, 0x30, + 0x0, 0x7, 0xf5, 0x8f, 0x30, 0x0, 0x9, 0xf3, + 0x8f, 0x30, 0x0, 0xe, 0xf0, 0x8f, 0x30, 0x0, + 0xaf, 0x80, 0x8f, 0xa8, 0xae, 0xfb, 0x0, 0x8f, + 0xff, 0xeb, 0x50, 0x0, + + /* U+0045 "E" */ + 0x8f, 0xff, 0xff, 0xfe, 0x8, 0xfa, 0x99, 0x99, + 0x80, 0x8f, 0x30, 0x0, 0x0, 0x8, 0xf3, 0x0, + 0x0, 0x0, 0x8f, 0x30, 0x0, 0x0, 0x8, 0xff, + 0xff, 0xff, 0x50, 0x8f, 0xa9, 0x99, 0x92, 0x8, + 0xf2, 0x0, 0x0, 0x0, 0x8f, 0x20, 0x0, 0x0, + 0x8, 0xf2, 0x0, 0x0, 0x0, 0x8f, 0xa9, 0x99, + 0x99, 0x8, 0xff, 0xff, 0xff, 0xf1, + + /* U+0046 "F" */ + 0x8f, 0xff, 0xff, 0xfd, 0x8f, 0xa9, 0x99, 0x97, + 0x8f, 0x30, 0x0, 0x0, 0x8f, 0x30, 0x0, 0x0, + 0x8f, 0x30, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xf3, + 0x8f, 0xa8, 0x88, 0x81, 0x8f, 0x30, 0x0, 0x0, + 0x8f, 0x30, 0x0, 0x0, 0x8f, 0x30, 0x0, 0x0, + 0x8f, 0x30, 0x0, 0x0, 0x8f, 0x30, 0x0, 0x0, + + /* U+0047 "G" */ + 0x0, 0x6, 0xcf, 0xfb, 0x40, 0x0, 0xa, 0xfe, + 0xab, 0xff, 0x70, 0x5, 0xfb, 0x0, 0x2, 0xef, + 0x20, 0xcf, 0x20, 0x0, 0x3, 0x62, 0xf, 0xd0, + 0x0, 0x1, 0x11, 0x2, 0xfb, 0x0, 0xf, 0xff, + 0xf8, 0x2f, 0xb0, 0x0, 0x34, 0x7f, 0x80, 0xfd, + 0x0, 0x0, 0x5, 0xf8, 0xd, 0xf2, 0x0, 0x0, + 0x9f, 0x80, 0x6f, 0xb0, 0x0, 0x3f, 0xf8, 0x0, + 0xbf, 0xea, 0xbf, 0xdc, 0x80, 0x0, 0x7d, 0xff, + 0xa1, 0xb8, + + /* U+0048 "H" */ + 0x8f, 0x20, 0x0, 0x0, 0xed, 0x8f, 0x20, 0x0, + 0x0, 0xed, 0x8f, 0x20, 0x0, 0x0, 0xed, 0x8f, + 0x20, 0x0, 0x0, 0xed, 0x8f, 0x20, 0x0, 0x0, + 0xed, 0x8f, 0xff, 0xff, 0xff, 0xfd, 0x8f, 0xa9, + 0x99, 0x99, 0xfd, 0x8f, 0x20, 0x0, 0x0, 0xed, + 0x8f, 0x20, 0x0, 0x0, 0xed, 0x8f, 0x20, 0x0, + 0x0, 0xed, 0x8f, 0x20, 0x0, 0x0, 0xed, 0x8f, + 0x20, 0x0, 0x0, 0xed, + + /* U+0049 "I" */ + 0x8f, 0x28, 0xf2, 0x8f, 0x28, 0xf2, 0x8f, 0x28, + 0xf2, 0x8f, 0x28, 0xf2, 0x8f, 0x28, 0xf2, 0x8f, + 0x28, 0xf2, + + /* U+004A "J" */ + 0x0, 0x9, 0xf1, 0x0, 0x9, 0xf1, 0x0, 0x9, + 0xf1, 0x0, 0x9, 0xf1, 0x0, 0x9, 0xf1, 0x0, + 0x9, 0xf1, 0x0, 0x9, 0xf1, 0x0, 0x9, 0xf1, + 0x0, 0x9, 0xf1, 0x0, 0xc, 0xf1, 0x5c, 0xdf, + 0xe0, 0x4e, 0xfd, 0x40, + + /* U+004B "K" */ + 0x8f, 0x40, 0x0, 0x4f, 0xc0, 0x8f, 0x40, 0x2, + 0xee, 0x10, 0x8f, 0x40, 0xd, 0xf3, 0x0, 0x8f, + 0x40, 0xaf, 0x50, 0x0, 0x8f, 0x48, 0xfa, 0x0, + 0x0, 0x8f, 0x9f, 0xfd, 0x0, 0x0, 0x8f, 0xfb, + 0x8f, 0x60, 0x0, 0x8f, 0xd1, 0xe, 0xe1, 0x0, + 0x8f, 0x40, 0x6, 0xf8, 0x0, 0x8f, 0x40, 0x0, + 0xcf, 0x20, 0x8f, 0x40, 0x0, 0x3f, 0xa0, 0x8f, + 0x40, 0x0, 0xa, 0xf3, + + /* U+004C "L" */ + 0x8f, 0x30, 0x0, 0x0, 0x8f, 0x30, 0x0, 0x0, + 0x8f, 0x30, 0x0, 0x0, 0x8f, 0x30, 0x0, 0x0, + 0x8f, 0x30, 0x0, 0x0, 0x8f, 0x30, 0x0, 0x0, + 0x8f, 0x30, 0x0, 0x0, 0x8f, 0x30, 0x0, 0x0, + 0x8f, 0x30, 0x0, 0x0, 0x8f, 0x30, 0x0, 0x0, + 0x8f, 0xb9, 0x99, 0x95, 0x8f, 0xff, 0xff, 0xf8, + + /* U+004D "M" */ + 0x8f, 0xf1, 0x0, 0x0, 0xb, 0xfd, 0x8f, 0xf6, + 0x0, 0x0, 0x1f, 0xfd, 0x8f, 0xfb, 0x0, 0x0, + 0x6f, 0xfd, 0x8f, 0xaf, 0x10, 0x0, 0xcb, 0xed, + 0x8f, 0x5f, 0x60, 0x1, 0xf6, 0xed, 0x8f, 0x3c, + 0xc0, 0x7, 0xf1, 0xed, 0x8f, 0x37, 0xf1, 0xc, + 0xb0, 0xed, 0x8f, 0x32, 0xf7, 0x2f, 0x60, 0xed, + 0x8f, 0x30, 0xcc, 0x8f, 0x10, 0xed, 0x8f, 0x30, + 0x7f, 0xeb, 0x0, 0xed, 0x8f, 0x30, 0x1f, 0xf6, + 0x0, 0xed, 0x8f, 0x30, 0xc, 0xf1, 0x0, 0xed, + + /* U+004E "N" */ + 0x8f, 0x70, 0x0, 0x0, 0xfb, 0x8f, 0xf2, 0x0, + 0x0, 0xfb, 0x8f, 0xfc, 0x0, 0x0, 0xfb, 0x8f, + 0x9f, 0x60, 0x0, 0xfb, 0x8f, 0x2b, 0xf2, 0x0, + 0xfb, 0x8f, 0x22, 0xfb, 0x0, 0xfb, 0x8f, 0x20, + 0x6f, 0x60, 0xfb, 0x8f, 0x20, 0xc, 0xf1, 0xfb, + 0x8f, 0x20, 0x2, 0xfb, 0xfb, 0x8f, 0x20, 0x0, + 0x7f, 0xfb, 0x8f, 0x20, 0x0, 0xc, 0xfb, 0x8f, + 0x20, 0x0, 0x2, 0xfb, + + /* U+004F "O" */ + 0x0, 0x6, 0xcf, 0xfc, 0x50, 0x0, 0x0, 0xaf, + 0xe9, 0x9e, 0xf8, 0x0, 0x6, 0xfb, 0x0, 0x0, + 0xcf, 0x40, 0xc, 0xf2, 0x0, 0x0, 0x3f, 0xa0, + 0xf, 0xd0, 0x0, 0x0, 0xf, 0xe0, 0x2f, 0xb0, + 0x0, 0x0, 0xe, 0xf0, 0x2f, 0xb0, 0x0, 0x0, + 0xe, 0xf0, 0xf, 0xd0, 0x0, 0x0, 0xf, 0xe0, + 0xd, 0xf1, 0x0, 0x0, 0x3f, 0xb0, 0x6, 0xfb, + 0x0, 0x0, 0xcf, 0x40, 0x0, 0xaf, 0xd9, 0x9e, + 0xf9, 0x0, 0x0, 0x6, 0xcf, 0xfc, 0x50, 0x0, + + /* U+0050 "P" */ + 0x8f, 0xff, 0xfe, 0xa2, 0x8, 0xf9, 0x77, 0x9f, + 0xe2, 0x8f, 0x30, 0x0, 0x3f, 0x98, 0xf3, 0x0, + 0x0, 0xdc, 0x8f, 0x30, 0x0, 0xf, 0xb8, 0xf3, + 0x0, 0x2b, 0xf6, 0x8f, 0xff, 0xff, 0xf9, 0x8, + 0xf9, 0x88, 0x62, 0x0, 0x8f, 0x30, 0x0, 0x0, + 0x8, 0xf3, 0x0, 0x0, 0x0, 0x8f, 0x30, 0x0, + 0x0, 0x8, 0xf3, 0x0, 0x0, 0x0, + + /* U+0051 "Q" */ + 0x0, 0x6, 0xcf, 0xfc, 0x50, 0x0, 0x0, 0xaf, + 0xe9, 0x9e, 0xf9, 0x0, 0x6, 0xfb, 0x0, 0x0, + 0xcf, 0x40, 0xc, 0xf2, 0x0, 0x0, 0x3f, 0xa0, + 0xf, 0xd0, 0x0, 0x0, 0xf, 0xe0, 0x2f, 0xc0, + 0x0, 0x0, 0xd, 0xf0, 0x2f, 0xb0, 0x0, 0x0, + 0xd, 0xf0, 0xf, 0xd0, 0x0, 0x0, 0xf, 0xe0, + 0xd, 0xf1, 0x0, 0x0, 0x3f, 0xa0, 0x6, 0xfb, + 0x0, 0x0, 0xcf, 0x30, 0x0, 0xbf, 0xd9, 0x9e, + 0xf7, 0x0, 0x0, 0x6, 0xdf, 0xff, 0xf2, 0x0, + 0x0, 0x0, 0x0, 0x4, 0xfe, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x4c, 0xe0, + + /* U+0052 "R" */ + 0x8f, 0xff, 0xff, 0xd5, 0x8, 0xf8, 0x77, 0x8e, + 0xf5, 0x8f, 0x20, 0x0, 0x2f, 0xb8, 0xf2, 0x0, + 0x0, 0xed, 0x8f, 0x20, 0x0, 0x1f, 0xc8, 0xf4, + 0x22, 0x4c, 0xf6, 0x8f, 0xff, 0xff, 0xf8, 0x8, + 0xf7, 0x55, 0xde, 0x0, 0x8f, 0x20, 0x6, 0xf5, + 0x8, 0xf2, 0x0, 0xe, 0xc0, 0x8f, 0x20, 0x0, + 0x8f, 0x48, 0xf2, 0x0, 0x1, 0xfb, + + /* U+0053 "S" */ + 0x0, 0x2a, 0xef, 0xea, 0x20, 0x2, 0xff, 0x98, + 0xaf, 0xe1, 0xa, 0xf4, 0x0, 0x5, 0xf9, 0xc, + 0xf1, 0x0, 0x0, 0x75, 0x8, 0xfb, 0x20, 0x0, + 0x0, 0x1, 0xcf, 0xfe, 0xa6, 0x0, 0x0, 0x3, + 0x8c, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x7, 0xfb, + 0x6, 0x40, 0x0, 0x0, 0xee, 0xe, 0xf2, 0x0, + 0x2, 0xfb, 0x4, 0xff, 0xa8, 0x9f, 0xf3, 0x0, + 0x2a, 0xef, 0xea, 0x20, + + /* U+0054 "T" */ + 0xaf, 0xff, 0xff, 0xff, 0xf3, 0x6a, 0xaa, 0xfe, + 0xaa, 0xa2, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xfc, + 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0xfc, 0x0, 0x0, + + /* U+0055 "U" */ + 0x8f, 0x30, 0x0, 0x9, 0xf2, 0x8f, 0x30, 0x0, + 0x9, 0xf2, 0x8f, 0x30, 0x0, 0x9, 0xf2, 0x8f, + 0x30, 0x0, 0x9, 0xf2, 0x8f, 0x30, 0x0, 0x9, + 0xf2, 0x8f, 0x30, 0x0, 0x9, 0xf2, 0x8f, 0x30, + 0x0, 0x9, 0xf2, 0x8f, 0x30, 0x0, 0x9, 0xf2, + 0x7f, 0x50, 0x0, 0xa, 0xf1, 0x3f, 0xb0, 0x0, + 0x2f, 0xd0, 0xc, 0xfd, 0x9a, 0xff, 0x60, 0x0, + 0x8e, 0xff, 0xc5, 0x0, + + /* U+0056 "V" */ + 0x7f, 0x30, 0x0, 0x0, 0x5f, 0x62, 0xf8, 0x0, + 0x0, 0xa, 0xf0, 0xc, 0xe0, 0x0, 0x0, 0xfb, + 0x0, 0x7f, 0x30, 0x0, 0x5f, 0x50, 0x1, 0xf9, + 0x0, 0xa, 0xf0, 0x0, 0xc, 0xe0, 0x0, 0xfa, + 0x0, 0x0, 0x6f, 0x40, 0x5f, 0x50, 0x0, 0x1, + 0xf9, 0xb, 0xf0, 0x0, 0x0, 0xc, 0xe1, 0xfa, + 0x0, 0x0, 0x0, 0x6f, 0xaf, 0x40, 0x0, 0x0, + 0x1, 0xff, 0xf0, 0x0, 0x0, 0x0, 0xb, 0xfa, + 0x0, 0x0, + + /* U+0057 "W" */ + 0x8f, 0x30, 0x0, 0x2f, 0x60, 0x0, 0xd, 0xd3, + 0xf7, 0x0, 0x6, 0xfb, 0x0, 0x2, 0xf8, 0xe, + 0xb0, 0x0, 0xbf, 0xf0, 0x0, 0x6f, 0x40, 0xaf, + 0x0, 0xf, 0xcf, 0x40, 0xb, 0xf0, 0x6, 0xf4, + 0x3, 0xf4, 0xf8, 0x0, 0xfb, 0x0, 0x1f, 0x80, + 0x8f, 0xb, 0xc0, 0x3f, 0x60, 0x0, 0xdd, 0xc, + 0xb0, 0x6f, 0x18, 0xf2, 0x0, 0x8, 0xf2, 0xf6, + 0x2, 0xf5, 0xcd, 0x0, 0x0, 0x4f, 0xaf, 0x20, + 0xe, 0xaf, 0x90, 0x0, 0x0, 0xff, 0xd0, 0x0, + 0x9f, 0xf4, 0x0, 0x0, 0xb, 0xf9, 0x0, 0x5, + 0xff, 0x0, 0x0, 0x0, 0x7f, 0x40, 0x0, 0x1f, + 0xb0, 0x0, + + /* U+0058 "X" */ + 0xe, 0xf2, 0x0, 0x1, 0xfc, 0x0, 0x4f, 0xc0, + 0x0, 0xaf, 0x30, 0x0, 0xaf, 0x60, 0x4f, 0x80, + 0x0, 0x1, 0xfe, 0x1d, 0xd0, 0x0, 0x0, 0x6, + 0xfe, 0xf4, 0x0, 0x0, 0x0, 0xc, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0xdf, 0xe1, 0x0, 0x0, 0x0, + 0x8f, 0xaf, 0xa0, 0x0, 0x0, 0x3f, 0xa0, 0xcf, + 0x40, 0x0, 0xc, 0xe1, 0x2, 0xfe, 0x0, 0x7, + 0xf6, 0x0, 0x8, 0xf9, 0x2, 0xfc, 0x0, 0x0, + 0xd, 0xf3, + + /* U+0059 "Y" */ + 0x8f, 0x50, 0x0, 0x5, 0xf8, 0xe, 0xd0, 0x0, + 0xd, 0xe0, 0x6, 0xf6, 0x0, 0x7f, 0x50, 0x0, + 0xde, 0x10, 0xec, 0x0, 0x0, 0x3f, 0x88, 0xf3, + 0x0, 0x0, 0xa, 0xff, 0xa0, 0x0, 0x0, 0x2, + 0xff, 0x20, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x0, + 0x0, 0x0, 0xdd, 0x0, 0x0, 0x0, 0x0, 0xdd, + 0x0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x0, 0x0, + 0x0, 0xdd, 0x0, 0x0, + + /* U+005A "Z" */ + 0xb, 0xff, 0xff, 0xff, 0xf9, 0x6, 0x99, 0x99, + 0x9f, 0xf3, 0x0, 0x0, 0x0, 0x6f, 0x80, 0x0, + 0x0, 0x2, 0xfd, 0x0, 0x0, 0x0, 0xb, 0xf3, + 0x0, 0x0, 0x0, 0x6f, 0x90, 0x0, 0x0, 0x1, + 0xfd, 0x0, 0x0, 0x0, 0xb, 0xf4, 0x0, 0x0, + 0x0, 0x5f, 0x90, 0x0, 0x0, 0x1, 0xee, 0x0, + 0x0, 0x0, 0xa, 0xfc, 0x99, 0x99, 0x95, 0xf, + 0xff, 0xff, 0xff, 0xf9, + + /* U+005B "[" */ + 0xaf, 0xf8, 0xad, 0x21, 0xad, 0x0, 0xad, 0x0, + 0xad, 0x0, 0xad, 0x0, 0xad, 0x0, 0xad, 0x0, + 0xad, 0x0, 0xad, 0x0, 0xad, 0x0, 0xad, 0x0, + 0xad, 0x0, 0xad, 0x21, 0xaf, 0xf8, + + /* U+005C "\\" */ + 0xaa, 0x0, 0x0, 0x5e, 0x0, 0x0, 0xf, 0x40, + 0x0, 0xb, 0x90, 0x0, 0x6, 0xd0, 0x0, 0x1, + 0xf2, 0x0, 0x0, 0xc7, 0x0, 0x0, 0x7c, 0x0, + 0x0, 0x2f, 0x10, 0x0, 0xd, 0x60, 0x0, 0x8, + 0xb0, 0x0, 0x3, 0xf1, 0x0, 0x0, 0xe5, + + /* U+005D "]" */ + 0x8f, 0xfa, 0x12, 0xda, 0x0, 0xda, 0x0, 0xda, + 0x0, 0xda, 0x0, 0xda, 0x0, 0xda, 0x0, 0xda, + 0x0, 0xda, 0x0, 0xda, 0x0, 0xda, 0x0, 0xda, + 0x0, 0xda, 0x12, 0xda, 0x8f, 0xfa, + + /* U+005E "^" */ + 0x0, 0x9, 0x30, 0x0, 0x3, 0xfb, 0x0, 0x0, + 0x9c, 0xf1, 0x0, 0xf, 0x4c, 0x70, 0x5, 0xd0, + 0x6d, 0x0, 0xb8, 0x0, 0xf4, 0x2f, 0x20, 0xa, + 0xa0, + + /* U+005F "_" */ + 0x1, 0x11, 0x11, 0x10, 0xf, 0xff, 0xff, 0xf7, + 0x4, 0x44, 0x44, 0x42, + + /* U+0060 "`" */ + 0x58, 0x10, 0x2e, 0xa0, 0x3, 0xf4, + + /* U+0061 "a" */ + 0x0, 0x9e, 0xfe, 0x90, 0x9, 0xf8, 0x58, 0xf9, + 0x4, 0x40, 0x0, 0xcd, 0x1, 0x8d, 0xee, 0xfe, + 0xc, 0xf6, 0x21, 0xce, 0x2f, 0x80, 0x0, 0xce, + 0x3f, 0x70, 0x1, 0xfe, 0xe, 0xe6, 0x5c, 0xde, + 0x3, 0xdf, 0xd4, 0x9e, + + /* U+0062 "b" */ + 0xde, 0x0, 0x0, 0x0, 0xde, 0x0, 0x0, 0x0, + 0xde, 0x0, 0x0, 0x0, 0xde, 0x0, 0x0, 0x0, + 0xde, 0x4d, 0xfd, 0x50, 0xdf, 0xd7, 0x7e, 0xf3, + 0xdf, 0x30, 0x3, 0xfa, 0xdf, 0x0, 0x0, 0xed, + 0xde, 0x0, 0x0, 0xde, 0xdf, 0x0, 0x0, 0xed, + 0xdf, 0x30, 0x3, 0xf9, 0xdc, 0xe7, 0x7e, 0xf2, + 0xd8, 0x5d, 0xfd, 0x40, + + /* U+0063 "c" */ + 0x0, 0x6d, 0xfe, 0x60, 0x6, 0xfc, 0x7b, 0xf6, + 0xe, 0xc0, 0x0, 0xcd, 0x3f, 0x60, 0x0, 0x0, + 0x4f, 0x50, 0x0, 0x0, 0x3f, 0x60, 0x0, 0x0, + 0xf, 0xc0, 0x0, 0xac, 0x7, 0xfa, 0x69, 0xf6, + 0x0, 0x6d, 0xfe, 0x70, + + /* U+0064 "d" */ + 0x0, 0x0, 0x0, 0x4f, 0x70, 0x0, 0x0, 0x4, + 0xf7, 0x0, 0x0, 0x0, 0x4f, 0x70, 0x0, 0x0, + 0x4, 0xf7, 0x0, 0x9f, 0xfa, 0x5f, 0x70, 0x9f, + 0xb6, 0x9e, 0xf7, 0xf, 0xc0, 0x0, 0xaf, 0x73, + 0xf7, 0x0, 0x5, 0xf7, 0x4f, 0x60, 0x0, 0x4f, + 0x73, 0xf8, 0x0, 0x5, 0xf7, 0xf, 0xc0, 0x0, + 0xaf, 0x70, 0x9f, 0xb6, 0x9c, 0xf7, 0x0, 0x8e, + 0xfb, 0x1e, 0x70, + + /* U+0065 "e" */ + 0x0, 0x5d, 0xfe, 0x80, 0x0, 0x5f, 0xb5, 0x9f, + 0x80, 0xd, 0xd0, 0x0, 0xaf, 0x2, 0xf8, 0x0, + 0x5, 0xf3, 0x3f, 0xff, 0xff, 0xff, 0x42, 0xf9, + 0x33, 0x33, 0x30, 0xe, 0xc0, 0x0, 0x4a, 0x20, + 0x5f, 0xb6, 0x8f, 0xc0, 0x0, 0x5c, 0xfe, 0x91, + 0x0, + + /* U+0066 "f" */ + 0x0, 0x4e, 0xff, 0x0, 0xbf, 0x54, 0x0, 0xce, + 0x0, 0x7f, 0xff, 0xfe, 0x25, 0xdf, 0x54, 0x0, + 0xcf, 0x0, 0x0, 0xcf, 0x0, 0x0, 0xcf, 0x0, + 0x0, 0xcf, 0x0, 0x0, 0xcf, 0x0, 0x0, 0xcf, + 0x0, 0x0, 0xcf, 0x0, + + /* U+0067 "g" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d, 0xff, + 0xa6, 0xd6, 0x6, 0xf8, 0x13, 0xef, 0xa3, 0xc, + 0xf0, 0x0, 0x7f, 0x20, 0xc, 0xe0, 0x0, 0x7f, + 0x20, 0x7, 0xf6, 0x1, 0xdd, 0x0, 0x0, 0xbf, + 0xff, 0xc2, 0x0, 0x8, 0xfc, 0xcb, 0x95, 0x0, + 0x9, 0xff, 0xff, 0xff, 0x70, 0x8, 0xa0, 0x0, + 0x2e, 0xd0, 0x6f, 0x40, 0x0, 0xc, 0xd0, 0x4f, + 0xc4, 0x22, 0x7f, 0x70, 0x5, 0xbe, 0xff, 0xc6, + 0x0, + + /* U+0068 "h" */ + 0xdd, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x0, 0x0, + 0xdd, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x0, 0x0, + 0xdd, 0x5d, 0xfc, 0x30, 0xdf, 0xd8, 0x9f, 0xe0, + 0xdf, 0x10, 0x9, 0xf3, 0xde, 0x0, 0x7, 0xf4, + 0xde, 0x0, 0x7, 0xf4, 0xde, 0x0, 0x7, 0xf4, + 0xde, 0x0, 0x7, 0xf4, 0xde, 0x0, 0x7, 0xf4, + 0xde, 0x0, 0x7, 0xf4, + + /* U+0069 "i" */ + 0xde, 0xab, 0x0, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, + + /* U+006A "j" */ + 0x0, 0xaf, 0x20, 0x8, 0xc2, 0x0, 0x0, 0x0, + 0x9, 0xf2, 0x0, 0x9f, 0x20, 0x9, 0xf2, 0x0, + 0x9f, 0x20, 0x9, 0xf2, 0x0, 0x9f, 0x20, 0x9, + 0xf2, 0x0, 0x9f, 0x20, 0x9, 0xf2, 0x0, 0x9f, + 0x12, 0x7e, 0xf0, 0x4f, 0xe6, 0x0, + + /* U+006B "k" */ + 0xde, 0x0, 0x0, 0x0, 0xde, 0x0, 0x0, 0x0, + 0xde, 0x0, 0x0, 0x0, 0xde, 0x0, 0x0, 0x0, + 0xde, 0x0, 0x1d, 0xe1, 0xde, 0x0, 0xbf, 0x30, + 0xde, 0x9, 0xf4, 0x0, 0xde, 0x7f, 0xa0, 0x0, + 0xdf, 0xfe, 0xf1, 0x0, 0xdf, 0x92, 0xf9, 0x0, + 0xde, 0x0, 0x9f, 0x30, 0xde, 0x0, 0x1e, 0xc0, + 0xde, 0x0, 0x7, 0xf5, + + /* U+006C "l" */ + 0xdd, 0x0, 0xdd, 0x0, 0xdd, 0x0, 0xdd, 0x0, + 0xdd, 0x0, 0xdd, 0x0, 0xdd, 0x0, 0xdd, 0x0, + 0xdd, 0x0, 0xdd, 0x0, 0xdd, 0x0, 0xbf, 0x71, + 0x3d, 0xf2, + + /* U+006D "m" */ + 0xdd, 0x6e, 0xfb, 0x27, 0xef, 0xa1, 0xdf, 0xc6, + 0xaf, 0xfc, 0x6a, 0xf9, 0xdf, 0x0, 0xe, 0xf0, + 0x0, 0xee, 0xde, 0x0, 0xd, 0xe0, 0x0, 0xcf, + 0xde, 0x0, 0xd, 0xe0, 0x0, 0xcf, 0xde, 0x0, + 0xd, 0xe0, 0x0, 0xcf, 0xde, 0x0, 0xd, 0xe0, + 0x0, 0xcf, 0xde, 0x0, 0xd, 0xe0, 0x0, 0xcf, + 0xde, 0x0, 0xd, 0xe0, 0x0, 0xcf, + + /* U+006E "n" */ + 0xdd, 0x6e, 0xfc, 0x30, 0xdf, 0xc6, 0x8f, 0xe0, + 0xdf, 0x0, 0x9, 0xf3, 0xde, 0x0, 0x7, 0xf4, + 0xde, 0x0, 0x7, 0xf4, 0xde, 0x0, 0x7, 0xf4, + 0xde, 0x0, 0x7, 0xf4, 0xde, 0x0, 0x7, 0xf4, + 0xde, 0x0, 0x7, 0xf4, + + /* U+006F "o" */ + 0x0, 0x6d, 0xfe, 0x70, 0x0, 0x7f, 0xb6, 0xaf, + 0x80, 0xf, 0xc0, 0x0, 0xbf, 0x13, 0xf7, 0x0, + 0x6, 0xf5, 0x4f, 0x60, 0x0, 0x5f, 0x63, 0xf8, + 0x0, 0x6, 0xf5, 0xf, 0xd0, 0x0, 0xbf, 0x10, + 0x7f, 0xb6, 0xaf, 0x90, 0x0, 0x7d, 0xfe, 0x70, + 0x0, + + /* U+0070 "p" */ + 0xde, 0x3c, 0xfd, 0x50, 0xdf, 0xd5, 0x4c, 0xf3, + 0xdf, 0x30, 0x2, 0xfa, 0xdf, 0x0, 0x0, 0xdd, + 0xde, 0x0, 0x0, 0xcd, 0xdf, 0x0, 0x0, 0xdc, + 0xdf, 0x50, 0x3, 0xf9, 0xde, 0xe8, 0x7e, 0xf2, + 0xde, 0x3d, 0xfd, 0x40, 0xde, 0x0, 0x0, 0x0, + 0xde, 0x0, 0x0, 0x0, 0xde, 0x0, 0x0, 0x0, + + /* U+0071 "q" */ + 0x0, 0xaf, 0xf9, 0x5f, 0x60, 0xaf, 0xb6, 0xad, + 0xf6, 0x1f, 0xc0, 0x0, 0xbf, 0x63, 0xf6, 0x0, + 0x6, 0xf6, 0x4f, 0x50, 0x0, 0x4f, 0x63, 0xf7, + 0x0, 0x6, 0xf6, 0xf, 0xc0, 0x0, 0xcf, 0x60, + 0x9f, 0xb6, 0xbd, 0xf6, 0x0, 0x8e, 0xf9, 0x5f, + 0x60, 0x0, 0x0, 0x4, 0xf6, 0x0, 0x0, 0x0, + 0x4f, 0x60, 0x0, 0x0, 0x4, 0xf6, + + /* U+0072 "r" */ + 0xdc, 0x4d, 0xdd, 0xee, 0xa8, 0xdf, 0x30, 0xd, + 0xe0, 0x0, 0xde, 0x0, 0xd, 0xe0, 0x0, 0xde, + 0x0, 0xd, 0xe0, 0x0, 0xde, 0x0, 0x0, + + /* U+0073 "s" */ + 0x1, 0xaf, 0xfc, 0x40, 0xb, 0xe6, 0x5c, 0xf2, + 0xf, 0x90, 0x1, 0x93, 0xd, 0xf8, 0x30, 0x0, + 0x2, 0xbf, 0xff, 0x70, 0x0, 0x0, 0x4a, 0xf4, + 0x2c, 0x50, 0x0, 0xf7, 0xd, 0xe7, 0x5a, 0xf3, + 0x1, 0xae, 0xfd, 0x60, + + /* U+0074 "t" */ + 0x0, 0x45, 0x0, 0x0, 0xab, 0x0, 0x0, 0xdb, + 0x0, 0x5f, 0xff, 0xf9, 0x15, 0xfd, 0x52, 0x0, + 0xfb, 0x0, 0x0, 0xfb, 0x0, 0x0, 0xfb, 0x0, + 0x0, 0xfb, 0x0, 0x0, 0xfb, 0x0, 0x0, 0xee, + 0x63, 0x0, 0x5e, 0xf9, + + /* U+0075 "u" */ + 0xfc, 0x0, 0x8, 0xf3, 0xfc, 0x0, 0x8, 0xf3, + 0xfc, 0x0, 0x8, 0xf3, 0xfc, 0x0, 0x8, 0xf3, + 0xfc, 0x0, 0x8, 0xf3, 0xfc, 0x0, 0x8, 0xf3, + 0xee, 0x0, 0xa, 0xf3, 0x9f, 0xb6, 0x9d, 0xf3, + 0x9, 0xef, 0xb4, 0xf3, + + /* U+0076 "v" */ + 0x7f, 0x10, 0x0, 0xea, 0x2f, 0x60, 0x4, 0xf5, + 0xd, 0xb0, 0x9, 0xf0, 0x7, 0xf0, 0xe, 0xa0, + 0x2, 0xf5, 0x3f, 0x40, 0x0, 0xda, 0x8f, 0x0, + 0x0, 0x7f, 0xda, 0x0, 0x0, 0x2f, 0xf4, 0x0, + 0x0, 0xc, 0xf0, 0x0, + + /* U+0077 "w" */ + 0x7f, 0x10, 0x8, 0xf0, 0x0, 0x9f, 0x3, 0xf5, + 0x0, 0xcf, 0x50, 0xd, 0xb0, 0xe, 0x90, 0x1f, + 0xf9, 0x1, 0xf7, 0x0, 0xae, 0x5, 0xf9, 0xd0, + 0x5f, 0x20, 0x5, 0xf2, 0x9b, 0x4f, 0x2a, 0xd0, + 0x0, 0x1f, 0x7e, 0x70, 0xf6, 0xe9, 0x0, 0x0, + 0xcd, 0xf2, 0xb, 0xdf, 0x40, 0x0, 0x7, 0xfe, + 0x0, 0x6f, 0xf0, 0x0, 0x0, 0x3f, 0xa0, 0x2, + 0xfb, 0x0, 0x0, + + /* U+0078 "x" */ + 0x1e, 0xd0, 0x0, 0xbf, 0x20, 0x4f, 0x90, 0x6f, + 0x60, 0x0, 0x9f, 0x6f, 0xb0, 0x0, 0x0, 0xef, + 0xf1, 0x0, 0x0, 0x9, 0xfb, 0x0, 0x0, 0x3, + 0xfe, 0xf5, 0x0, 0x0, 0xde, 0x1d, 0xe1, 0x0, + 0x8f, 0x40, 0x3f, 0xa0, 0x3f, 0x90, 0x0, 0x7f, + 0x50, + + /* U+0079 "y" */ + 0x7f, 0x30, 0x0, 0x7f, 0x21, 0xf9, 0x0, 0xd, + 0xd0, 0xc, 0xe0, 0x2, 0xf7, 0x0, 0x6f, 0x40, + 0x8f, 0x10, 0x0, 0xf9, 0xd, 0xb0, 0x0, 0xa, + 0xe3, 0xf6, 0x0, 0x0, 0x4f, 0xcf, 0x0, 0x0, + 0x0, 0xef, 0xa0, 0x0, 0x0, 0x9, 0xf4, 0x0, + 0x0, 0x0, 0xae, 0x0, 0x0, 0x16, 0x8f, 0x70, + 0x0, 0x3, 0xff, 0x90, 0x0, 0x0, + + /* U+007A "z" */ + 0x3f, 0xff, 0xff, 0xf2, 0x15, 0x55, 0x6f, 0xd0, + 0x0, 0x0, 0xbf, 0x30, 0x0, 0x6, 0xf7, 0x0, + 0x0, 0x2f, 0xc0, 0x0, 0x0, 0xcf, 0x20, 0x0, + 0x7, 0xf6, 0x0, 0x0, 0x2f, 0xe5, 0x55, 0x50, + 0x6f, 0xff, 0xff, 0xf2, + + /* U+007B "{" */ + 0x0, 0x6e, 0xf0, 0x0, 0xfa, 0x20, 0x0, 0xf7, + 0x0, 0x0, 0xf7, 0x0, 0x0, 0xf7, 0x0, 0x1, + 0xf6, 0x0, 0x7, 0xf2, 0x0, 0xcf, 0x70, 0x0, + 0x2a, 0xf3, 0x0, 0x1, 0xf6, 0x0, 0x0, 0xf7, + 0x0, 0x0, 0xf7, 0x0, 0x0, 0xf7, 0x0, 0x0, + 0xfa, 0x20, 0x0, 0x6e, 0xf0, + + /* U+007C "|" */ + 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, + 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, + 0x8c, + + /* U+007D "}" */ + 0xbf, 0x90, 0x0, 0x15, 0xf4, 0x0, 0x1, 0xf5, + 0x0, 0x1, 0xf5, 0x0, 0x1, 0xf5, 0x0, 0x1, + 0xf6, 0x0, 0x0, 0xdb, 0x0, 0x0, 0x3e, 0xf2, + 0x0, 0xed, 0x30, 0x1, 0xf6, 0x0, 0x1, 0xf5, + 0x0, 0x1, 0xf5, 0x0, 0x1, 0xf5, 0x0, 0x15, + 0xf4, 0x0, 0xbf, 0x90, 0x0, + + /* U+007E "~" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xfa, 0x21, + 0xa1, 0xd, 0x64, 0xaf, 0xfc, 0x0, 0x0, 0x0, + 0x12, 0x0 +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 61, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 0, .adv_w = 66, .box_w = 3, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 18, .adv_w = 113, .box_w = 6, .box_h = 5, .ofs_x = 1, .ofs_y = 7}, + {.bitmap_index = 33, .adv_w = 155, .box_w = 10, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 98, .adv_w = 170, .box_w = 10, .box_h = 17, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 183, .adv_w = 234, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 267, .adv_w = 187, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 333, .adv_w = 64, .box_w = 2, .box_h = 5, .ofs_x = 1, .ofs_y = 7}, + {.bitmap_index = 338, .adv_w = 80, .box_w = 4, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 368, .adv_w = 81, .box_w = 4, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 398, .adv_w = 106, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 5}, + {.bitmap_index = 423, .adv_w = 144, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 464, .adv_w = 64, .box_w = 3, .box_h = 5, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 472, .adv_w = 98, .box_w = 6, .box_h = 3, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 481, .adv_w = 61, .box_w = 3, .box_h = 3, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 486, .adv_w = 92, .box_w = 6, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 525, .adv_w = 159, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 585, .adv_w = 106, .box_w = 5, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 615, .adv_w = 155, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 669, .adv_w = 164, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 729, .adv_w = 163, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 789, .adv_w = 166, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 849, .adv_w = 162, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 909, .adv_w = 156, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 963, .adv_w = 167, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1023, .adv_w = 162, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1083, .adv_w = 61, .box_w = 3, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1097, .adv_w = 64, .box_w = 4, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 1121, .adv_w = 142, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1153, .adv_w = 144, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 1180, .adv_w = 142, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1212, .adv_w = 134, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1260, .adv_w = 212, .box_w = 13, .box_h = 14, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 1351, .adv_w = 183, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1417, .adv_w = 173, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1471, .adv_w = 178, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1537, .adv_w = 179, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1597, .adv_w = 160, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1651, .adv_w = 153, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1699, .adv_w = 189, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1765, .adv_w = 196, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1825, .adv_w = 74, .box_w = 3, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1843, .adv_w = 100, .box_w = 6, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1879, .adv_w = 177, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1939, .adv_w = 148, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1987, .adv_w = 229, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2059, .adv_w = 195, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2119, .adv_w = 190, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2191, .adv_w = 164, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2245, .adv_w = 193, .box_w = 12, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 2329, .adv_w = 174, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2383, .adv_w = 173, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2443, .adv_w = 153, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2503, .adv_w = 181, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2563, .adv_w = 174, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2629, .adv_w = 245, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2719, .adv_w = 178, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2785, .adv_w = 160, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2845, .adv_w = 165, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2905, .adv_w = 80, .box_w = 4, .box_h = 15, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 2935, .adv_w = 92, .box_w = 6, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2974, .adv_w = 80, .box_w = 4, .box_h = 15, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3004, .adv_w = 122, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 3029, .adv_w = 135, .box_w = 8, .box_h = 3, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3041, .adv_w = 59, .box_w = 4, .box_h = 3, .ofs_x = 0, .ofs_y = 10}, + {.bitmap_index = 3047, .adv_w = 142, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3083, .adv_w = 154, .box_w = 8, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3135, .adv_w = 139, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3171, .adv_w = 154, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3230, .adv_w = 146, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3271, .adv_w = 101, .box_w = 6, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3307, .adv_w = 160, .box_w = 10, .box_h = 13, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3372, .adv_w = 149, .box_w = 8, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3424, .adv_w = 65, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3436, .adv_w = 69, .box_w = 5, .box_h = 15, .ofs_x = -1, .ofs_y = -3}, + {.bitmap_index = 3474, .adv_w = 145, .box_w = 8, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3526, .adv_w = 79, .box_w = 4, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3552, .adv_w = 223, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3606, .adv_w = 149, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3642, .adv_w = 145, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3683, .adv_w = 153, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 3731, .adv_w = 153, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3785, .adv_w = 102, .box_w = 5, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3808, .adv_w = 131, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3844, .adv_w = 102, .box_w = 6, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3880, .adv_w = 150, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3916, .adv_w = 130, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3952, .adv_w = 200, .box_w = 13, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4011, .adv_w = 146, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4052, .adv_w = 139, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 4106, .adv_w = 124, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4142, .adv_w = 88, .box_w = 6, .box_h = 15, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 4187, .adv_w = 68, .box_w = 2, .box_h = 17, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 4204, .adv_w = 89, .box_w = 6, .box_h = 15, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 4249, .adv_w = 148, .box_w = 9, .box_h = 4, .ofs_x = 0, .ofs_y = 4} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + + + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 32, .range_length = 95, .glyph_id_start = 1, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + } +}; + +/*----------------- + * KERNING + *----------------*/ + + +/*Map glyph_ids to kern left classes*/ +static const uint8_t kern_left_class_mapping[] = +{ + 0, 1, 2, 3, 0, 0, 0, 4, + 3, 0, 0, 0, 0, 5, 6, 5, + 0, 7, 0, 8, 7, 9, 0, 7, + 10, 7, 7, 5, 0, 0, 0, 0, + 0, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 19, 20, 21, 22, 19, 19, + 23, 24, 25, 26, 27, 28, 20, 29, + 29, 30, 31, 32, 0, 0, 0, 0, + 5, 0, 33, 11, 34, 35, 11, 36, + 37, 33, 35, 35, 38, 39, 33, 33, + 11, 11, 35, 40, 41, 42, 35, 43, + 43, 44, 43, 45, 0, 0, 0, 0 +}; + +/*Map glyph_ids to kern right classes*/ +static const uint8_t kern_right_class_mapping[] = +{ + 0, 1, 0, 2, 0, 0, 0, 3, + 2, 0, 4, 0, 0, 5, 6, 5, + 0, 7, 8, 9, 7, 10, 11, 7, + 12, 7, 7, 0, 0, 0, 0, 0, + 4, 13, 14, 15, 16, 15, 15, 15, + 16, 15, 15, 17, 15, 15, 15, 15, + 16, 15, 16, 15, 18, 19, 20, 21, + 21, 22, 23, 24, 0, 0, 4, 0, + 5, 0, 25, 26, 13, 13, 13, 27, + 28, 29, 30, 31, 29, 32, 33, 33, + 13, 33, 13, 33, 34, 35, 36, 37, + 38, 39, 38, 40, 0, 41, 4, 0 +}; + +/*Kern values between classes*/ +static const int8_t kern_class_values[] = +{ + 0, 0, 0, 0, 0, -24, 0, 0, + 0, 0, 0, 0, -3, 0, 0, 0, + 0, 0, 0, 0, -5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, -1, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -13, -10, 0, -13, -10, -10, + 0, -10, -10, -18, -3, -7, 1, 1, + -5, -4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -14, 0, -13, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, 0, 0, + 12, 0, 0, 0, 5, -1, 0, -15, + 0, 8, 1, -8, 6, 1, -16, -6, + -13, 0, -18, 0, 0, 0, 0, 5, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -36, 0, 0, + 0, 0, 0, 0, -19, 0, 0, 0, + -30, 2, -6, 0, 0, -7, -5, -33, + 0, -20, -14, -20, -8, 1, 0, 0, + -1, 0, 0, 0, 0, 0, 1, -4, + 0, -5, -5, -9, -1, 0, 0, 0, + 0, 0, 0, 0, -1, 0, 0, -1, + 0, -5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -2, 0, 0, 0, 0, 0, + 0, 0, -3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 11, -30, 0, -4, + 4, 1, -6, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -2, 0, 0, -2, -2, 0, + -2, -2, 0, 0, 0, 0, 0, 0, + 0, 0, -1, -17, 0, -3, 0, 3, + 0, 0, 0, 0, 0, 0, 0, 0, + -2, 0, -3, 0, -23, 0, -12, 0, + -18, 0, -1, 0, -5, -1, 0, 0, + 0, 0, 0, -1, -5, -1, -3, -2, + -9, -3, -1, 0, 0, 0, 1, 1, + -8, -1, 0, 0, 0, 0, -13, -4, + 3, 0, -9, 3, -4, -23, -9, -29, + 6, -20, 1, 0, 0, -13, -4, 0, + 0, 0, 0, 0, -4, -14, -2, -16, + -16, -4, 1, 0, 0, 0, -1, -1, + 0, -2, 0, 0, 0, 0, 0, 0, + 1, -2, 2, -1, 0, 1, -5, 0, + -6, -6, -10, -4, 0, 0, 0, -3, + 0, 0, 0, 0, 0, 0, 0, 0, + -1, -1, 0, -1, 0, 0, 0, 0, + 0, -1, 0, 0, 0, 0, 0, 0, + 0, 0, -4, 0, 0, -1, 0, -4, + 0, -3, -7, -6, -2, -2, 0, 0, + -4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, -1, -4, 0, 0, 0, 0, 0, + 0, 0, 0, -8, 0, 0, -4, -2, + -6, 0, -7, -9, -11, -10, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, 0, 1, -5, -5, 0, 0, 0, + 0, 0, 0, -1, -1, 1, -1, 5, + 1, 5, 0, 1, 5, 5, 0, -1, + -3, -1, -3, -3, -3, 0, -3, -3, + -2, -7, -2, -4, -4, -2, 1, 3, + 0, 0, 0, 3, -16, -1, 0, 0, + 0, 0, 0, 0, -4, -17, 0, 0, + -13, -3, 7, 0, 2, 0, 6, -2, + -3, 0, 0, -3, 0, 0, 0, 0, + 0, -3, 0, -3, -3, -3, -6, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, + 0, 1, -1, -10, 0, -9, 0, -11, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -2, 0, + 0, 0, 0, 0, 0, -2, 0, 0, + 0, 0, -1, 0, 0, -1, 0, 0, + 0, 0, 0, 0, -2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -4, + 0, 0, 0, 0, 0, 0, 0, 0, + -9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, -5, 0, + 0, 0, 0, 0, 0, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -15, 0, 0, 0, 0, 0, 0, + -8, 4, 0, 0, 4, -8, 1, -5, + 3, 0, 2, 0, -2, 0, -4, 0, + 0, 0, 0, 0, 0, -4, -15, -8, + -11, -11, 0, 0, 0, 0, 0, 0, + -1, 1, -14, 0, 0, 0, 0, 0, + 0, -4, 4, 0, -5, 7, 4, -24, + -6, -17, 2, -24, 0, -4, 0, -9, + 1, 0, 0, 0, 0, 0, 0, -13, + 1, -10, -10, 3, 3, 0, 0, 0, + 0, 0, -9, 0, 0, 0, 0, 0, + 0, -4, -2, -9, 0, -1, -3, 0, + 2, -3, -5, -3, -8, -7, -3, -2, + 0, -1, -2, -2, 0, -2, -2, -2, + -2, 0, 0, 0, -6, 0, 0, 0, + 0, 0, -1, -28, -6, 0, 0, 0, + 0, 0, 0, -3, -16, 0, 1, -14, + 2, 0, 0, 0, -7, -3, -4, -3, + 0, 1, -4, 0, 0, 0, 0, 0, + -4, 2, -1, 5, 5, 1, 0, 2, + 0, 0, 0, 0, -8, 0, 0, 0, + 0, 0, 0, -4, -2, -9, 0, -1, + -3, 0, 2, -3, -5, -3, -8, -7, + -3, -2, 0, -1, -2, -2, 0, -2, + -2, -2, -2, 0, 0, 0, -6, 0, + 0, 0, 0, 0, 0, -1, -11, 0, + 0, 0, 0, 0, 0, -4, 1, 0, + -3, 1, -5, -3, -5, -8, 0, -4, + 0, -3, -1, 0, -3, -1, -1, 0, + -1, -1, 0, 0, -2, 0, 0, -2, + -2, 0, 0, 0, 0, 0, -4, 1, + 0, 0, 0, 0, 0, 0, 0, -4, + -1, -3, 1, 2, -3, 0, -5, -5, + -8, -2, -1, 0, 0, -6, 0, 0, + 0, 0, 0, 0, -5, 0, 1, 1, + -5, -2, 3, 0, 0, -2, 4, -19, + -13, 0, 0, 0, -17, 0, 0, -18, + -23, 0, -1, -11, 0, 7, 0, 9, + 2, 11, 3, -15, 0, 0, -19, 0, + 0, 4, 0, -7, -17, -7, -15, -12, + -12, -13, -11, 3, 0, 0, -7, 7, + -12, -12, 0, 0, 0, 0, 0, 0, + -12, -29, 0, -5, -12, -4, 9, 0, + 3, 1, 12, 4, -12, -2, 1, -10, + 0, 0, 4, 0, -2, -7, -1, 0, + 0, 0, -6, -2, 0, 0, 0, 0, + 0, 0, -12, 0, 0, 0, 0, 0, + 0, -7, 1, 0, -6, 6, -4, 1, + -3, -1, 12, -5, 2, -1, -1, 0, + 0, -1, -1, 0, -1, -1, -6, -4, + -6, -11, -11, 2, 0, 3, -4, 0, + 0, 5, -22, -20, 0, 0, 0, 0, + 0, 0, -18, -21, 0, -8, -17, -11, + 9, 1, 9, 4, 11, 0, -18, -4, + -4, -21, 1, -4, 0, 1, -4, -19, + -12, -13, -12, -12, -10, -10, 4, 0, + 0, 0, 0, 0, -12, 0, 0, 0, + 0, 0, 0, -3, 1, 0, 0, 3, + -1, 5, -1, 3, 2, 1, 4, 2, + -4, 0, 0, -4, -4, 0, -4, -4, + 0, 0, -1, -4, -4, 0, 2, 0, + 0, -14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -7, 0, 0, 0, 0, + 0, 0, -27, 0, -11, 0, -14, 0, + -1, 0, -4, 0, 0, 0, 0, 0, + 0, -1, -5, 0, -4, -4, -3, -1, + -1, -1, -17, 0, -3, 0, 3, 0, + 0, 0, 0, 0, 0, -1, 0, -2, + 0, -3, 0, -23, 0, -12, 0, -18, + 0, -1, -1, -5, -1, -1, -1, 0, + -1, -1, -1, -5, -1, -2, -2, -9, + -3, -1, 0, -2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, -1, 1, 1, + 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, -4, + -2, 0, 0, 0, 0, 0, 0, -1, + 0, 0, 0, 0, 0, 0, 0, 9, + 0, 0, 0, 2, 0, -5, -3, 0, + 0, 0, 0, 0, -1, -7, 0, 2, + 2, 2, -1, -1, 0, 1, 0, 0, + 0, -10, 0, 0, 0, 0, 0, 0, + -4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -4, 0, 3, -3, + 0, 0, 8, 0, 0, -4, 2, -3, + 1, 1, 0, 1, 4, 0, -10, 0, + -1, 0, -8, 0, 0, 0, 0, 0, + 0, -6, 0, 0, 0, 0, 0, 0, + 0, -3, 0, 0, 0, -4, 0, 3, + -5, 0, 0, 0, 0, 0, -3, -3, + -3, 4, 4, 0, 0, 0, 0, -10, + 0, 0, 2, -5, 0, 0, 0, 0, + 0, 0, -7, 0, 0, 0, 1, 0, + -10, 0, -6, 0, -7, 0, -1, -1, + -6, 3, -1, -1, 0, -4, -1, -3, + -10, -4, -6, -6, 0, 2, 2, 0, + 1, 0, -4, -17, -11, 0, 0, 0, + 0, 0, 0, -2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -4, + 0, 3, -4, 0, 0, 0, 0, 0, + -1, -3, 0, 3, 3, 3, 1, -1, + -1, -1, 0, -2, 0, 10, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -3, 0, 0, + 1, 0, 0, -1, 0, 0, 0, 0, + 0, -1, -2, 0, -1, -1, -4, -1, + -1, 0, -5, 0, 1, 0, -6, 0, + 0, 0, 0, 0, 0, -4, 0, 0, + 0, 0, 0, 0, 0, -6, 0, 0, + 0, -1, 0, -9, 3, 0, 0, 2, + 0, 0, -1, -12, -1, 0, 0, 1, + -1, 0, -1, 2, 0, -8, -13, -1, + 0, 0, 0, 0, 0, 0, -3, -13, + 0, 0, 0, 0, 0, 0, -6, 0, + -8, 0, -3, 0, 3, -4, 0, 0, + 0, 0, 0, -3, 2, 0, 3, 3, + 0, 0, 0, 0, 0, 0, -1, 0, + -10, 0, 0, 0, 0, 0, 0, -5, + 0, 0, 0, 0, -4, 0, 0, -2, + 0, 0, 0, -5, 0, 1, 2, 0, + 0, 0, 0, 0, -4, -5, -2, 0, + 0, -2, 1, 0, 0, -5, 0, 0, + 0, -9, 0, 0, 0, 0, 0, 0, + -1, 0, 0, 0, 0, 0, -4, 0, + 0, 0, -6, 0, 2, 0, -1, -1, + 0, 0, 0, 0, 0, 1, 2, -1, + -1, -1, -2, 3, 0 +}; + + +/*Collect the kern class' data in one place*/ +static const lv_font_fmt_txt_kern_classes_t kern_classes = +{ + .class_pair_values = kern_class_values, + .left_class_mapping = kern_left_class_mapping, + .right_class_mapping = kern_right_class_mapping, + .left_class_cnt = 45, + .right_class_cnt = 41, +}; + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LVGL_VERSION_MAJOR == 8 +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +#endif + +#if LVGL_VERSION_MAJOR >= 8 +static const lv_font_fmt_txt_dsc_t font_dsc = { +#else +static lv_font_fmt_txt_dsc_t font_dsc = { +#endif + .glyph_bitmap = glyph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = &kern_classes, + .kern_scale = 16, + .cmap_num = 1, + .bpp = 4, + .kern_classes = 1, + .bitmap_format = 0, +#if LVGL_VERSION_MAJOR == 8 + .cache = &cache +#endif + +}; + + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LVGL_VERSION_MAJOR >= 8 +const lv_font_t public_sans_medium_16 = { +#else +lv_font_t public_sans_medium_16 = { +#endif + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 18, /*The maximum line height required by the font*/ + .base_line = 3, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif +#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 + .underline_position = -3, + .underline_thickness = 1, +#endif + .static_bitmap = 0, + .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9 + .fallback = NULL, +#endif + .user_data = NULL, +}; + + + +#endif /*#if PUBLIC_SANS_MEDIUM_16*/ diff --git a/examples/voice_agent_lcd/main/idf_component.yml b/examples/voice_agent_lcd/main/idf_component.yml new file mode 100644 index 0000000..5ca55e2 --- /dev/null +++ b/examples/voice_agent_lcd/main/idf_component.yml @@ -0,0 +1,15 @@ +dependencies: + idf: ">=5.4" + livekit: + path: ../../../components/livekit + codec_board: + path: ../../../components/third_party/esp-webrtc-solution/components/codec_board + # Eventually, the BSP will perform all the functions of the codec_board component. + # It currently is used because codec_board is required to support AEC. + espressif/esp-box-3: ^3.0.1 + render_impl: + path: ../../../components/third_party/esp-webrtc-solution/components/av_render/render_impl + livekit_sandbox: + path: ../../../components/livekit_sandbox + common: + path: ../../common diff --git a/examples/voice_agent_lcd/main/images/img_logo.c b/examples/voice_agent_lcd/main/images/img_logo.c new file mode 100644 index 0000000..628d9df --- /dev/null +++ b/examples/voice_agent_lcd/main/images/img_logo.c @@ -0,0 +1,107 @@ + +#if defined(LV_LVGL_H_INCLUDE_SIMPLE) +#include "lvgl.h" +#elif defined(LV_LVGL_H_INCLUDE_SYSTEM) +#include +#elif defined(LV_BUILD_TEST) +#include "../lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_LOGO +#define LV_ATTRIBUTE_IMG_LOGO +#endif + +static const +LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_LOGO +uint8_t img_logo_map[] = { + + 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff, + + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x00,0x0f,0xf0,0x00, + 0x00,0x0f,0xf0,0x00,0x00,0x0f,0xf0,0x00, + 0x00,0x0f,0xf0,0x00,0x00,0x0f,0xf0,0x00, + 0x00,0x0f,0xf0,0x00,0x00,0x0f,0xf0,0x00, + 0x00,0x0f,0xf0,0x00,0x00,0x0f,0xf0,0x00, + 0x00,0x0f,0xf0,0x00,0x00,0x0f,0xf0,0x00, + 0x00,0x0f,0xf0,0x00,0x00,0x0f,0xf0,0x00, + 0x00,0x0f,0xf0,0x00,0x00,0x0f,0xf0,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x0f,0xf0,0x00,0x00,0x00, + 0x00,0x0f,0xf0,0x0f,0xf0,0x00,0x00,0x00, + 0x00,0x0f,0xf0,0x0f,0xf0,0x00,0x00,0x00, + 0x00,0x0f,0xf0,0x0f,0xf0,0x00,0x00,0x00, + 0x00,0x0f,0xf0,0x0f,0xf0,0x00,0x00,0x00, + 0x00,0x0f,0xf0,0x0f,0xf0,0x00,0x00,0x00, + 0x00,0x0f,0xf0,0x0f,0xf0,0x00,0x00,0x00, + 0x00,0x0f,0xf0,0x0f,0xf0,0x00,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xf0,0x00,0x0f,0xf0,0x00,0x00, + 0x00,0x0f,0xff,0xff,0xf0,0x0f,0xf0,0x00, + 0x00,0x0f,0xff,0xff,0xf0,0x0f,0xf0,0x00, + 0x00,0x0f,0xff,0xff,0xf0,0x0f,0xf0,0x00, + 0x00,0x0f,0xff,0xff,0xf0,0x0f,0xf0,0x00, + 0x00,0x0f,0xff,0xff,0xf0,0x0f,0xf0,0x00, + 0x00,0x0f,0xff,0xff,0xf0,0x0f,0xf0,0x00, + 0x00,0x0f,0xff,0xff,0xf0,0x0f,0xf0,0x00, + 0x00,0x0f,0xff,0xff,0xf0,0x0f,0xf0,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + +}; + +const lv_image_dsc_t img_logo = { + .header = { + .magic = LV_IMAGE_HEADER_MAGIC, + .cf = LV_COLOR_FORMAT_I1, + .flags = 0, + .w = 64, + .h = 64, + .stride = 8, + .reserved_2 = 0, + }, + .data_size = sizeof(img_logo_map), + .data = img_logo_map, + .reserved = NULL, +}; + diff --git a/examples/voice_agent_lcd/main/images/img_waveform.c b/examples/voice_agent_lcd/main/images/img_waveform.c new file mode 100644 index 0000000..121c6be --- /dev/null +++ b/examples/voice_agent_lcd/main/images/img_waveform.c @@ -0,0 +1,104 @@ + +#if defined(LV_LVGL_H_INCLUDE_SIMPLE) +#include "lvgl.h" +#elif defined(LV_LVGL_H_INCLUDE_SYSTEM) +#include +#elif defined(LV_BUILD_TEST) +#include "../lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_WAVEFORM +#define LV_ATTRIBUTE_IMG_WAVEFORM +#endif + +static const +LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_WAVEFORM +uint8_t img_waveform_map[] = { + + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x81,0xc0,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x87,0xe0,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x87,0xe0,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x87,0xe0,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x87,0xe0,0x00,0x1c,0x00, + 0x00,0x00,0x1f,0x87,0xe0,0x00,0x7e,0x00, + 0x00,0x00,0x1f,0x87,0xe0,0x00,0x7e,0x00, + 0x00,0x00,0x1f,0x87,0xe0,0x00,0x7e,0x00, + 0x00,0x1c,0x1f,0x87,0xe0,0x70,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x7e,0x1f,0x87,0xe1,0xf8,0x7e,0x00, + 0x00,0x3c,0x1f,0x87,0xe0,0xf0,0x7e,0x00, + 0x00,0x00,0x1f,0x87,0xe0,0x00,0x7e,0x00, + 0x00,0x00,0x1f,0x87,0xe0,0x00,0x7e,0x00, + 0x00,0x00,0x1f,0x87,0xe0,0x00,0x7e,0x00, + 0x00,0x00,0x1f,0x87,0xe0,0x00,0x3c,0x00, + 0x00,0x00,0x1f,0x87,0xe0,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x87,0xe0,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x87,0xe0,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x83,0xc0,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + +}; + +const lv_image_dsc_t img_waveform = { + .header = { + .magic = LV_IMAGE_HEADER_MAGIC, + .cf = LV_COLOR_FORMAT_A1, + .flags = 0, + .w = 64, + .h = 64, + .stride = 8, + .reserved_2 = 0, + }, + .data_size = sizeof(img_waveform_map), + .data = img_waveform_map, + .reserved = NULL, +}; diff --git a/examples/voice_agent_lcd/main/main.c b/examples/voice_agent_lcd/main/main.c new file mode 100644 index 0000000..7eec3a4 --- /dev/null +++ b/examples/voice_agent_lcd/main/main.c @@ -0,0 +1,31 @@ +#include "esp_log.h" +#include "media_lib_adapter.h" +#include "media_lib_os.h" +#include "livekit.h" +#include "network.h" +#include "media.h" +#include "ui.h" +#include "board.h" +#include "example.h" + +extern lv_subject_t ui_is_network_connected; + +static int network_event_handler(bool connected) +{ + ui_acquire(); + lv_subject_set_int(&ui_is_network_connected, (int)connected); + ui_release(); + return 0; +} + +void app_main(void) +{ + esp_log_level_set("*", ESP_LOG_INFO); + ESP_LOGI("main", "** [1]"); + livekit_system_init(); + board_init(); + media_init(); + ui_init(); + example_init(); + network_init(CONFIG_WIFI_SSID, CONFIG_WIFI_PASSWORD, network_event_handler); +} diff --git a/examples/voice_agent_lcd/main/media.c b/examples/voice_agent_lcd/main/media.c new file mode 100644 index 0000000..b1e42f1 --- /dev/null +++ b/examples/voice_agent_lcd/main/media.c @@ -0,0 +1,123 @@ +#include "esp_check.h" +#include "esp_log.h" +#include "codec_init.h" +#include "esp_capture_path_simple.h" +#include "esp_capture_audio_enc.h" +#include "av_render_default.h" +#include "esp_audio_dec_default.h" +#include "esp_audio_enc_default.h" +#include "esp_capture_defaults.h" + +#include "media.h" + +static const char *TAG = "media"; + +#define NULL_CHECK(pointer, message) \ + ESP_RETURN_ON_FALSE(pointer != NULL, -1, TAG, message) + +typedef struct { + esp_capture_aenc_if_t *audio_encoder; + esp_capture_audio_src_if_t *audio_source; + esp_capture_path_if_t *capture_path; + esp_capture_path_handle_t capturer_handle; +} capture_system_t; + +typedef struct { + audio_render_handle_t audio_renderer; + av_render_handle_t av_renderer_handle; +} renderer_system_t; + +static capture_system_t capturer_system; +static renderer_system_t renderer_system; + +static int build_capturer_system(void) +{ + // 1. Create audio encoder + capturer_system.audio_encoder = esp_capture_new_audio_encoder(); + NULL_CHECK(capturer_system.audio_encoder, "Failed to create audio encoder"); + + // 2. Create audio source + esp_codec_dev_handle_t record_handle = get_record_handle(); + NULL_CHECK(record_handle, "Failed to get record handle"); + + esp_capture_audio_aec_src_cfg_t codec_cfg = { + .record_handle = record_handle, + .channel = 4, + .channel_mask = 1 | 2 + }; + capturer_system.audio_source = esp_capture_new_audio_aec_src(&codec_cfg); + NULL_CHECK(capturer_system.audio_source, "Failed to create audio source"); + + // 3. Create capture path + esp_capture_simple_path_cfg_t path_cfg = { + .aenc = capturer_system.audio_encoder, + }; + capturer_system.capture_path = esp_capture_build_simple_path(&path_cfg); + NULL_CHECK(capturer_system.capture_path, "Failed to create capture path"); + + // 4. Create capture system + esp_capture_cfg_t cfg = { + .sync_mode = ESP_CAPTURE_SYNC_MODE_AUDIO, + .audio_src = capturer_system.audio_source, + .capture_path = capturer_system.capture_path, + }; + esp_capture_open(&cfg, &capturer_system.capturer_handle); + NULL_CHECK(capturer_system.capturer_handle, "Failed to open capture system"); + return 0; +} + +static int build_renderer_system(void) +{ + // 1. Create audio renderer + i2s_render_cfg_t i2s_cfg = { + .play_handle = get_playback_handle() + }; + renderer_system.audio_renderer = av_render_alloc_i2s_render(&i2s_cfg); + NULL_CHECK(renderer_system.audio_renderer, "Failed to create I2S renderer"); + + // Set initial speaker volume + esp_codec_dev_set_out_vol(i2s_cfg.play_handle, CONFIG_DEFAULT_PLAYBACK_VOL); + + // 2. Create AV renderer + // For this example, this only includes an audio renderer. + av_render_cfg_t render_cfg = { + .audio_render = renderer_system.audio_renderer, + .audio_raw_fifo_size = 8 * 4096, + .audio_render_fifo_size = 100 * 1024, + .allow_drop_data = false, + }; + renderer_system.av_renderer_handle = av_render_open(&render_cfg); + NULL_CHECK(renderer_system.av_renderer_handle, "Failed to create AV renderer"); + + // 3. Set frame info + av_render_audio_frame_info_t frame_info = { + .sample_rate = 16000, + .channel = 2, + .bits_per_sample = 16, + }; + av_render_set_fixed_frame_info(renderer_system.av_renderer_handle, &frame_info); + + return 0; +} + +int media_init(void) +{ + // Register default audio encoder and decoder + esp_audio_enc_register_default(); + esp_audio_dec_register_default(); + + // Build capturer and renderer systems + build_capturer_system(); + build_renderer_system(); + return 0; +} + +esp_capture_handle_t media_get_capturer(void) +{ + return capturer_system.capturer_handle; +} + +av_render_handle_t media_get_renderer(void) +{ + return renderer_system.av_renderer_handle; +} \ No newline at end of file diff --git a/examples/voice_agent_lcd/main/media.h b/examples/voice_agent_lcd/main/media.h new file mode 100644 index 0000000..3b07788 --- /dev/null +++ b/examples/voice_agent_lcd/main/media.h @@ -0,0 +1,39 @@ + +#pragma once + +#include "esp_capture.h" +#include "av_render.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/// Initializes the capturer and renderer systems. +int media_init(void); + +/// Returns the capturer handle. +/// +/// This handle is provided to a LiveKit room when initialized to enable +/// publishing tracks from captured media (i.e. audio from a microphone and/or +/// video from a camera). +/// +/// How the capturer is configured is determined by the requirements of +/// your application and the hardware you are using. +/// +esp_capture_handle_t media_get_capturer(void); + +/// Returns the renderer handle. +/// +/// This handle is provided to a LiveKit room when initialized to enable +/// rendering media from subscribed tracks (i.e. playing audio through a +/// speaker and/or displaying video to a screen). +/// +/// How the renderer is configured is determined by the requirements of +/// your application and the hardware you are using. +/// +av_render_handle_t media_get_renderer(void); + +#ifdef __cplusplus +} +#endif + diff --git a/examples/voice_agent_lcd/main/ui.c b/examples/voice_agent_lcd/main/ui.c new file mode 100644 index 0000000..c3d6e46 --- /dev/null +++ b/examples/voice_agent_lcd/main/ui.c @@ -0,0 +1,246 @@ +#include +#include "esp_log.h" +#include "bsp/esp-bsp.h" +#include "livekit.h" +#include "ui.h" + +static const char* TAG = "ui"; + +#define VIS_WIDTH 260 +#define VIS_HEIGHT 162 +#define VIS_GAP 10 +#define VIS_SEGMENTS 5 + +#define LK_PALETTE_FG1 0x3B3B3B +#define LK_PALETTE_BG1 0xF9F9F6 +#define LK_PALETTE_FG_ACCENT 0x002CF2 + +LV_IMG_DECLARE(img_logo) +LV_IMG_DECLARE(img_waveform) + +LV_FONT_DECLARE(public_sans_medium_16); +LV_FONT_DECLARE(commit_mono_700_14); + +typedef enum { + SCREEN_BOOT, + SCREEN_MAIN, + SCREEN_CALL +} screen_t; + +#define SCREEN_NUM 3 +static lv_obj_t* screens[SCREEN_NUM]; + +static lv_style_t style_btn_base; +static lv_style_t style_btn_pressed; + +lv_subject_t ui_is_network_connected; +lv_subject_t ui_room_state; +lv_subject_t ui_is_call_active; + +void ui_acquire(void) +{ + bsp_display_lock(0); +} + +void ui_release(void) +{ + bsp_display_unlock(); +} + +static void ui_present_screen(screen_t target) +{ + bool is_call_active = target == SCREEN_CALL; + lv_subject_set_int(&ui_is_call_active, is_call_active); + lv_screen_load_anim(screens[target], LV_SCR_LOAD_ANIM_FADE_IN, 500, 0, false); +} + +static void ev_network_connected_changed(lv_observer_t* observer, lv_subject_t* subject) +{ + static bool got_initial_connection = false; + int32_t is_connected = lv_subject_get_int(subject); + + if (!got_initial_connection && is_connected) { + ui_acquire(); + ui_present_screen(SCREEN_MAIN); + ui_release(); + got_initial_connection = true; + } +} + +static void ev_room_state_changed(lv_observer_t* observer, lv_subject_t* subject) +{ + livekit_connection_state_t room_state = (livekit_connection_state_t)lv_subject_get_int(subject); + ESP_LOGI(TAG, "Room state: %s", livekit_connection_state_str(room_state)); +} + +static void ev_start_call_button_clicked(lv_event_t* ev) +{ + ui_present_screen(SCREEN_CALL); +} + +#if BSP_CAPS_BUTTONS +static void ev_hw_button_clicked(void *button_handle, void *ctx) +{ + bsp_button_t id = (bsp_button_t)ctx; + + // TODO: Once we support more boards, we need to check board specific button IDs. + if (id != BSP_BUTTON_MAIN) return; + + // For Box-3, return to main screen when main button is pressed. + // This is the red circle button under the LCD. + ui_present_screen(SCREEN_MAIN); +} +#endif + +static void init_global_styles(void) +{ + static lv_style_transition_dsc_t btn_transition; + static const lv_style_prop_t btn_transition_props[] = {LV_STYLE_BG_OPA, 0}; + lv_style_transition_dsc_init(&btn_transition, btn_transition_props, lv_anim_path_linear, 100, 0, NULL); + + lv_style_init(&style_btn_base); + lv_style_set_radius(&style_btn_base, 24); + lv_style_set_bg_opa(&style_btn_base, LV_OPA_COVER); + lv_style_set_bg_color(&style_btn_base, lv_color_hex(LK_PALETTE_FG_ACCENT)); + lv_style_set_text_color(&style_btn_base, lv_color_white()); + lv_style_set_text_font(&style_btn_base, &commit_mono_700_14); + lv_style_set_text_letter_space(&style_btn_base, 1); + + lv_style_set_transition(&style_btn_base, &btn_transition); + + lv_style_init(&style_btn_pressed); + lv_style_set_bg_opa(&style_btn_pressed, LV_OPA_70); +} + +static void init_boot_screen(lv_obj_t* scr) +{ + lv_obj_t *img = lv_img_create(scr); + lv_img_set_src(img, &img_logo); + lv_obj_center(img); +} + +static void init_main_screen(lv_obj_t* scr) +{ + static lv_style_t container_style; + lv_style_init(&container_style); + lv_style_set_pad_row(&container_style, 20); + lv_style_set_bg_color(&container_style, lv_color_hex(LK_PALETTE_BG1)); + lv_style_set_flex_flow(&container_style, LV_FLEX_FLOW_COLUMN); + lv_style_set_flex_main_place(&container_style, LV_FLEX_ALIGN_CENTER); + lv_style_set_flex_track_place(&container_style, LV_FLEX_ALIGN_CENTER); + lv_style_set_flex_cross_place(&container_style, LV_FLEX_ALIGN_CENTER); + lv_style_set_layout(&container_style, LV_LAYOUT_FLEX); + + lv_obj_add_style(scr, &container_style, LV_PART_MAIN); + + lv_obj_t *img = lv_img_create(scr); + lv_img_set_src(img, &img_waveform); + + lv_obj_t* label = lv_label_create(scr); + lv_label_set_text_static(label, "Chat live with your voice AI agent"); + lv_obj_set_style_text_font(label, &public_sans_medium_16, LV_PART_MAIN); + lv_obj_set_style_text_color(scr, lv_color_hex(LK_PALETTE_FG1), LV_PART_MAIN); + + lv_obj_t* btn = lv_button_create(scr); + lv_obj_remove_style_all(btn); + lv_obj_add_style(btn, &style_btn_base, LV_PART_MAIN); + lv_obj_add_style(btn, &style_btn_pressed, LV_STATE_PRESSED); + lv_obj_set_size(btn, 232, 44); + lv_obj_add_event_cb(btn, ev_start_call_button_clicked, LV_EVENT_CLICKED, NULL); + + lv_obj_t* btn_label = lv_label_create(btn); + lv_label_set_text_static(btn_label, "START CALL"); + lv_obj_center(btn_label); +} + +static void init_visualizer(lv_obj_t* scr) +{ + LV_DRAW_BUF_DEFINE_STATIC(draw_buf, VIS_WIDTH, VIS_HEIGHT, LV_COLOR_FORMAT_I1); + LV_DRAW_BUF_INIT_STATIC(draw_buf); + + lv_obj_t* canvas = lv_canvas_create(scr); + lv_canvas_set_draw_buf(canvas, &draw_buf); + lv_canvas_set_palette(canvas, 0, lv_color_to_32(lv_color_black(), LV_OPA_COVER)); + lv_canvas_set_palette(canvas, 1, lv_color_to_32(lv_color_hex(LK_PALETTE_BG1), LV_OPA_COVER)); + lv_canvas_fill_bg(canvas, lv_color_make(0, 0, 1), LV_OPA_COVER); + + lv_layer_t layer; + lv_canvas_init_layer(canvas, &layer); + + lv_draw_line_dsc_t dsc; + lv_draw_line_dsc_init(&dsc); + + float magnitude = 0.0f; + int32_t line_width = (VIS_WIDTH - (VIS_SEGMENTS - 1) * VIS_GAP) / VIS_SEGMENTS; + int32_t half_width = line_width / 2; + + dsc.color = lv_color_make(0, 0, 1); + dsc.width = line_width; + dsc.round_end = 1; + dsc.round_start = 1; + + for (int i = 0; i < VIS_SEGMENTS; i++) { + lv_value_precise_t x = half_width + i * (line_width + VIS_GAP); + dsc.p1.x = dsc.p2.x = x; + dsc.p1.y = fmax(0 + half_width, ((VIS_HEIGHT / 2) - 0.01f) * (1 - magnitude)); + dsc.p2.y = fmin(VIS_HEIGHT - half_width, ((VIS_HEIGHT / 2) + 0.01f) * (1 + magnitude)); + lv_draw_line(&layer, &dsc); + } + lv_canvas_finish_layer(canvas, &layer); +} + +static void init_call_screen(lv_obj_t* scr) +{ + static lv_style_t container_style; + lv_style_init(&container_style); + lv_style_set_pad_row(&container_style, 20); + lv_style_set_bg_color(&container_style, lv_color_hex(LK_PALETTE_BG1)); + lv_style_set_flex_flow(&container_style, LV_FLEX_FLOW_COLUMN); + lv_style_set_flex_main_place(&container_style, LV_FLEX_ALIGN_CENTER); + lv_style_set_flex_track_place(&container_style, LV_FLEX_ALIGN_CENTER); + lv_style_set_flex_cross_place(&container_style, LV_FLEX_ALIGN_CENTER); + lv_style_set_layout(&container_style, LV_LAYOUT_FLEX); + + lv_obj_add_style(scr, &container_style, LV_PART_MAIN); + + init_visualizer(scr); + + lv_obj_t* status_label = lv_label_create(scr); + lv_label_set_text_static(status_label, "Agent is listening, ask it a question"); + lv_obj_set_style_text_font(status_label, &public_sans_medium_16, LV_PART_MAIN); + lv_obj_set_style_text_color(status_label, lv_color_hex(LK_PALETTE_FG1), LV_PART_MAIN); +} + +void ui_init() +{ + ui_acquire(); + + init_global_styles(); + + screens[SCREEN_BOOT] = lv_disp_get_scr_act(NULL); + init_boot_screen(screens[SCREEN_BOOT]); + + screens[SCREEN_MAIN] = lv_obj_create(NULL); + init_main_screen(screens[SCREEN_MAIN]); + + screens[SCREEN_CALL] = lv_obj_create(NULL); + init_call_screen(screens[SCREEN_CALL]); + + lv_subject_init_int(&ui_is_network_connected, false); + lv_subject_init_int(&ui_room_state, LIVEKIT_CONNECTION_STATE_DISCONNECTED); + lv_subject_init_int(&ui_is_call_active, false); + + lv_subject_add_observer(&ui_is_network_connected, ev_network_connected_changed, NULL); + lv_subject_add_observer(&ui_room_state, ev_room_state_changed, NULL); + + ui_release(); + +#if BSP_CAPS_BUTTONS + static button_handle_t handles[BSP_BUTTON_NUM] = {NULL}; + ESP_ERROR_CHECK(bsp_iot_button_create(handles, NULL, BSP_BUTTON_NUM)); + + for (int i = 0; i < BSP_BUTTON_NUM; i++) { + iot_button_register_cb(handles[i], BUTTON_PRESS_DOWN, NULL, ev_hw_button_clicked, (void *)i); + } +#endif +} \ No newline at end of file diff --git a/examples/voice_agent_lcd/main/ui.h b/examples/voice_agent_lcd/main/ui.h new file mode 100644 index 0000000..827e33f --- /dev/null +++ b/examples/voice_agent_lcd/main/ui.h @@ -0,0 +1,17 @@ + +#pragma once + +#include "lvgl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void ui_init(void); +void ui_acquire(void); +void ui_release(void); + +#ifdef __cplusplus +} +#endif + diff --git a/examples/voice_agent_lcd/partitions.csv b/examples/voice_agent_lcd/partitions.csv new file mode 100755 index 0000000..111c125 --- /dev/null +++ b/examples/voice_agent_lcd/partitions.csv @@ -0,0 +1,5 @@ +# Name, Type, SubType, Offset, Size, Flags +# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild +nvs, data, nvs, 0x9000, 0x6000, +phy_init, data, phy, 0xf000, 0x1000, +factory, app, factory, 0x10000, 3M, diff --git a/examples/voice_agent_lcd/sdkconfig.bsp.esp-box-3 b/examples/voice_agent_lcd/sdkconfig.bsp.esp-box-3 new file mode 100644 index 0000000..a5a87f0 --- /dev/null +++ b/examples/voice_agent_lcd/sdkconfig.bsp.esp-box-3 @@ -0,0 +1,35 @@ +# This file was generated using idf.py save-defconfig. It can be edited manually. +# Espressif IoT Development Framework (ESP-IDF) 5.4.1 Project Minimal Configuration +# +CONFIG_IDF_TARGET="esp32s3" +CONFIG_CODEC_BOARD_TYPE="ESP32_S3_BOX_3" + +CONFIG_BSP_I2C_NUM=0 +CONFIG_BSP_LCD_DRAW_BUF_HEIGHT=10 +CONFIG_CODEC_I2C_BACKWARD_COMPATIBLE=n +CONFIG_COMPILER_OPTIMIZATION_PERF=y +CONFIG_DEFAULT_PLAYBACK_VOL=100 +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y +CONFIG_ESP_WS_CLIENT_ENABLE_DYNAMIC_BUFFER=y +CONFIG_ESP32S3_DATA_CACHE_64KB=y +CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y +CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB=y +CONFIG_ESPTOOLPY_FLASHMODE_QIO=y +CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_IDF_EXPERIMENTAL_FEATURES=y +CONFIG_LV_USE_CLIB_MALLOC=y +CONFIG_LV_USE_CLIB_SPRINTF=y +CONFIG_LV_USE_CLIB_STRING=y +CONFIG_LWIP_SNTP_MAX_SERVERS=2 +CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC=y +CONFIG_MBEDTLS_SSL_DTLS_SRTP=y +CONFIG_MBEDTLS_SSL_PROTO_DTLS=y +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y +CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=1024 +CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=8192 +CONFIG_SPIRAM_MODE_OCT=y +CONFIG_SPIRAM_SPEED_80M=y +CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y +CONFIG_SPIRAM=y