├── app ├── app │ ├── __init__.py │ ├── configuration │ │ ├── __init__.py │ │ ├── variables.py │ │ ├── openai_configuration.py │ │ ├── environment_variables.py │ │ └── configuration.py │ ├── markitdown_builder.py │ └── main.py ├── .dockerignore ├── Pipfile ├── Dockerfile ├── tests │ └── test_configuration.py ├── requirements.txt └── Pipfile.lock ├── clients └── Dotnet │ ├── sample │ └── WebApi │ │ ├── sample.pdf │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── Program.cs │ │ ├── WebApi.csproj │ │ └── Properties │ │ └── launchSettings.json │ ├── MarkItDownApiClient │ ├── Dto │ │ ├── Error.cs │ │ ├── Content.cs │ │ └── Response.cs │ ├── Exceptions │ │ ├── FileConversionFailure.cs │ │ ├── UnsupportedMediaFormat.cs │ │ ├── FileTooLarge.cs │ │ └── UnknownProblem.cs │ ├── Client │ │ ├── MarkItDownClient.cs │ │ └── HttpMarkItDownClient.cs │ ├── Extensions │ │ └── ServiceProviderExtensions.cs │ ├── MarkItDownApiClient.csproj │ └── README.md │ ├── tests │ └── MarkItDownApiClientTests │ │ ├── BodyDataExtensions.cs │ │ ├── WireMockTestFixture.cs │ │ ├── MarkItDownApiClientTests.csproj │ │ └── HttpMarkItDownClientTests.cs │ ├── Dotnet.sln │ └── .gitignore ├── .idea └── .gitignore ├── LICENSE ├── .github └── workflows │ ├── build-dotnet.yml │ └── build-app.yml ├── .gitignore └── README.md /app/app/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/app/configuration/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /clients/Dotnet/sample/WebApi/sample.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adampraszywka/MarkItDownApi/HEAD/clients/Dotnet/sample/WebApi/sample.pdf -------------------------------------------------------------------------------- /clients/Dotnet/MarkItDownApiClient/Dto/Error.cs: -------------------------------------------------------------------------------- 1 | namespace MarkItDownApiClient.Dto; 2 | 3 | public class Error(string detail) 4 | { 5 | public string Detail { get; } = detail; 6 | } -------------------------------------------------------------------------------- /clients/Dotnet/MarkItDownApiClient/Exceptions/FileConversionFailure.cs: -------------------------------------------------------------------------------- 1 | namespace MarkItDownApiClient.Exceptions; 2 | 3 | public class FileConversionFailure(string message) : Exception(message); -------------------------------------------------------------------------------- /clients/Dotnet/MarkItDownApiClient/Exceptions/UnsupportedMediaFormat.cs: -------------------------------------------------------------------------------- 1 | namespace MarkItDownApiClient.Exceptions; 2 | 3 | public class UnsupportedMediaFormat(string message) : Exception(message); -------------------------------------------------------------------------------- /clients/Dotnet/sample/WebApi/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /clients/Dotnet/MarkItDownApiClient/Exceptions/FileTooLarge.cs: -------------------------------------------------------------------------------- 1 | namespace MarkItDownApiClient.Exceptions; 2 | 3 | public class FileTooLarge() : Exception("Provided file exceeds the maximum size set in MarkItDownApi"); -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /app/app/configuration/variables.py: -------------------------------------------------------------------------------- 1 | from abc import ABC, abstractmethod 2 | 3 | 4 | class Variables(ABC): 5 | @abstractmethod 6 | def get(self, name: str, default=None) -> str | None: 7 | raise NotImplementedError -------------------------------------------------------------------------------- /clients/Dotnet/sample/WebApi/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /clients/Dotnet/MarkItDownApiClient/Client/MarkItDownClient.cs: -------------------------------------------------------------------------------- 1 | using MarkItDownApiClient.Dto; 2 | 3 | namespace MarkItDownApiClient.Client; 4 | 5 | public interface MarkItDownClient 6 | { 7 | public Task Read(Stream stream); 8 | } -------------------------------------------------------------------------------- /app/app/configuration/openai_configuration.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | 4 | class OpenAIConfiguration(BaseModel): 5 | api_key: str 6 | model: str 7 | organization: str|None 8 | project: str|None 9 | base_url: str|None -------------------------------------------------------------------------------- /clients/Dotnet/MarkItDownApiClient/Dto/Content.cs: -------------------------------------------------------------------------------- 1 | namespace MarkItDownApiClient.Dto; 2 | 3 | public class Content(string title, string textContent) 4 | { 5 | public string Title { get; } = title; 6 | public string TextContent { get; } = textContent; 7 | } -------------------------------------------------------------------------------- /app/app/configuration/environment_variables.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from app.configuration.variables import Variables 4 | 5 | class EnvironmentVariables(Variables): 6 | def get(self, name: str, default=None) -> str | None: 7 | return os.environ.get(name, default) -------------------------------------------------------------------------------- /clients/Dotnet/MarkItDownApiClient/Dto/Response.cs: -------------------------------------------------------------------------------- 1 | namespace MarkItDownApiClient.Dto; 2 | 3 | public class Response(string filename, int size, Content content) 4 | { 5 | public string Filename { get; } = filename; 6 | public int Size { get; } = size; 7 | public Content Content { get; } = content; 8 | } -------------------------------------------------------------------------------- /app/.dockerignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | */__pycache__/ 4 | */*/__pycache__/ 5 | */*/*/__pycache__/ 6 | *.py[cod] 7 | */*.py[cod] 8 | */*/*.py[cod] 9 | */*/*/*.py[cod] 10 | 11 | # Virtual environment 12 | .env/ 13 | .venv/ 14 | venv/ 15 | 16 | # PyCharm 17 | .idea 18 | 19 | -------------------------------------------------------------------------------- /clients/Dotnet/MarkItDownApiClient/Exceptions/UnknownProblem.cs: -------------------------------------------------------------------------------- 1 | using System.Net; 2 | 3 | namespace MarkItDownApiClient.Exceptions; 4 | 5 | public class UnknownProblem(HttpStatusCode statusCode, string? response, Exception? innerException) : Exception(BuildMessage(response), innerException) 6 | { 7 | public HttpStatusCode StatusCode { get; } = statusCode; 8 | public string? Response { get; } = response; 9 | 10 | private static string BuildMessage(string? response) => response ?? "An unknown problem occurred."; 11 | } -------------------------------------------------------------------------------- /clients/Dotnet/MarkItDownApiClient/Extensions/ServiceProviderExtensions.cs: -------------------------------------------------------------------------------- 1 | using MarkItDownApiClient.Client; 2 | using Microsoft.Extensions.DependencyInjection; 3 | 4 | namespace MarkItDownApiClient.Extensions; 5 | 6 | public static class ServiceProviderExtensions 7 | { 8 | public static IHttpClientBuilder AddMarkItDownApiClient(this IServiceCollection services, Uri baseUri) 9 | { 10 | return services.AddHttpClient(httpClient => 11 | { 12 | httpClient.BaseAddress = baseUri; 13 | }); 14 | } 15 | } -------------------------------------------------------------------------------- /clients/Dotnet/sample/WebApi/Program.cs: -------------------------------------------------------------------------------- 1 | using MarkItDownApiClient.Client; 2 | using MarkItDownApiClient.Extensions; 3 | 4 | var builder = WebApplication.CreateBuilder(args); 5 | 6 | builder.Services.AddMarkItDownApiClient(new Uri("http://192.168.10.40:5000")); 7 | 8 | var app = builder.Build(); 9 | 10 | app.MapGet("/", async (MarkItDownClient client) => 11 | { 12 | var file = await File.ReadAllBytesAsync("sample.pdf"); 13 | var fileStream = new MemoryStream(file); 14 | 15 | var content = await client.Read(fileStream); 16 | 17 | return content; 18 | }); 19 | 20 | app.Run(); -------------------------------------------------------------------------------- /clients/Dotnet/tests/MarkItDownApiClientTests/BodyDataExtensions.cs: -------------------------------------------------------------------------------- 1 | using System.Text; 2 | using WireMock.Util; 3 | 4 | namespace MarkItDownApiClientTests; 5 | 6 | public static class BodyDataExtensions 7 | { 8 | public static bool ContainsFile(this IBodyData? bodyData, byte[] file) 9 | { 10 | if (bodyData is null) 11 | { 12 | return false; 13 | } 14 | 15 | var fileString = Encoding.UTF8.GetString(file); 16 | var bodyString = Encoding.UTF8.GetString(bodyData.BodyAsBytes ?? []); 17 | 18 | return bodyString.Contains(fileString); 19 | } 20 | } -------------------------------------------------------------------------------- /app/Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | url = "https://pypi.org/simple" 3 | verify_ssl = true 4 | name = "pypi" 5 | 6 | [packages] 7 | annotated-types = "==0.7.0" 8 | anyio = "==4.7.0" 9 | click = "==8.1.7" 10 | exceptiongroup = "==1.2.2" 11 | fastapi = "==0.115.6" 12 | "fastapi[standard]" = "==0.115.6" 13 | h11 = "==0.14.0" 14 | idna = "==3.10" 15 | pydantic = "==2.10.4" 16 | pydantic-core = "==2.27.2" 17 | sniffio = "==1.3.1" 18 | starlette = "==0.41.3" 19 | typing-extensions = "==4.12.2" 20 | uvicorn = "==0.34.0" 21 | markitdown = "*" 22 | python-multipart = "*" 23 | pytest = "*" 24 | 25 | [dev-packages] 26 | 27 | [requires] 28 | python_version = "3.13" 29 | -------------------------------------------------------------------------------- /clients/Dotnet/sample/WebApi/WebApi.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0 5 | enable 6 | enable 7 | 12 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | PreserveNewest 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/Dockerfile: -------------------------------------------------------------------------------- 1 | # Use an official Python runtime as the base image 2 | FROM python:3.13-slim 3 | 4 | # Set environment variables to prevent Python from writing .pyc files and buffering stdout/stderr 5 | ENV PYTHONDONTWRITEBYTECODE=1 6 | ENV PYTHONUNBUFFERED=1 7 | 8 | # Set the working directory in the container 9 | WORKDIR /app 10 | 11 | # Install system dependencies 12 | #RUN apt update && apt-get install -y \build-essential \libpq-dev \curl \curl&& rm -rf /var/lib/apt/lists/* 13 | 14 | # Install pipenv 15 | RUN pip install --no-cache-dir pipenv 16 | 17 | COPY Pipfile Pipfile.lock /app/ 18 | RUN pipenv install --system --deploy 19 | COPY ./app /app 20 | EXPOSE 80 21 | 22 | CMD ["fastapi", "run", "main.py", "--port", "80"] -------------------------------------------------------------------------------- /clients/Dotnet/sample/WebApi/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/launchsettings.json", 3 | "profiles": { 4 | "http": { 5 | "commandName": "Project", 6 | "dotnetRunMessages": true, 7 | "launchBrowser": true, 8 | "applicationUrl": "http://localhost:5226", 9 | "environmentVariables": { 10 | "ASPNETCORE_ENVIRONMENT": "Development" 11 | } 12 | }, 13 | "https": { 14 | "commandName": "Project", 15 | "dotnetRunMessages": true, 16 | "launchBrowser": true, 17 | "applicationUrl": "https://localhost:7034;http://localhost:5226", 18 | "environmentVariables": { 19 | "ASPNETCORE_ENVIRONMENT": "Development" 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /clients/Dotnet/tests/MarkItDownApiClientTests/WireMockTestFixture.cs: -------------------------------------------------------------------------------- 1 | using WireMock.RequestBuilders; 2 | using WireMock.ResponseBuilders; 3 | using WireMock.Server; 4 | 5 | namespace MarkItDownApiClientTests; 6 | 7 | public class WireMockTestFixture : IDisposable 8 | { 9 | private readonly WireMockServer _wireMockServer; 10 | private readonly HttpClient _httpClient; 11 | 12 | public HttpClient Client => _httpClient; 13 | 14 | public WireMockTestFixture(byte[] file, IResponseBuilder responseBuilder) 15 | { 16 | _wireMockServer = WireMockServer.Start(); 17 | _httpClient = _wireMockServer.CreateClient(); 18 | 19 | _wireMockServer 20 | .Given(Request.Create() 21 | .WithPath("/read") 22 | .UsingPost() 23 | .WithBody(body => body.ContainsFile(file)) 24 | ) 25 | .RespondWith(responseBuilder); 26 | } 27 | 28 | public void Dispose() 29 | { 30 | _wireMockServer.Dispose(); 31 | _httpClient.Dispose(); 32 | } 33 | } -------------------------------------------------------------------------------- /clients/Dotnet/tests/MarkItDownApiClientTests/MarkItDownApiClientTests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net9.0 5 | latest 6 | enable 7 | enable 8 | false 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Adam Praszywka 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /clients/Dotnet/MarkItDownApiClient/MarkItDownApiClient.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | enable 5 | enable 6 | MarkItDownApi.Client 7 | 0.3.1 8 | Adam Praszywka 9 | MIT 10 | README.md 11 | https://github.com/adampraszywka/MarkItDownApi 12 | net8.0;net9.0;netstandard2.0 13 | 12 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/app/markitdown_builder.py: -------------------------------------------------------------------------------- 1 | from markitdown import MarkItDown 2 | from openai import OpenAI 3 | 4 | from app.configuration.configuration import Configuration 5 | from app.configuration.openai_configuration import OpenAIConfiguration 6 | 7 | 8 | class MarkItDownBuilder: 9 | 10 | def __init__(self, configuration: Configuration): 11 | self.configuration = configuration 12 | 13 | def get(self) -> MarkItDown: 14 | openai = self._build_openai_client(self.configuration.openai_configuration) 15 | model = self._get_model(self.configuration) 16 | 17 | return MarkItDown(llm_client=openai, llm_model=model) 18 | 19 | @staticmethod 20 | def _get_model(configuration): 21 | return configuration.openai_configuration.model if configuration.openai_configuration is not None else None 22 | 23 | @staticmethod 24 | def _build_openai_client(openai_configuration: OpenAIConfiguration | None) -> OpenAI | None: 25 | if openai_configuration is None: 26 | return None 27 | 28 | return OpenAI( 29 | api_key=openai_configuration.api_key, 30 | organization=openai_configuration.organization, 31 | project=openai_configuration.project, 32 | base_url=openai_configuration.base_url 33 | ) 34 | -------------------------------------------------------------------------------- /app/app/main.py: -------------------------------------------------------------------------------- 1 | from fastapi import FastAPI, UploadFile, HTTPException 2 | from markitdown import UnsupportedFormatException, FileConversionException 3 | 4 | from app.configuration.configuration import Configuration 5 | from app.configuration.environment_variables import EnvironmentVariables 6 | from app.markitdown_builder import MarkItDownBuilder 7 | 8 | app = FastAPI(swagger_ui_parameters={}) 9 | configuration = Configuration(EnvironmentVariables()) 10 | builder = MarkItDownBuilder(configuration) 11 | 12 | @app.get("/ping", summary="Health check") 13 | async def health_check(): 14 | return {"status": "ok"} 15 | 16 | @app.post("/read", summary="Convert document into plain text") 17 | async def create_upload_file(file: UploadFile): 18 | md = builder.get() 19 | 20 | if file.size > configuration.max_file_size: 21 | raise HTTPException(status_code=413, detail="File too large") 22 | 23 | try: 24 | result = md.convert_stream(file.file) 25 | return { 26 | "filename": file.filename, 27 | "content": result, 28 | } 29 | except UnsupportedFormatException as e: 30 | raise HTTPException(status_code=415, detail=str(e)) 31 | except FileConversionException as e: 32 | raise HTTPException(status_code=400, detail=str(e)) 33 | 34 | -------------------------------------------------------------------------------- /clients/Dotnet/MarkItDownApiClient/README.md: -------------------------------------------------------------------------------- 1 | # MarkItDownApi.Client - .NET Client Library for MarkItDown HTTP wrapper 2 | 3 | This library is a part of the MarkItDownApi project. It provides a simple way to interact with the self-hosted MarkItDown HTTP wrapper using .NET applications. The library abstracts the HTTP communication with the MarkItDownApi service, allowing developers to focus on their application logic. 4 | For more information about the MarkItDownApi project, check the README.md file in the main repository. 5 | 6 | ## How to start 7 | 8 | ### Start Docker Container 9 | 10 | ```bash 11 | docker run --rm --name markitdown-api -p 5000:80 ghcr.io/adampraszywka/markitdownapi:main 12 | ``` 13 | 14 | ### Install the package from NuGet 15 | 16 | ```bash 17 | dotnet add package MarkItDownApi.Client 18 | ``` 19 | 20 | ### Register client in your dependency injection container 21 | 22 | ```csharp 23 | builder.Services.AddMarkItDownApiClient(new Uri("http://localhost:5000")); 24 | ``` 25 | 26 | ### Use the client in your code 27 | 28 | ```csharp 29 | app.MapGet("/", async (MarkItDownClient client) => { 30 | var file = await File.ReadAllBytesAsync("sample.pdf"); 31 | var fileStream = new MemoryStream(file); 32 | 33 | var content = await client.Read(fileStream); 34 | 35 | return content; 36 | }); 37 | ``` -------------------------------------------------------------------------------- /app/app/configuration/configuration.py: -------------------------------------------------------------------------------- 1 | from app.configuration.openai_configuration import OpenAIConfiguration 2 | from app.configuration.variables import Variables 3 | 4 | DEFAULT_MAX_FILE_SIZE_MB = 25 5 | DEFAULT_MAX_FILE_SIZE = 1024 * 1024 * DEFAULT_MAX_FILE_SIZE_MB 6 | 7 | class Configuration: 8 | def __init__(self, variables: Variables): 9 | max_file_size_raw = variables.get('MAX_FILE_SIZE', str(DEFAULT_MAX_FILE_SIZE)) 10 | try: 11 | self._max_file_size = int(max_file_size_raw) 12 | except ValueError: 13 | raise ValueError('Invalid value for MAX_FILE_SIZE environment variable') 14 | 15 | self._openai_api_key = variables.get('OPENAI_API_KEY') 16 | self._openai_model = variables.get('OPENAI_MODEL') 17 | self._openai_organization = variables.get('OPENAI_ORG_ID') 18 | self._openai_project = variables.get('OPENAI_PROJECT_ID') 19 | self._openai_base_url = variables.get('OPENAI_BASE_URL') 20 | 21 | @property 22 | def max_file_size(self) -> int: 23 | return self._max_file_size 24 | 25 | @property 26 | def openai_configuration(self) -> OpenAIConfiguration|None: 27 | if self._openai_api_key is None or self._openai_model is None: 28 | return None 29 | 30 | return OpenAIConfiguration( 31 | api_key=self._openai_api_key, 32 | model=self._openai_model, 33 | organization=self._openai_organization, 34 | project=self._openai_project, 35 | base_url=self._openai_base_url 36 | ) 37 | 38 | -------------------------------------------------------------------------------- /clients/Dotnet/Dotnet.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarkItDownApiClient", "MarkItDownApiClient\MarkItDownApiClient.csproj", "{40716BCB-5046-49E5-A9EC-33768C6BE0B2}" 4 | EndProject 5 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sample", "sample", "{841B4729-D58D-426D-93B9-E66839B8BABA}" 6 | EndProject 7 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApi", "sample\WebApi\WebApi.csproj", "{792A2A12-BE18-4ABB-8796-A953EB6E3CEB}" 8 | EndProject 9 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{C56911D0-0F7B-41FF-BD59-ED9AFD244528}" 10 | EndProject 11 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarkItDownApiClientTests", "tests\MarkItDownApiClientTests\MarkItDownApiClientTests.csproj", "{19B253BF-1191-457F-B1E4-469594B341D1}" 12 | EndProject 13 | Global 14 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 15 | Debug|Any CPU = Debug|Any CPU 16 | Release|Any CPU = Release|Any CPU 17 | EndGlobalSection 18 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 19 | {40716BCB-5046-49E5-A9EC-33768C6BE0B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 20 | {40716BCB-5046-49E5-A9EC-33768C6BE0B2}.Debug|Any CPU.Build.0 = Debug|Any CPU 21 | {40716BCB-5046-49E5-A9EC-33768C6BE0B2}.Release|Any CPU.ActiveCfg = Release|Any CPU 22 | {40716BCB-5046-49E5-A9EC-33768C6BE0B2}.Release|Any CPU.Build.0 = Release|Any CPU 23 | {792A2A12-BE18-4ABB-8796-A953EB6E3CEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 24 | {792A2A12-BE18-4ABB-8796-A953EB6E3CEB}.Debug|Any CPU.Build.0 = Debug|Any CPU 25 | {792A2A12-BE18-4ABB-8796-A953EB6E3CEB}.Release|Any CPU.ActiveCfg = Release|Any CPU 26 | {792A2A12-BE18-4ABB-8796-A953EB6E3CEB}.Release|Any CPU.Build.0 = Release|Any CPU 27 | {19B253BF-1191-457F-B1E4-469594B341D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 28 | {19B253BF-1191-457F-B1E4-469594B341D1}.Debug|Any CPU.Build.0 = Debug|Any CPU 29 | {19B253BF-1191-457F-B1E4-469594B341D1}.Release|Any CPU.ActiveCfg = Release|Any CPU 30 | {19B253BF-1191-457F-B1E4-469594B341D1}.Release|Any CPU.Build.0 = Release|Any CPU 31 | EndGlobalSection 32 | GlobalSection(NestedProjects) = preSolution 33 | {792A2A12-BE18-4ABB-8796-A953EB6E3CEB} = {841B4729-D58D-426D-93B9-E66839B8BABA} 34 | {19B253BF-1191-457F-B1E4-469594B341D1} = {C56911D0-0F7B-41FF-BD59-ED9AFD244528} 35 | EndGlobalSection 36 | EndGlobal 37 | -------------------------------------------------------------------------------- /app/tests/test_configuration.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | from app.configuration.configuration import Configuration 4 | from app.configuration.variables import Variables 5 | 6 | class TestVariables(Variables): 7 | def __init__(self, values: dict[str, str]): 8 | self.values = values 9 | 10 | def get(self, name: str, default=None) -> str | None: 11 | return self.values.get(name, default) 12 | 13 | def test_max_file_size_valid(): 14 | cfg = Configuration(TestVariables({'MAX_FILE_SIZE': '1000000'})) 15 | assert cfg.max_file_size == 1000000 16 | 17 | def test_max_file_size_invalid(): 18 | with pytest.raises(ValueError): 19 | Configuration(TestVariables({'MAX_FILE_SIZE': 'invalid'})) 20 | 21 | def test_max_file_size_default(): 22 | cfg = Configuration(TestVariables({})) 23 | assert cfg.max_file_size == 26214400 24 | 25 | def test_openai_configuration(): 26 | cfg = Configuration(TestVariables({ 27 | 'OPENAI_API_KEY': 'api_key', 28 | 'OPENAI_MODEL': 'model', 29 | 'OPENAI_ORG_ID': 'organization', 30 | 'OPENAI_PROJECT_ID': 'project', 31 | 'OPENAI_BASE_URL': 'base_url' 32 | })) 33 | 34 | assert cfg.openai_configuration.api_key == 'api_key' 35 | assert cfg.openai_configuration.model == 'model' 36 | assert cfg.openai_configuration.organization == 'organization' 37 | assert cfg.openai_configuration.project == 'project' 38 | assert cfg.openai_configuration.base_url == 'base_url' 39 | 40 | def test_openai_not_configured(): 41 | cfg = Configuration(TestVariables({})) 42 | assert cfg.openai_configuration is None 43 | 44 | def test_openai_missing_api_key(): 45 | cfg = Configuration(TestVariables({ 46 | 'OPENAI_MODEL': 'model', 47 | 'OPENAI_ORG_ID': 'organization', 48 | 'OPENAI_PROJECT_ID': 'project', 49 | 'OPENAI_BASE_URL': 'base_url' 50 | })) 51 | assert cfg.openai_configuration is None 52 | 53 | def test_openai_only_api_key_and_model(): 54 | cfg = Configuration(TestVariables({ 55 | 'OPENAI_API_KEY': 'api_key', 56 | 'OPENAI_MODEL': 'model' 57 | })) 58 | 59 | assert cfg.openai_configuration.api_key == 'api_key' 60 | assert cfg.openai_configuration.model == 'model' 61 | 62 | 63 | def test_openai_only_api_key(): 64 | cfg = Configuration(TestVariables({ 65 | 'OPENAI_API_KEY': 'api_key', 66 | })) 67 | 68 | assert cfg.openai_configuration is None 69 | 70 | def test_openai_only_model(): 71 | cfg = Configuration(TestVariables({ 72 | 'OPENAI_MODEL': 'model', 73 | })) 74 | 75 | assert cfg.openai_configuration is None -------------------------------------------------------------------------------- /.github/workflows/build-dotnet.yml: -------------------------------------------------------------------------------- 1 | name: Built .NET client 2 | 3 | on: 4 | push: 5 | branches: [ "main" ] 6 | # Publish semver tags as releases. 7 | tags: [ 'v*.*.*' ] 8 | pull_request: 9 | branches: [ "main" ] 10 | 11 | jobs: 12 | test: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout repository 16 | uses: actions/checkout@v4 17 | 18 | - name: Setup .NET 19 | uses: actions/setup-dotnet@v1 20 | with: 21 | dotnet-version: 9.0.x 22 | 23 | - name: Test 24 | run: dotnet test 25 | working-directory: clients/Dotnet 26 | 27 | build-and-push: 28 | runs-on: ubuntu-latest 29 | needs: test 30 | permissions: 31 | contents: read 32 | packages: write 33 | # This is used to complete the identity challenge 34 | # with sigstore/fulcio when running outside of PRs. 35 | id-token: write 36 | steps: 37 | - name: Extract version from tag 38 | run: | 39 | if [[ $GITHUB_REF == refs/tags/v* ]]; then 40 | VERSION=${GITHUB_REF#refs/tags/v} 41 | else 42 | VERSION="0.0.0" 43 | fi 44 | echo "Extracted version: $VERSION" 45 | echo "VERSION=$VERSION" >> $GITHUB_ENV 46 | 47 | - name: Checkout repository 48 | uses: actions/checkout@v4 49 | 50 | - name: Setup .NET 51 | uses: actions/setup-dotnet@v1 52 | with: 53 | dotnet-version: 9.0.x 54 | 55 | - name: Install dependencies 56 | run: dotnet restore 57 | working-directory: clients/Dotnet 58 | 59 | # extract version from tag 60 | - name: Pack 61 | run: dotnet pack -c Release --property:Version=${{env.VERSION}} 62 | working-directory: clients/Dotnet 63 | 64 | # Save as an artifact 65 | - name: Archive 66 | uses: actions/upload-artifact@v4 67 | with: 68 | path: 'clients/Dotnet/MarkItDownApiClient/bin/Release/MarkItDownApi.Client.*.nupkg' 69 | name: 'nuget-package' 70 | 71 | nuget-publish: 72 | runs-on: ubuntu-latest 73 | needs: build-and-push 74 | if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') 75 | steps: 76 | - name: Checkout repository 77 | uses: actions/checkout@v4 78 | 79 | - name: Setup .NET 80 | uses: actions/setup-dotnet@v1 81 | with: 82 | dotnet-version: 9.0.x 83 | 84 | - name: Download artifact 85 | uses: actions/download-artifact@v4 86 | with: 87 | name: nuget-package 88 | path: package 89 | 90 | - name: Publish 91 | run: dotnet nuget push package/MarkItDownApi.Client.*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_API_KEY }} 92 | -------------------------------------------------------------------------------- /clients/Dotnet/MarkItDownApiClient/Client/HttpMarkItDownClient.cs: -------------------------------------------------------------------------------- 1 | using System.Net; 2 | using System.Net.Http.Json; 3 | using System.Text.Json; 4 | using MarkItDownApiClient.Dto; 5 | using MarkItDownApiClient.Exceptions; 6 | 7 | namespace MarkItDownApiClient.Client; 8 | 9 | public class HttpMarkItDownClient(HttpClient client) : MarkItDownClient 10 | { 11 | private const string ReadEndpoint = "read"; 12 | 13 | public async Task Read(Stream stream) 14 | { 15 | using var content = new StreamContent(stream); 16 | 17 | using var formData = new MultipartFormDataContent(); 18 | formData.Add(content, "file", "file.txt"); 19 | 20 | using var response = await client.PostAsync(ReadEndpoint, formData); 21 | 22 | switch (response.StatusCode) 23 | { 24 | case HttpStatusCode.UnsupportedMediaType: 25 | { 26 | var error = await ReadErrorBody(response); 27 | throw new UnsupportedMediaFormat(error.Detail); 28 | } 29 | case HttpStatusCode.BadRequest: 30 | { 31 | var error = await ReadErrorBody(response); 32 | throw new FileConversionFailure(error.Detail); 33 | } 34 | case HttpStatusCode.RequestEntityTooLarge: 35 | { 36 | throw new FileTooLarge(); 37 | } 38 | } 39 | 40 | if (!response.IsSuccessStatusCode) 41 | { 42 | var error = await ReadErrorBody(response); 43 | throw new UnknownProblem(response.StatusCode, error?.Detail, null); 44 | } 45 | 46 | try 47 | { 48 | var responseContent = await response.Content.ReadFromJsonAsync(new JsonSerializerOptions 49 | { 50 | PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower 51 | }); 52 | if (responseContent is null) 53 | { 54 | var error = await ReadErrorBody(response); 55 | throw new UnknownProblem(response.StatusCode, error?.Detail, null); 56 | } 57 | 58 | return responseContent; 59 | } 60 | catch (Exception ex) 61 | { 62 | var error = await ReadErrorBody(response); 63 | throw new UnknownProblem(response.StatusCode, error?.Detail, ex); 64 | } 65 | } 66 | 67 | private static async Task ReadErrorBody(HttpResponseMessage response) 68 | { 69 | try 70 | { 71 | var error = await response.Content.ReadFromJsonAsync(); 72 | return error ?? new Error("An unknown problem occurred. Cannot read error content."); 73 | } 74 | catch (Exception) 75 | { 76 | return new Error("An unknown problem occurred. Cannot read error content."); 77 | } 78 | } 79 | } -------------------------------------------------------------------------------- /app/requirements.txt: -------------------------------------------------------------------------------- 1 | -i https://pypi.org/simple 2 | annotated-types==0.7.0; python_version >= '3.8' 3 | anyio==4.7.0; python_version >= '3.9' 4 | audioop-lts==0.2.1; python_version >= '3.13' 5 | beautifulsoup4==4.12.3; python_full_version >= '3.6.0' 6 | certifi==2024.12.14; python_version >= '3.6' 7 | cffi==1.17.1; python_version >= '3.8' 8 | charset-normalizer==3.4.0; python_full_version >= '3.7.0' 9 | click==8.1.7; python_version >= '3.7' 10 | cobble==0.1.4; python_version >= '3.5' 11 | cryptography==44.0.0; python_version >= '3.7' and python_full_version not in '3.9.0, 3.9.1' 12 | defusedxml==0.7.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' 13 | distro==1.9.0; python_version >= '3.6' 14 | dnspython==2.7.0; python_version >= '3.9' 15 | email-validator==2.2.0; python_version >= '3.8' 16 | et-xmlfile==2.0.0; python_version >= '3.8' 17 | exceptiongroup==1.2.2; python_version >= '3.7' 18 | fastapi[standard]==0.115.6; python_version >= '3.8' 19 | fastapi-cli[standard]==0.0.7; python_version >= '3.8' 20 | h11==0.14.0; python_version >= '3.7' 21 | httpcore==1.0.7; python_version >= '3.8' 22 | httptools==0.6.4; python_full_version >= '3.8.0' 23 | httpx==0.28.1; python_version >= '3.8' 24 | idna==3.10; python_version >= '3.6' 25 | jinja2==3.1.4; python_version >= '3.7' 26 | jiter==0.8.2; python_version >= '3.8' 27 | lxml==5.3.0; python_version >= '3.6' 28 | mammoth==1.8.0; python_version >= '3.7' 29 | markdown-it-py==3.0.0; python_version >= '3.8' 30 | markdownify==0.14.1 31 | markitdown==0.0.1a3; python_version >= '3.10' 32 | markupsafe==3.0.2; python_version >= '3.9' 33 | mdurl==0.1.2; python_version >= '3.7' 34 | numpy==2.2.0; python_version >= '3.10' 35 | openai==1.58.1; python_version >= '3.8' 36 | openpyxl==3.1.5; python_version >= '3.8' 37 | pandas==2.2.3; python_version >= '3.9' 38 | pathvalidate==3.2.1; python_version >= '3.7' 39 | pdfminer-six==20240706; python_version >= '3.8' 40 | pillow==11.0.0; python_version >= '3.9' 41 | puremagic==1.28 42 | pycparser==2.22; python_version >= '3.8' 43 | pydantic==2.10.4; python_version >= '3.8' 44 | pydantic-core==2.27.2; python_version >= '3.8' 45 | pydub==0.25.1 46 | pygments==2.18.0; python_version >= '3.8' 47 | python-dateutil==2.9.0.post0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' 48 | python-dotenv==1.0.1; python_version >= '3.8' 49 | python-multipart==0.0.20; python_version >= '3.8' 50 | python-pptx==1.0.2; python_version >= '3.8' 51 | pytz==2024.2 52 | pyyaml==6.0.2; python_version >= '3.8' 53 | requests==2.32.3; python_version >= '3.8' 54 | rich==13.9.4; python_full_version >= '3.8.0' 55 | rich-toolkit==0.12.0; python_version >= '3.8' 56 | shellingham==1.5.4; python_version >= '3.7' 57 | six==1.17.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' 58 | sniffio==1.3.1; python_version >= '3.7' 59 | soupsieve==2.6; python_version >= '3.8' 60 | speechrecognition==3.12.0; python_version >= '3.9' 61 | standard-aifc==3.13.0; python_version >= '3.13' 62 | standard-chunk==3.13.0; python_version >= '3.13' 63 | starlette==0.41.3; python_version >= '3.8' 64 | tqdm==4.67.1; python_version >= '3.7' 65 | typer==0.15.1; python_version >= '3.7' 66 | typing-extensions==4.12.2; python_version >= '3.8' 67 | tzdata==2024.2; python_version >= '2' 68 | urllib3==2.2.3; python_version >= '3.8' 69 | uvicorn[standard]==0.34.0; python_version >= '3.9' 70 | uvloop==0.21.0; python_full_version >= '3.8.0' 71 | watchfiles==1.0.3; python_version >= '3.9' 72 | websockets==14.1; python_version >= '3.9' 73 | xlsxwriter==3.2.0; python_version >= '3.6' 74 | youtube-transcript-api==0.6.3; python_version < '3.14' and python_version >= '3.8' 75 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Python template 3 | # Byte-compiled / optimized / DLL files 4 | __pycache__/ 5 | *.py[cod] 6 | *$py.class 7 | 8 | # C extensions 9 | *.so 10 | 11 | # Distribution / packaging 12 | .Python 13 | env/ 14 | build/ 15 | develop-eggs/ 16 | dist/ 17 | downloads/ 18 | eggs/ 19 | .eggs/ 20 | lib/ 21 | lib64/ 22 | parts/ 23 | sdist/ 24 | var/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .coverage 43 | .coverage.* 44 | .cache 45 | nosetests.xml 46 | coverage.xml 47 | *,cover 48 | .hypothesis/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | 58 | # Flask stuff: 59 | instance/ 60 | .webassets-cache 61 | 62 | # Scrapy stuff: 63 | .scrapy 64 | 65 | # Sphinx documentation 66 | docs/_build/ 67 | 68 | # PyBuilder 69 | target/ 70 | 71 | # IPython Notebook 72 | .ipynb_checkpoints 73 | 74 | # pyenv 75 | .python-version 76 | 77 | # celery beat schedule file 78 | celerybeat-schedule 79 | 80 | # dotenv 81 | .env 82 | 83 | # virtualenv 84 | venv/ 85 | ENV/ 86 | 87 | # Spyder project settings 88 | .spyderproject 89 | 90 | # Rope project settings 91 | .ropeproject 92 | ### VirtualEnv template 93 | # Virtualenv 94 | # http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ 95 | [Bb]in 96 | [Ii]nclude 97 | [Ll]ib 98 | [Ll]ib64 99 | [Ll]ocal 100 | [Ss]cripts 101 | pyvenv.cfg 102 | .venv 103 | pip-selfcheck.json 104 | 105 | ### JetBrains template 106 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 107 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 108 | 109 | # User-specific stuff 110 | .idea/**/workspace.xml 111 | .idea/**/tasks.xml 112 | .idea/**/usage.statistics.xml 113 | .idea/**/dictionaries 114 | .idea/**/shelf 115 | 116 | # AWS User-specific 117 | .idea/**/aws.xml 118 | 119 | # Generated files 120 | .idea/**/contentModel.xml 121 | 122 | # Sensitive or high-churn files 123 | .idea/**/dataSources/ 124 | .idea/**/dataSources.ids 125 | .idea/**/dataSources.local.xml 126 | .idea/**/sqlDataSources.xml 127 | .idea/**/dynamic.xml 128 | .idea/**/uiDesigner.xml 129 | .idea/**/dbnavigator.xml 130 | 131 | # Gradle 132 | .idea/**/gradle.xml 133 | .idea/**/libraries 134 | 135 | # Gradle and Maven with auto-import 136 | # When using Gradle or Maven with auto-import, you should exclude module files, 137 | # since they will be recreated, and may cause churn. Uncomment if using 138 | # auto-import. 139 | # .idea/artifacts 140 | # .idea/compiler.xml 141 | # .idea/jarRepositories.xml 142 | # .idea/modules.xml 143 | # .idea/*.iml 144 | # .idea/modules 145 | # *.iml 146 | # *.ipr 147 | 148 | # CMake 149 | cmake-build-*/ 150 | 151 | # Mongo Explorer plugin 152 | .idea/**/mongoSettings.xml 153 | 154 | # File-based project format 155 | *.iws 156 | 157 | # IntelliJ 158 | out/ 159 | 160 | # mpeltonen/sbt-idea plugin 161 | .idea_modules/ 162 | 163 | # JIRA plugin 164 | atlassian-ide-plugin.xml 165 | 166 | # Cursive Clojure plugin 167 | .idea/replstate.xml 168 | 169 | # SonarLint plugin 170 | .idea/sonarlint/ 171 | 172 | # Crashlytics plugin (for Android Studio and IntelliJ) 173 | com_crashlytics_export_strings.xml 174 | crashlytics.properties 175 | crashlytics-build.properties 176 | fabric.properties 177 | 178 | # Editor-based Rest Client 179 | .idea/httpRequests 180 | 181 | # Android studio 3.1+ serialized cache file 182 | .idea/caches/build_file_checksums.ser 183 | 184 | # idea folder, uncomment if you don't need it 185 | # .idea 186 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MarkItDownApi - HTTP wrapper for MarkItDown 2 | 3 | ## Overview 4 | 5 | This repository provides an HTTP wrapper for Microsoft's **MarkItDown** (https://github.com/microsoft/markitdown) tool, enabling users to easily integrate and utilize its functionality via RESTful API endpoints. This project simplifies the process of interacting with MarkItDown by abstracting the tool's core features into an accessible web service. 6 | 7 | ## Features 8 | 9 | - **Easy Integration**: Use RESTful APIs to interact with MarkItDown without diving into its internal implementation. 10 | - **Technology Agnostic**: Use Docker to deploy the service on any platform, utilize generic HTTP interface to integrate with any technology stack. 11 | - **Client libraries**: Use the provided client libraries to interact with the service in your preferred programming language. 12 | 13 | ## Quick Start 14 | 15 | ### Start Docker Container 16 | 17 | ```bash 18 | docker run --rm --name markitdown-api -p 5000:80 ghcr.io/adampraszywka/markitdownapi:main 19 | ``` 20 | ### Convert Markdown to HTML using HTTP request 21 | 22 | Request (curl) 23 | ```bash 24 | curl -X POST 'http://localhost:5000/read' --form 'file=@"path/to/your/file.pdf"' 25 | ``` 26 | Example response 27 | ```json 28 | { 29 | "filename": "file.pdf", 30 | "content": { 31 | "title": "Lorem Ipsum", 32 | "text_content": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s..." 33 | } 34 | } 35 | ``` 36 | 37 | ### .NET Client Library 38 | 39 | 1. Install the package from NuGet: 40 | ```bash 41 | dotnet add package MarkItDownApi.Client 42 | ``` 43 | 2. Register client in your dependency injection container: 44 | ```csharp 45 | builder.Services.AddMarkItDownApiClient(new Uri("http://localhost:5000")); 46 | ``` 47 | 3. Use the client in your code: 48 | ```csharp 49 | app.MapGet("/", async (MarkItDownClient client) => { 50 | var file = await File.ReadAllBytesAsync("sample.pdf"); 51 | var fileStream = new MemoryStream(file); 52 | 53 | var content = await client.Read(fileStream); 54 | 55 | return content; 56 | }); 57 | ``` 58 | 59 | ## Endpoints 60 | 61 | ### POST /read 62 | Converts a document to Markdown format. 63 | 64 | Request: 65 | ```bash 66 | curl -X POST 'http://localhost:5000/read' --form 'file=@"path/to/your/file.pdf"' 67 | ``` 68 | 69 | Response: 70 | ```json 71 | { 72 | "filename": "[FILENAME]", 73 | "content": { 74 | "title": "[TITLE EXTRACTED FROM THE DOCUMENT]", 75 | "text_content": "[CONTENT EXTRACTED FROM THE DOCUMENT]" 76 | } 77 | } 78 | ``` 79 | 80 | ### GET /ping 81 | Health check endpoint. 82 | 83 | Request: 84 | ```bash 85 | curl -X GET 'http://localhost:5000/ping' 86 | ``` 87 | Response: 88 | ```json 89 | { 90 | "status": "ok" 91 | } 92 | ``` 93 | 94 | ## Image description using LLM 95 | 96 | **OpenAI account is optional. If there is no OpenAI account, the image description feature will be disabled.** 97 | 98 | Markitdown uses OpenAI LLMs to generate text descriptions for images. 99 | Set the following env variables to enable this feature: 100 | - `OPENAI_API_KEY` - OpenAI API key 101 | - `OPENAI_MODEL` - OpenAI model name (e.g. `gpt-4o`) 102 | 103 | The following variables are optional, and can be used to utilize markitdown with organization-specific OpenAI accounts: 104 | - `OPENAI_ORG_ID` - OpenAI organization ID 105 | - `OPENAI_PROJECT_ID` - OpenAI project ID 106 | - `OPENAI_BASE_URL` - OpenAI base URL 107 | 108 | ## License 109 | 110 | This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details. 111 | 112 | ## Acknowledgments 113 | 114 | - Thanks to Microsoft for the MarkItDown tool. 115 | - Inspired by the need for simpler API integrations for Markdown processing. 116 | 117 | --- 118 | 119 | Feel free to open an issue or contact us for support and questions. 120 | 121 | -------------------------------------------------------------------------------- /.github/workflows/build-app.yml: -------------------------------------------------------------------------------- 1 | name: Build and push app Docker image 2 | 3 | # This workflow uses actions that are not certified by GitHub. 4 | # They are provided by a third-party and are governed by 5 | # separate terms of service, privacy policy, and support 6 | # documentation. 7 | 8 | on: 9 | push: 10 | branches: [ "main" ] 11 | # Publish semver tags as releases. 12 | tags: [ 'v*.*.*' ] 13 | pull_request: 14 | branches: [ "main" ] 15 | 16 | env: 17 | # Use docker.io for Docker Hub if empty 18 | REGISTRY: ghcr.io 19 | # github.repository as / 20 | IMAGE_NAME: ${{ github.repository }} 21 | 22 | 23 | jobs: 24 | build-and-push-app: 25 | runs-on: ubuntu-latest 26 | permissions: 27 | contents: read 28 | packages: write 29 | # This is used to complete the identity challenge 30 | # with sigstore/fulcio when running outside of PRs. 31 | id-token: write 32 | 33 | steps: 34 | - name: Checkout repository 35 | uses: actions/checkout@v4 36 | 37 | # Install the cosign tool except on PR 38 | # https://github.com/sigstore/cosign-installer 39 | - name: Install cosign 40 | if: github.event_name != 'pull_request' 41 | uses: sigstore/cosign-installer@59acb6260d9c0ba8f4a2f9d9b48431a222b68e20 #v3.5.0 42 | with: 43 | cosign-release: 'v2.2.4' 44 | 45 | # Set up BuildKit Docker container builder to be able to build 46 | # multi-platform images and export cache 47 | # https://github.com/docker/setup-buildx-action 48 | - name: Set up Docker Buildx 49 | uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 50 | 51 | # Login against a Docker registry except on PR 52 | # https://github.com/docker/login-action 53 | - name: Log into registry ${{ env.REGISTRY }} 54 | if: github.event_name != 'pull_request' 55 | uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 56 | with: 57 | registry: ${{ env.REGISTRY }} 58 | username: ${{ github.actor }} 59 | password: ${{ secrets.GITHUB_TOKEN }} 60 | 61 | # Extract metadata (tags, labels) for Docker 62 | # https://github.com/docker/metadata-action 63 | - name: Extract Docker metadata 64 | id: meta 65 | uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 # v5.0.0 66 | with: 67 | images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} 68 | 69 | # Build and push Docker image with Buildx (don't push on PR) 70 | # https://github.com/docker/build-push-action 71 | - name: Build and push Docker image 72 | id: build-and-push 73 | uses: docker/build-push-action@0565240e2d4ab88bba5387d719585280857ece09 # v5.0.0 74 | with: 75 | context: app 76 | file: app/Dockerfile 77 | push: ${{ github.event_name != 'pull_request' }} 78 | tags: ${{ steps.meta.outputs.tags }} 79 | labels: ${{ steps.meta.outputs.labels }} 80 | cache-from: type=gha 81 | cache-to: type=gha,mode=max 82 | platforms: linux/amd64,linux/arm64 83 | 84 | 85 | # Sign the resulting Docker image digest except on PRs. 86 | # This will only write to the public Rekor transparency log when the Docker 87 | # repository is public to avoid leaking data. If you would like to publish 88 | # transparency data even for private images, pass --force to cosign below. 89 | # https://github.com/sigstore/cosign 90 | - name: Sign the published Docker image 91 | if: ${{ github.event_name != 'pull_request' }} 92 | env: 93 | # https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-an-intermediate-environment-variable 94 | TAGS: ${{ steps.meta.outputs.tags }} 95 | DIGEST: ${{ steps.build-and-push.outputs.digest }} 96 | # This step uses the identity token to provision an ephemeral certificate 97 | # against the sigstore community Fulcio instance. 98 | run: echo "${TAGS}" | xargs -I {} cosign sign --yes {}@${DIGEST} 99 | -------------------------------------------------------------------------------- /clients/Dotnet/tests/MarkItDownApiClientTests/HttpMarkItDownClientTests.cs: -------------------------------------------------------------------------------- 1 | using System.Net; 2 | using MarkItDownApiClient.Client; 3 | using MarkItDownApiClient.Exceptions; 4 | using WireMock.ResponseBuilders; 5 | 6 | namespace MarkItDownApiClientTests; 7 | 8 | public class HttpMarkItDownClientTests 9 | { 10 | private readonly byte[] _file = [0x01, 0x02, 0x03, 0x04]; 11 | 12 | [Test] 13 | public async Task Success() 14 | { 15 | using var fixture = new WireMockTestFixture(_file, Response.Create() 16 | .WithStatusCode(200) 17 | .WithBodyAsJson(new 18 | { 19 | filename = "file.md", content = new { title = "Title", text_content = "Text content" } 20 | }) 21 | ); 22 | 23 | var client = new HttpMarkItDownClient(fixture.Client); 24 | var stream = new MemoryStream(_file); 25 | 26 | var result = await client.Read(stream); 27 | 28 | Assert.That(result.Filename, Is.EqualTo("file.md")); 29 | Assert.That(result.Content.Title, Is.EqualTo("Title")); 30 | Assert.That(result.Content.TextContent, Is.EqualTo("Text content")); 31 | } 32 | 33 | [Test] 34 | public void NotSupportedFormat() 35 | { 36 | using var fixture = new WireMockTestFixture(_file, Response.Create() 37 | .WithStatusCode(415) 38 | .WithBodyAsJson(new { detail = "Not supported format" }) 39 | ); 40 | 41 | var client = new HttpMarkItDownClient(fixture.Client); 42 | var stream = new MemoryStream(_file); 43 | var ex = Assert.ThrowsAsync(() => _ = client.Read(stream)); 44 | Assert.That(ex.Message, Is.EqualTo("Not supported format")); 45 | } 46 | 47 | [Test] 48 | public void FileConversionFailure() 49 | { 50 | using var fixture = new WireMockTestFixture(_file, Response.Create() 51 | .WithStatusCode(400) 52 | .WithBodyAsJson(new { detail = "File conversion failure" }) 53 | ); 54 | 55 | var client = new HttpMarkItDownClient(fixture.Client); 56 | var stream = new MemoryStream(_file); 57 | var ex = Assert.ThrowsAsync(() => _ = client.Read(stream)); 58 | Assert.That(ex.Message, Is.EqualTo("File conversion failure")); 59 | } 60 | 61 | private static IEnumerable UnknownProblemCases() 62 | { 63 | yield return [new { }, "An unknown problem occurred."]; 64 | yield return [new { foo = "bar" }, "An unknown problem occurred."]; 65 | yield return [new { detail = "Super fancy error" }, "Super fancy error"]; 66 | } 67 | 68 | [Test] 69 | [TestCaseSource(nameof(UnknownProblemCases))] 70 | public void UnknownProblemJsonBody(object responseBody, string expectedMessage) 71 | { 72 | using var fixture = new WireMockTestFixture(_file, Response.Create() 73 | .WithStatusCode(500) 74 | .WithBodyAsJson(responseBody) 75 | ); 76 | 77 | var client = new HttpMarkItDownClient(fixture.Client); 78 | 79 | var stream = new MemoryStream(_file); 80 | var ex = Assert.ThrowsAsync(() => client.Read(stream)); 81 | Assert.That(ex.Message, Is.EqualTo(expectedMessage)); 82 | Assert.That(ex.StatusCode, Is.EqualTo(HttpStatusCode.InternalServerError)); 83 | } 84 | 85 | [Test] 86 | public void UnknownProblemEmptyBody() 87 | { 88 | 89 | using var fixture = new WireMockTestFixture(_file, Response.Create() 90 | .WithStatusCode(500) 91 | .WithBody([])); 92 | var client = new HttpMarkItDownClient(fixture.Client); 93 | 94 | var stream = new MemoryStream(_file); 95 | var ex = Assert.ThrowsAsync(() => client.Read(stream)); 96 | Assert.That(ex.Message, Is.EqualTo("An unknown problem occurred. Cannot read error content.")); 97 | } 98 | 99 | [Test] 100 | public void FileTooLarge() 101 | { 102 | 103 | using var fixture = new WireMockTestFixture(_file, Response.Create() 104 | .WithStatusCode(413) 105 | .WithBody([])); 106 | var client = new HttpMarkItDownClient(fixture.Client); 107 | 108 | var stream = new MemoryStream(_file); 109 | var ex = Assert.ThrowsAsync(() => client.Read(stream)); 110 | Assert.That(ex.Message, Is.EqualTo("Provided file exceeds the maximum size set in MarkItDownApi")); 111 | } 112 | 113 | } -------------------------------------------------------------------------------- /clients/Dotnet/.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Ww][Ii][Nn]32/ 27 | [Aa][Rr][Mm]/ 28 | [Aa][Rr][Mm]64/ 29 | bld/ 30 | [Bb]in/ 31 | [Oo]bj/ 32 | [Ll]og/ 33 | [Ll]ogs/ 34 | 35 | # Visual Studio 2015/2017 cache/options directory 36 | .vs/ 37 | # Uncomment if you have tasks that create the project's static files in wwwroot 38 | #wwwroot/ 39 | 40 | # Visual Studio 2017 auto generated files 41 | Generated\ Files/ 42 | 43 | # MSTest test Results 44 | [Tt]est[Rr]esult*/ 45 | [Bb]uild[Ll]og.* 46 | 47 | # NUnit 48 | *.VisualState.xml 49 | TestResult.xml 50 | nunit-*.xml 51 | 52 | # Build Results of an ATL Project 53 | [Dd]ebugPS/ 54 | [Rr]eleasePS/ 55 | dlldata.c 56 | 57 | # Benchmark Results 58 | BenchmarkDotNet.Artifacts/ 59 | 60 | # .NET Core 61 | project.lock.json 62 | project.fragment.lock.json 63 | artifacts/ 64 | 65 | # ASP.NET Scaffolding 66 | ScaffoldingReadMe.txt 67 | 68 | # StyleCop 69 | StyleCopReport.xml 70 | 71 | # Files built by Visual Studio 72 | *_i.c 73 | *_p.c 74 | *_h.h 75 | *.ilk 76 | *.meta 77 | *.obj 78 | *.iobj 79 | *.pch 80 | *.pdb 81 | *.ipdb 82 | *.pgc 83 | *.pgd 84 | *.rsp 85 | # but not Directory.Build.rsp, as it configures directory-level build defaults 86 | !Directory.Build.rsp 87 | *.sbr 88 | *.tlb 89 | *.tli 90 | *.tlh 91 | *.tmp 92 | *.tmp_proj 93 | *_wpftmp.csproj 94 | *.log 95 | *.tlog 96 | *.vspscc 97 | *.vssscc 98 | .builds 99 | *.pidb 100 | *.svclog 101 | *.scc 102 | 103 | # Chutzpah Test files 104 | _Chutzpah* 105 | 106 | # Visual C++ cache files 107 | ipch/ 108 | *.aps 109 | *.ncb 110 | *.opendb 111 | *.opensdf 112 | *.sdf 113 | *.cachefile 114 | *.VC.db 115 | *.VC.VC.opendb 116 | 117 | # Visual Studio profiler 118 | *.psess 119 | *.vsp 120 | *.vspx 121 | *.sap 122 | 123 | # Visual Studio Trace Files 124 | *.e2e 125 | 126 | # TFS 2012 Local Workspace 127 | $tf/ 128 | 129 | # Guidance Automation Toolkit 130 | *.gpState 131 | 132 | # ReSharper is a .NET coding add-in 133 | _ReSharper*/ 134 | *.[Rr]e[Ss]harper 135 | *.DotSettings.user 136 | 137 | # TeamCity is a build add-in 138 | _TeamCity* 139 | 140 | # DotCover is a Code Coverage Tool 141 | *.dotCover 142 | 143 | # AxoCover is a Code Coverage Tool 144 | .axoCover/* 145 | !.axoCover/settings.json 146 | 147 | # Coverlet is a free, cross platform Code Coverage Tool 148 | coverage*.json 149 | coverage*.xml 150 | coverage*.info 151 | 152 | # Visual Studio code coverage results 153 | *.coverage 154 | *.coveragexml 155 | 156 | # NCrunch 157 | _NCrunch_* 158 | .*crunch*.local.xml 159 | nCrunchTemp_* 160 | 161 | # MightyMoose 162 | *.mm.* 163 | AutoTest.Net/ 164 | 165 | # Web workbench (sass) 166 | .sass-cache/ 167 | 168 | # Installshield output folder 169 | [Ee]xpress/ 170 | 171 | # DocProject is a documentation generator add-in 172 | DocProject/buildhelp/ 173 | DocProject/Help/*.HxT 174 | DocProject/Help/*.HxC 175 | DocProject/Help/*.hhc 176 | DocProject/Help/*.hhk 177 | DocProject/Help/*.hhp 178 | DocProject/Help/Html2 179 | DocProject/Help/html 180 | 181 | # Click-Once directory 182 | publish/ 183 | 184 | # Publish Web Output 185 | *.[Pp]ublish.xml 186 | *.azurePubxml 187 | # Note: Comment the next line if you want to checkin your web deploy settings, 188 | # but database connection strings (with potential passwords) will be unencrypted 189 | *.pubxml 190 | *.publishproj 191 | 192 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 193 | # checkin your Azure Web App publish settings, but sensitive information contained 194 | # in these scripts will be unencrypted 195 | PublishScripts/ 196 | 197 | # NuGet Packages 198 | *.nupkg 199 | # NuGet Symbol Packages 200 | *.snupkg 201 | # The packages folder can be ignored because of Package Restore 202 | **/[Pp]ackages/* 203 | # except build/, which is used as an MSBuild target. 204 | !**/[Pp]ackages/build/ 205 | # Uncomment if necessary however generally it will be regenerated when needed 206 | #!**/[Pp]ackages/repositories.config 207 | # NuGet v3's project.json files produces more ignorable files 208 | *.nuget.props 209 | *.nuget.targets 210 | 211 | # Microsoft Azure Build Output 212 | csx/ 213 | *.build.csdef 214 | 215 | # Microsoft Azure Emulator 216 | ecf/ 217 | rcf/ 218 | 219 | # Windows Store app package directories and files 220 | AppPackages/ 221 | BundleArtifacts/ 222 | Package.StoreAssociation.xml 223 | _pkginfo.txt 224 | *.appx 225 | *.appxbundle 226 | *.appxupload 227 | 228 | # Visual Studio cache files 229 | # files ending in .cache can be ignored 230 | *.[Cc]ache 231 | # but keep track of directories ending in .cache 232 | !?*.[Cc]ache/ 233 | 234 | # Others 235 | ClientBin/ 236 | ~$* 237 | *~ 238 | *.dbmdl 239 | *.dbproj.schemaview 240 | *.jfm 241 | *.pfx 242 | *.publishsettings 243 | orleans.codegen.cs 244 | 245 | # Including strong name files can present a security risk 246 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 247 | #*.snk 248 | 249 | # Since there are multiple workflows, uncomment next line to ignore bower_components 250 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 251 | #bower_components/ 252 | 253 | # RIA/Silverlight projects 254 | Generated_Code/ 255 | 256 | # Backup & report files from converting an old project file 257 | # to a newer Visual Studio version. Backup files are not needed, 258 | # because we have git ;-) 259 | _UpgradeReport_Files/ 260 | Backup*/ 261 | UpgradeLog*.XML 262 | UpgradeLog*.htm 263 | ServiceFabricBackup/ 264 | *.rptproj.bak 265 | 266 | # SQL Server files 267 | *.mdf 268 | *.ldf 269 | *.ndf 270 | 271 | # Business Intelligence projects 272 | *.rdl.data 273 | *.bim.layout 274 | *.bim_*.settings 275 | *.rptproj.rsuser 276 | *- [Bb]ackup.rdl 277 | *- [Bb]ackup ([0-9]).rdl 278 | *- [Bb]ackup ([0-9][0-9]).rdl 279 | 280 | # Microsoft Fakes 281 | FakesAssemblies/ 282 | 283 | # GhostDoc plugin setting file 284 | *.GhostDoc.xml 285 | 286 | # Node.js Tools for Visual Studio 287 | .ntvs_analysis.dat 288 | node_modules/ 289 | 290 | # Visual Studio 6 build log 291 | *.plg 292 | 293 | # Visual Studio 6 workspace options file 294 | *.opt 295 | 296 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 297 | *.vbw 298 | 299 | # Visual Studio 6 auto-generated project file (contains which files were open etc.) 300 | *.vbp 301 | 302 | # Visual Studio 6 workspace and project file (working project files containing files to include in project) 303 | *.dsw 304 | *.dsp 305 | 306 | # Visual Studio 6 technical files 307 | *.ncb 308 | *.aps 309 | 310 | # Visual Studio LightSwitch build output 311 | **/*.HTMLClient/GeneratedArtifacts 312 | **/*.DesktopClient/GeneratedArtifacts 313 | **/*.DesktopClient/ModelManifest.xml 314 | **/*.Server/GeneratedArtifacts 315 | **/*.Server/ModelManifest.xml 316 | _Pvt_Extensions 317 | 318 | # Paket dependency manager 319 | .paket/paket.exe 320 | paket-files/ 321 | 322 | # FAKE - F# Make 323 | .fake/ 324 | 325 | # CodeRush personal settings 326 | .cr/personal 327 | 328 | # Python Tools for Visual Studio (PTVS) 329 | __pycache__/ 330 | *.pyc 331 | 332 | # Cake - Uncomment if you are using it 333 | # tools/** 334 | # !tools/packages.config 335 | 336 | # Tabs Studio 337 | *.tss 338 | 339 | # Telerik's JustMock configuration file 340 | *.jmconfig 341 | 342 | # BizTalk build output 343 | *.btp.cs 344 | *.btm.cs 345 | *.odx.cs 346 | *.xsd.cs 347 | 348 | # OpenCover UI analysis results 349 | OpenCover/ 350 | 351 | # Azure Stream Analytics local run output 352 | ASALocalRun/ 353 | 354 | # MSBuild Binary and Structured Log 355 | *.binlog 356 | 357 | # NVidia Nsight GPU debugger configuration file 358 | *.nvuser 359 | 360 | # MFractors (Xamarin productivity tool) working folder 361 | .mfractor/ 362 | 363 | # Local History for Visual Studio 364 | .localhistory/ 365 | 366 | # Visual Studio History (VSHistory) files 367 | .vshistory/ 368 | 369 | # BeatPulse healthcheck temp database 370 | healthchecksdb 371 | 372 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 373 | MigrationBackup/ 374 | 375 | # Ionide (cross platform F# VS Code tools) working folder 376 | .ionide/ 377 | 378 | # Fody - auto-generated XML schema 379 | FodyWeavers.xsd 380 | 381 | # VS Code files for those working on multiple tools 382 | .vscode/* 383 | !.vscode/settings.json 384 | !.vscode/tasks.json 385 | !.vscode/launch.json 386 | !.vscode/extensions.json 387 | *.code-workspace 388 | 389 | # Local History for Visual Studio Code 390 | .history/ 391 | 392 | # Windows Installer files from build outputs 393 | *.cab 394 | *.msi 395 | *.msix 396 | *.msm 397 | *.msp 398 | 399 | # JetBrains Rider 400 | *.sln.iml -------------------------------------------------------------------------------- /app/Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "f06d1d47715765a4bbcde49be9447b4b6e0ad46d0aa9de7791c1a99fce079854" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": { 8 | "python_version": "3.13" 9 | }, 10 | "sources": [ 11 | { 12 | "name": "pypi", 13 | "url": "https://pypi.org/simple", 14 | "verify_ssl": true 15 | } 16 | ] 17 | }, 18 | "default": { 19 | "annotated-types": { 20 | "hashes": [ 21 | "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", 22 | "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89" 23 | ], 24 | "index": "pypi", 25 | "markers": "python_version >= '3.8'", 26 | "version": "==0.7.0" 27 | }, 28 | "anyio": { 29 | "hashes": [ 30 | "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48", 31 | "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352" 32 | ], 33 | "index": "pypi", 34 | "markers": "python_version >= '3.9'", 35 | "version": "==4.7.0" 36 | }, 37 | "audioop-lts": { 38 | "hashes": [ 39 | "sha256:05da64e73837f88ee5c6217d732d2584cf638003ac72df124740460531e95e47", 40 | "sha256:120678b208cca1158f0a12d667af592e067f7a50df9adc4dc8f6ad8d065a93fb", 41 | "sha256:161249db9343b3c9780ca92c0be0d1ccbfecdbccac6844f3d0d44b9c4a00a17f", 42 | "sha256:2aeb6f96f7f6da80354330470b9134d81b4cf544cdd1c549f2f45fe964d28059", 43 | "sha256:2bdb3b7912ccd57ea53197943f1bbc67262dcf29802c4a6df79ec1c715d45a78", 44 | "sha256:3827e3fce6fee4d69d96a3d00cd2ab07f3c0d844cb1e44e26f719b34a5b15455", 45 | "sha256:4a8dd6a81770f6ecf019c4b6d659e000dc26571b273953cef7cd1d5ce2ff3ae6", 46 | "sha256:534ce808e6bab6adb65548723c8cbe189a3379245db89b9d555c4210b4aaa9b6", 47 | "sha256:54cd4520fc830b23c7d223693ed3e1b4d464997dd3abc7c15dce9a1f9bd76ab2", 48 | "sha256:56b7a0a4dba8e353436f31a932f3045d108a67b5943b30f85a5563f4d8488d77", 49 | "sha256:5b7b4ff9de7a44e0ad2618afdc2ac920b91f4a6d3509520ee65339d4acde5abf", 50 | "sha256:64562c5c771fb0a8b6262829b9b4f37a7b886c01b4d3ecdbae1d629717db08b4", 51 | "sha256:6e899eb8874dc2413b11926b5fb3857ec0ab55222840e38016a6ba2ea9b7d5e3", 52 | "sha256:72e37f416adb43b0ced93419de0122b42753ee74e87070777b53c5d2241e7fab", 53 | "sha256:78bfb3703388c780edf900be66e07de5a3d4105ca8e8720c5c4d67927e0b15d0", 54 | "sha256:a351af79edefc2a1bd2234bfd8b339935f389209943043913a919df4b0f13300", 55 | "sha256:c45317debeb64002e980077642afbd977773a25fa3dfd7ed0c84dccfc1fafcb0", 56 | "sha256:c589f06407e8340e81962575fcffbba1e92671879a221186c3d4662de9fe804e", 57 | "sha256:d1cd3c0b6f2ca25c7d2b1c3adeecbe23e65689839ba73331ebc7d893fcda7ffe", 58 | "sha256:d2d5434717f33117f29b5691fbdf142d36573d751716249a288fbb96ba26a281", 59 | "sha256:d2de9b6fb8b1cf9f03990b299a9112bfdf8b86b6987003ca9e8a6c4f56d39543", 60 | "sha256:d6bd20c7a10abcb0fb3d8aaa7508c0bf3d40dfad7515c572014da4b979d3310a", 61 | "sha256:e175350da05d2087e12cea8e72a70a1a8b14a17e92ed2022952a4419689ede5e", 62 | "sha256:e1af3ff32b8c38a7d900382646e91f2fc515fd19dea37e9392275a5cbfdbff63", 63 | "sha256:e81268da0baa880431b68b1308ab7257eb33f356e57a5f9b1f915dfb13dd1387", 64 | "sha256:f0ed1ad9bd862539ea875fb339ecb18fcc4148f8d9908f4502df28f94d23491a", 65 | "sha256:f0f2f336aa2aee2bce0b0dcc32bbba9178995454c7b979cf6ce086a8801e14c7", 66 | "sha256:f24865991b5ed4b038add5edbf424639d1358144f4e2a3e7a84bc6ba23e35074", 67 | "sha256:f51bb55122a89f7a0817d7ac2319744b4640b5b446c4c3efcea5764ea99ae509", 68 | "sha256:f626a01c0a186b08f7ff61431c01c055961ee28769591efa8800beadd27a2959", 69 | "sha256:fbae5d6925d7c26e712f0beda5ed69ebb40e14212c185d129b8dfbfcc335eb48", 70 | "sha256:fd1345ae99e17e6910f47ce7d52673c6a1a70820d78b67de1b7abb3af29c426a", 71 | "sha256:ff3f97b3372c97782e9c6d3d7fdbe83bce8f70de719605bd7ee1839cd1ab360a" 72 | ], 73 | "markers": "python_version >= '3.13'", 74 | "version": "==0.2.1" 75 | }, 76 | "beautifulsoup4": { 77 | "hashes": [ 78 | "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051", 79 | "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed" 80 | ], 81 | "markers": "python_full_version >= '3.6.0'", 82 | "version": "==4.12.3" 83 | }, 84 | "certifi": { 85 | "hashes": [ 86 | "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", 87 | "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db" 88 | ], 89 | "markers": "python_version >= '3.6'", 90 | "version": "==2024.12.14" 91 | }, 92 | "cffi": { 93 | "hashes": [ 94 | "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", 95 | "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", 96 | "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1", 97 | "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", 98 | "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", 99 | "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", 100 | "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", 101 | "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", 102 | "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", 103 | "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", 104 | "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc", 105 | "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", 106 | "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", 107 | "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", 108 | "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", 109 | "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", 110 | "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", 111 | "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", 112 | "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", 113 | "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b", 114 | "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", 115 | "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", 116 | "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c", 117 | "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", 118 | "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", 119 | "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", 120 | "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8", 121 | "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1", 122 | "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", 123 | "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", 124 | "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", 125 | "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595", 126 | "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0", 127 | "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", 128 | "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", 129 | "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", 130 | "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", 131 | "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", 132 | "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", 133 | "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", 134 | "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", 135 | "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e", 136 | "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", 137 | "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964", 138 | "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", 139 | "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576", 140 | "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", 141 | "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3", 142 | "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662", 143 | "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", 144 | "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", 145 | "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", 146 | "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", 147 | "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", 148 | "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", 149 | "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", 150 | "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", 151 | "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9", 152 | "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7", 153 | "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", 154 | "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a", 155 | "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", 156 | "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", 157 | "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", 158 | "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", 159 | "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", 160 | "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" 161 | ], 162 | "markers": "python_version >= '3.8'", 163 | "version": "==1.17.1" 164 | }, 165 | "charset-normalizer": { 166 | "hashes": [ 167 | "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621", 168 | "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", 169 | "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", 170 | "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", 171 | "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", 172 | "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", 173 | "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", 174 | "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d", 175 | "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", 176 | "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", 177 | "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", 178 | "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", 179 | "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab", 180 | "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be", 181 | "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", 182 | "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", 183 | "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0", 184 | "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2", 185 | "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62", 186 | "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62", 187 | "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", 188 | "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", 189 | "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", 190 | "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", 191 | "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455", 192 | "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858", 193 | "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", 194 | "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", 195 | "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", 196 | "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", 197 | "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", 198 | "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea", 199 | "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", 200 | "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", 201 | "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", 202 | "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", 203 | "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd", 204 | "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", 205 | "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242", 206 | "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee", 207 | "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", 208 | "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", 209 | "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51", 210 | "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", 211 | "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8", 212 | "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", 213 | "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613", 214 | "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742", 215 | "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", 216 | "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", 217 | "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", 218 | "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", 219 | "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", 220 | "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", 221 | "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", 222 | "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", 223 | "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417", 224 | "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", 225 | "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", 226 | "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca", 227 | "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa", 228 | "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", 229 | "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149", 230 | "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41", 231 | "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574", 232 | "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0", 233 | "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f", 234 | "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", 235 | "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654", 236 | "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3", 237 | "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19", 238 | "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", 239 | "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578", 240 | "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", 241 | "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", 242 | "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51", 243 | "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", 244 | "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", 245 | "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a", 246 | "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", 247 | "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade", 248 | "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", 249 | "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", 250 | "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6", 251 | "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", 252 | "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", 253 | "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6", 254 | "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2", 255 | "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12", 256 | "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf", 257 | "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", 258 | "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7", 259 | "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", 260 | "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", 261 | "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b", 262 | "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", 263 | "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", 264 | "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4", 265 | "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", 266 | "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", 267 | "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a", 268 | "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748", 269 | "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", 270 | "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", 271 | "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482" 272 | ], 273 | "markers": "python_full_version >= '3.7.0'", 274 | "version": "==3.4.0" 275 | }, 276 | "click": { 277 | "hashes": [ 278 | "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", 279 | "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" 280 | ], 281 | "index": "pypi", 282 | "markers": "python_version >= '3.7'", 283 | "version": "==8.1.7" 284 | }, 285 | "cobble": { 286 | "hashes": [ 287 | "sha256:36c91b1655e599fd428e2b95fdd5f0da1ca2e9f1abb0bc871dec21a0e78a2b44", 288 | "sha256:de38be1539992c8a06e569630717c485a5f91be2192c461ea2b220607dfa78aa" 289 | ], 290 | "markers": "python_version >= '3.5'", 291 | "version": "==0.1.4" 292 | }, 293 | "cryptography": { 294 | "hashes": [ 295 | "sha256:1923cb251c04be85eec9fda837661c67c1049063305d6be5721643c22dd4e2b7", 296 | "sha256:37d76e6863da3774cd9db5b409a9ecfd2c71c981c38788d3fcfaf177f447b731", 297 | "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b", 298 | "sha256:404fdc66ee5f83a1388be54300ae978b2efd538018de18556dde92575e05defc", 299 | "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543", 300 | "sha256:62901fb618f74d7d81bf408c8719e9ec14d863086efe4185afd07c352aee1d2c", 301 | "sha256:660cb7312a08bc38be15b696462fa7cc7cd85c3ed9c576e81f4dc4d8b2b31591", 302 | "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede", 303 | "sha256:761817a3377ef15ac23cd7834715081791d4ec77f9297ee694ca1ee9c2c7e5eb", 304 | "sha256:831c3c4d0774e488fdc83a1923b49b9957d33287de923d58ebd3cec47a0ae43f", 305 | "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123", 306 | "sha256:8b3e6eae66cf54701ee7d9c83c30ac0a1e3fa17be486033000f2a73a12ab507c", 307 | "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c", 308 | "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285", 309 | "sha256:abc998e0c0eee3c8a1904221d3f67dcfa76422b23620173e28c11d3e626c21bd", 310 | "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092", 311 | "sha256:be4ce505894d15d5c5037167ffb7f0ae90b7be6f2a98f9a5c3442395501c32fa", 312 | "sha256:c5eb858beed7835e5ad1faba59e865109f3e52b3783b9ac21e7e47dc5554e289", 313 | "sha256:cd4e834f340b4293430701e772ec543b0fbe6c2dea510a5286fe0acabe153a02", 314 | "sha256:d2436114e46b36d00f8b72ff57e598978b37399d2786fd39793c36c6d5cb1c64", 315 | "sha256:eb33480f1bad5b78233b0ad3e1b0be21e8ef1da745d8d2aecbb20671658b9053", 316 | "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417", 317 | "sha256:ed3534eb1090483c96178fcb0f8893719d96d5274dfde98aa6add34614e97c8e", 318 | "sha256:f3f6fdfa89ee2d9d496e2c087cebef9d4fcbb0ad63c40e821b39f74bf48d9c5e", 319 | "sha256:f53c2c87e0fb4b0c00fa9571082a057e37690a8f12233306161c8f4b819960b7", 320 | "sha256:f5e7cb1e5e56ca0933b4873c0220a78b773b24d40d186b6738080b73d3d0a756", 321 | "sha256:f677e1268c4e23420c3acade68fac427fffcb8d19d7df95ed7ad17cdef8404f4" 322 | ], 323 | "markers": "python_version >= '3.7' and python_full_version not in '3.9.0, 3.9.1'", 324 | "version": "==44.0.0" 325 | }, 326 | "defusedxml": { 327 | "hashes": [ 328 | "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", 329 | "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61" 330 | ], 331 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", 332 | "version": "==0.7.1" 333 | }, 334 | "distro": { 335 | "hashes": [ 336 | "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", 337 | "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2" 338 | ], 339 | "markers": "python_version >= '3.6'", 340 | "version": "==1.9.0" 341 | }, 342 | "dnspython": { 343 | "hashes": [ 344 | "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86", 345 | "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1" 346 | ], 347 | "markers": "python_version >= '3.9'", 348 | "version": "==2.7.0" 349 | }, 350 | "email-validator": { 351 | "hashes": [ 352 | "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631", 353 | "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7" 354 | ], 355 | "markers": "python_version >= '3.8'", 356 | "version": "==2.2.0" 357 | }, 358 | "et-xmlfile": { 359 | "hashes": [ 360 | "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", 361 | "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54" 362 | ], 363 | "markers": "python_version >= '3.8'", 364 | "version": "==2.0.0" 365 | }, 366 | "exceptiongroup": { 367 | "hashes": [ 368 | "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", 369 | "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc" 370 | ], 371 | "index": "pypi", 372 | "markers": "python_version >= '3.7'", 373 | "version": "==1.2.2" 374 | }, 375 | "fastapi": { 376 | "extras": [ 377 | "standard" 378 | ], 379 | "hashes": [ 380 | "sha256:9ec46f7addc14ea472958a96aae5b5de65f39721a46aaf5705c480d9a8b76654", 381 | "sha256:e9240b29e36fa8f4bb7290316988e90c381e5092e0cbe84e7818cc3713bcf305" 382 | ], 383 | "index": "pypi", 384 | "markers": "python_version >= '3.8'", 385 | "version": "==0.115.6" 386 | }, 387 | "fastapi-cli": { 388 | "extras": [ 389 | "standard" 390 | ], 391 | "hashes": [ 392 | "sha256:02b3b65956f526412515907a0793c9094abd4bfb5457b389f645b0ea6ba3605e", 393 | "sha256:d549368ff584b2804336c61f192d86ddea080c11255f375959627911944804f4" 394 | ], 395 | "markers": "python_version >= '3.8'", 396 | "version": "==0.0.7" 397 | }, 398 | "h11": { 399 | "hashes": [ 400 | "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", 401 | "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" 402 | ], 403 | "index": "pypi", 404 | "markers": "python_version >= '3.7'", 405 | "version": "==0.14.0" 406 | }, 407 | "httpcore": { 408 | "hashes": [ 409 | "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", 410 | "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd" 411 | ], 412 | "markers": "python_version >= '3.8'", 413 | "version": "==1.0.7" 414 | }, 415 | "httptools": { 416 | "hashes": [ 417 | "sha256:0614154d5454c21b6410fdf5262b4a3ddb0f53f1e1721cfd59d55f32138c578a", 418 | "sha256:0e563e54979e97b6d13f1bbc05a96109923e76b901f786a5eae36e99c01237bd", 419 | "sha256:16e603a3bff50db08cd578d54f07032ca1631450ceb972c2f834c2b860c28ea2", 420 | "sha256:288cd628406cc53f9a541cfaf06041b4c71d751856bab45e3702191f931ccd17", 421 | "sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8", 422 | "sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3", 423 | "sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5", 424 | "sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da", 425 | "sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0", 426 | "sha256:40a5ec98d3f49904b9fe36827dcf1aadfef3b89e2bd05b0e35e94f97c2b14721", 427 | "sha256:40b0f7fe4fd38e6a507bdb751db0379df1e99120c65fbdc8ee6c1d044897a636", 428 | "sha256:40dc6a8e399e15ea525305a2ddba998b0af5caa2566bcd79dcbe8948181eeaff", 429 | "sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0", 430 | "sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071", 431 | "sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c", 432 | "sha256:59e724f8b332319e2875efd360e61ac07f33b492889284a3e05e6d13746876f4", 433 | "sha256:69422b7f458c5af875922cdb5bd586cc1f1033295aa9ff63ee196a87519ac8e1", 434 | "sha256:703c346571fa50d2e9856a37d7cd9435a25e7fd15e236c397bf224afaa355fe9", 435 | "sha256:85071a1e8c2d051b507161f6c3e26155b5c790e4e28d7f236422dbacc2a9cc44", 436 | "sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083", 437 | "sha256:85797e37e8eeaa5439d33e556662cc370e474445d5fab24dcadc65a8ffb04003", 438 | "sha256:90d96a385fa941283ebd231464045187a31ad932ebfa541be8edf5b3c2328959", 439 | "sha256:94978a49b8f4569ad607cd4946b759d90b285e39c0d4640c6b36ca7a3ddf2efc", 440 | "sha256:aafe0f1918ed07b67c1e838f950b1c1fabc683030477e60b335649b8020e1076", 441 | "sha256:ab9ba8dcf59de5181f6be44a77458e45a578fc99c31510b8c65b7d5acc3cf490", 442 | "sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660", 443 | "sha256:b799de31416ecc589ad79dd85a0b2657a8fe39327944998dea368c1d4c9e55e6", 444 | "sha256:c26f313951f6e26147833fc923f78f95604bbec812a43e5ee37f26dc9e5a686c", 445 | "sha256:ca80b7485c76f768a3bc83ea58373f8db7b015551117375e4918e2aa77ea9b50", 446 | "sha256:d1ffd262a73d7c28424252381a5b854c19d9de5f56f075445d33919a637e3547", 447 | "sha256:d3f0d369e7ffbe59c4b6116a44d6a8eb4783aae027f2c0b366cf0aa964185dba", 448 | "sha256:d54efd20338ac52ba31e7da78e4a72570cf729fac82bc31ff9199bedf1dc7440", 449 | "sha256:dacdd3d10ea1b4ca9df97a0a303cbacafc04b5cd375fa98732678151643d4988", 450 | "sha256:db353d22843cf1028f43c3651581e4bb49374d85692a85f95f7b9a130e1b2cab", 451 | "sha256:db78cb9ca56b59b016e64b6031eda5653be0589dba2b1b43453f6e8b405a0970", 452 | "sha256:deee0e3343f98ee8047e9f4c5bc7cedbf69f5734454a94c38ee829fb2d5fa3c1", 453 | "sha256:df017d6c780287d5c80601dafa31f17bddb170232d85c066604d8558683711a2", 454 | "sha256:df959752a0c2748a65ab5387d08287abf6779ae9165916fe053e68ae1fbdc47f", 455 | "sha256:ec4f178901fa1834d4a060320d2f3abc5c9e39766953d038f1458cb885f47e81", 456 | "sha256:f47f8ed67cc0ff862b84a1189831d1d33c963fb3ce1ee0c65d3b0cbe7b711069", 457 | "sha256:f8787367fbdfccae38e35abf7641dafc5310310a5987b689f4c32cc8cc3ee975", 458 | "sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f", 459 | "sha256:fc411e1c0a7dcd2f902c7c48cf079947a7e65b5485dea9decb82b9105ca71a43" 460 | ], 461 | "markers": "python_full_version >= '3.8.0'", 462 | "version": "==0.6.4" 463 | }, 464 | "httpx": { 465 | "hashes": [ 466 | "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", 467 | "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad" 468 | ], 469 | "markers": "python_version >= '3.8'", 470 | "version": "==0.28.1" 471 | }, 472 | "idna": { 473 | "hashes": [ 474 | "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", 475 | "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" 476 | ], 477 | "index": "pypi", 478 | "markers": "python_version >= '3.6'", 479 | "version": "==3.10" 480 | }, 481 | "iniconfig": { 482 | "hashes": [ 483 | "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", 484 | "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" 485 | ], 486 | "markers": "python_version >= '3.7'", 487 | "version": "==2.0.0" 488 | }, 489 | "jinja2": { 490 | "hashes": [ 491 | "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369", 492 | "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d" 493 | ], 494 | "markers": "python_version >= '3.7'", 495 | "version": "==3.1.4" 496 | }, 497 | "jiter": { 498 | "hashes": [ 499 | "sha256:025337859077b41548bdcbabe38698bcd93cfe10b06ff66617a48ff92c9aec60", 500 | "sha256:03c9df035d4f8d647f8c210ddc2ae0728387275340668fb30d2421e17d9a0841", 501 | "sha256:08d4c92bf480e19fc3f2717c9ce2aa31dceaa9163839a311424b6862252c943e", 502 | "sha256:0cf5dfa9956d96ff2efb0f8e9c7d055904012c952539a774305aaaf3abdf3d6c", 503 | "sha256:14601dcac4889e0a1c75ccf6a0e4baf70dbc75041e51bcf8d0e9274519df6887", 504 | "sha256:180a8aea058f7535d1c84183c0362c710f4750bef66630c05f40c93c2b152a0f", 505 | "sha256:1c0dfbd1be3cbefc7510102370d86e35d1d53e5a93d48519688b1bf0f761160a", 506 | "sha256:2dd61c5afc88a4fda7d8b2cf03ae5947c6ac7516d32b7a15bf4b49569a5c076b", 507 | "sha256:317b25e98a35ffec5c67efe56a4e9970852632c810d35b34ecdd70cc0e47b3b6", 508 | "sha256:32475a42b2ea7b344069dc1e81445cfc00b9d0e3ca837f0523072432332e9f74", 509 | "sha256:37b2998606d6dadbb5ccda959a33d6a5e853252d921fec1792fc902351bb4e2c", 510 | "sha256:3ac9f578c46f22405ff7f8b1f5848fb753cc4b8377fbec8470a7dc3997ca7566", 511 | "sha256:3b94a33a241bee9e34b8481cdcaa3d5c2116f575e0226e421bed3f7a6ea71cff", 512 | "sha256:4a9220497ca0cb1fe94e3f334f65b9b5102a0b8147646118f020d8ce1de70105", 513 | "sha256:4ab9a87f3784eb0e098f84a32670cfe4a79cb6512fd8f42ae3d0709f06405d18", 514 | "sha256:5127dc1abd809431172bc3fbe8168d6b90556a30bb10acd5ded41c3cfd6f43b6", 515 | "sha256:5672a86d55416ccd214c778efccf3266b84f87b89063b582167d803246354be4", 516 | "sha256:580ccf358539153db147e40751a0b41688a5ceb275e6f3e93d91c9467f42b2e3", 517 | "sha256:58dc9bc9767a1101f4e5e22db1b652161a225874d66f0e5cb8e2c7d1c438b587", 518 | "sha256:5a90a923338531b7970abb063cfc087eebae6ef8ec8139762007188f6bc69a9f", 519 | "sha256:653cf462db4e8c41995e33d865965e79641ef45369d8a11f54cd30888b7e6ff1", 520 | "sha256:66227a2c7b575720c1871c8800d3a0122bb8ee94edb43a5685aa9aceb2782d44", 521 | "sha256:6e5337bf454abddd91bd048ce0dca5134056fc99ca0205258766db35d0a2ea43", 522 | "sha256:70bf4c43652cc294040dbb62256c83c8718370c8b93dd93d934b9a7bf6c4f53c", 523 | "sha256:711e408732d4e9a0208008e5892c2966b485c783cd2d9a681f3eb147cf36c7ef", 524 | "sha256:76e324da7b5da060287c54f2fabd3db5f76468006c811831f051942bf68c9d44", 525 | "sha256:789361ed945d8d42850f919342a8665d2dc79e7e44ca1c97cc786966a21f627a", 526 | "sha256:79aec8172b9e3c6d05fd4b219d5de1ac616bd8da934107325a6c0d0e866a21b6", 527 | "sha256:7efe4853ecd3d6110301665a5178b9856be7e2a9485f49d91aa4d737ad2ae49e", 528 | "sha256:7f22b16b35d5c1df9dfd58843ab2cd25e6bf15191f5a236bed177afade507bfc", 529 | "sha256:83c0efd80b29695058d0fd2fa8a556490dbce9804eac3e281f373bbc99045f6c", 530 | "sha256:859e8eb3507894093d01929e12e267f83b1d5f6221099d3ec976f0c995cb6bd9", 531 | "sha256:8b9931fd36ee513c26b5bf08c940b0ac875de175341cbdd4fa3be109f0492586", 532 | "sha256:8bd2a824d08d8977bb2794ea2682f898ad3d8837932e3a74937e93d62ecbb637", 533 | "sha256:8f2d5ed877f089862f4c7aacf3a542627c1496f972a34d0474ce85ee7d939c27", 534 | "sha256:8ffc86ae5e3e6a93765d49d1ab47b6075a9c978a2b3b80f0f32628f39caa0c88", 535 | "sha256:92249669925bc1c54fcd2ec73f70f2c1d6a817928480ee1c65af5f6b81cdf12d", 536 | "sha256:99d9a1eded738299ba8e106c6779ce5c3893cffa0e32e4485d680588adae6db8", 537 | "sha256:9c63eaef32b7bebac8ebebf4dabebdbc6769a09c127294db6babee38e9f405b9", 538 | "sha256:9e1fa156ee9454642adb7e7234a383884452532bc9d53d5af2d18d98ada1d79c", 539 | "sha256:a2ecaa3c23e7a7cf86d00eda3390c232f4d533cd9ddea4b04f5d0644faf642c5", 540 | "sha256:a6c710d657c8d1d2adbbb5c0b0c6bfcec28fd35bd6b5f016395f9ac43e878a15", 541 | "sha256:a9584de0cd306072635fe4b89742bf26feae858a0683b399ad0c2509011b9dc0", 542 | "sha256:ab7f43235d71e03b941c1630f4b6e3055d46b6cb8728a17663eaac9d8e83a865", 543 | "sha256:af102d3372e917cffce49b521e4c32c497515119dc7bd8a75665e90a718bbf08", 544 | "sha256:b25bd626bde7fb51534190c7e3cb97cee89ee76b76d7585580e22f34f5e3f393", 545 | "sha256:b2dd880785088ff2ad21ffee205e58a8c1ddabc63612444ae41e5e4b321b39c0", 546 | "sha256:b426f72cd77da3fec300ed3bc990895e2dd6b49e3bfe6c438592a3ba660e41ca", 547 | "sha256:ba5bdf56969cad2019d4e8ffd3f879b5fdc792624129741d3d83fc832fef8c7d", 548 | "sha256:bf55846c7b7a680eebaf9c3c48d630e1bf51bdf76c68a5f654b8524335b0ad29", 549 | "sha256:ca1f08b8e43dc3bd0594c992fb1fd2f7ce87f7bf0d44358198d6da8034afdf84", 550 | "sha256:ca29b6371ebc40e496995c94b988a101b9fbbed48a51190a4461fcb0a68b4a36", 551 | "sha256:ca8577f6a413abe29b079bc30f907894d7eb07a865c4df69475e868d73e71c7b", 552 | "sha256:cadcc978f82397d515bb2683fc0d50103acff2a180552654bb92d6045dec2c49", 553 | "sha256:cd646c827b4f85ef4a78e4e58f4f5854fae0caf3db91b59f0d73731448a970c6", 554 | "sha256:cd73d3e740666d0e639f678adb176fad25c1bcbdae88d8d7b857e1783bb4212d", 555 | "sha256:cde031d8413842a1e7501e9129b8e676e62a657f8ec8166e18a70d94d4682855", 556 | "sha256:ce0820f4a3a59ddced7fce696d86a096d5cc48d32a4183483a17671a61edfddc", 557 | "sha256:d20be8b7f606df096e08b0b1b4a3c6f0515e8dac296881fe7461dfa0fb5ec817", 558 | "sha256:d21974d246ed0181558087cd9f76e84e8321091ebfb3a93d4c341479a736f099", 559 | "sha256:d33f94615fcaf872f7fd8cd98ac3b429e435c77619777e8a449d9d27e01134d1", 560 | "sha256:d35c864c2dff13dfd79fb070fc4fc6235d7b9b359efe340e1261deb21b9fcb66", 561 | "sha256:d5c826a221851a8dc028eb6d7d6429ba03184fa3c7e83ae01cd6d3bd1d4bd17d", 562 | "sha256:e41e75344acef3fc59ba4765df29f107f309ca9e8eace5baacabd9217e52a5ee", 563 | "sha256:e52bf98c7e727dd44f7c4acb980cb988448faeafed8433c867888268899b298b", 564 | "sha256:e6ec2be506e7d6f9527dae9ff4b7f54e68ea44a0ef6b098256ddf895218a2f8f", 565 | "sha256:e725edd0929fa79f8349ab4ec7f81c714df51dc4e991539a578e5018fa4a7152", 566 | "sha256:eaa58399c01db555346647a907b4ef6d4f584b123943be6ed5588c3f2359c9f4", 567 | "sha256:eb21aaa9a200d0a80dacc7a81038d2e476ffe473ffdd9c91eb745d623561de05", 568 | "sha256:ecff0dc14f409599bbcafa7e470c00b80f17abc14d1405d38ab02e4b42e55b57", 569 | "sha256:f557c55bc2b7676e74d39d19bcb8775ca295c7a028246175d6a8b431e70835e5", 570 | "sha256:f7200b8f7619d36aa51c803fd52020a2dfbea36ffec1b5e22cab11fd34d95a6d", 571 | "sha256:f9d471356dc16f84ed48768b8ee79f29514295c7295cb41e1133ec0b2b8d637d", 572 | "sha256:fc5adda618205bd4678b146612ce44c3cbfdee9697951f2c0ffdef1f26d72b63", 573 | "sha256:fc9043259ee430ecd71d178fccabd8c332a3bf1e81e50cae43cc2b28d19e4cb7", 574 | "sha256:ffd9fee7d0775ebaba131f7ca2e2d83839a62ad65e8e02fe2bd8fc975cedeb9e" 575 | ], 576 | "markers": "python_version >= '3.8'", 577 | "version": "==0.8.2" 578 | }, 579 | "lxml": { 580 | "hashes": [ 581 | "sha256:01220dca0d066d1349bd6a1726856a78f7929f3878f7e2ee83c296c69495309e", 582 | "sha256:02ced472497b8362c8e902ade23e3300479f4f43e45f4105c85ef43b8db85229", 583 | "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3", 584 | "sha256:07da23d7ee08577760f0a71d67a861019103e4812c87e2fab26b039054594cc5", 585 | "sha256:094cb601ba9f55296774c2d57ad68730daa0b13dc260e1f941b4d13678239e70", 586 | "sha256:0a7056921edbdd7560746f4221dca89bb7a3fe457d3d74267995253f46343f15", 587 | "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002", 588 | "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd", 589 | "sha256:0fdf3a3059611f7585a78ee10399a15566356116a4288380921a4b598d807a22", 590 | "sha256:109fa6fede314cc50eed29e6e56c540075e63d922455346f11e4d7a036d2b8cf", 591 | "sha256:146173654d79eb1fc97498b4280c1d3e1e5d58c398fa530905c9ea50ea849b22", 592 | "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832", 593 | "sha256:1483fd3358963cc5c1c9b122c80606a3a79ee0875bcac0204149fa09d6ff2727", 594 | "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e", 595 | "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30", 596 | "sha256:18feb4b93302091b1541221196a2155aa296c363fd233814fa11e181adebc52f", 597 | "sha256:1afe0a8c353746e610bd9031a630a95bcfb1a720684c3f2b36c4710a0a96528f", 598 | "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51", 599 | "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4", 600 | "sha256:1ffc23010330c2ab67fac02781df60998ca8fe759e8efde6f8b756a20599c5de", 601 | "sha256:20094fc3f21ea0a8669dc4c61ed7fa8263bd37d97d93b90f28fc613371e7a875", 602 | "sha256:213261f168c5e1d9b7535a67e68b1f59f92398dd17a56d934550837143f79c42", 603 | "sha256:218c1b2e17a710e363855594230f44060e2025b05c80d1f0661258142b2add2e", 604 | "sha256:23e0553b8055600b3bf4a00b255ec5c92e1e4aebf8c2c09334f8368e8bd174d6", 605 | "sha256:25f1b69d41656b05885aa185f5fdf822cb01a586d1b32739633679699f220391", 606 | "sha256:2b3778cb38212f52fac9fe913017deea2fdf4eb1a4f8e4cfc6b009a13a6d3fcc", 607 | "sha256:2bc9fd5ca4729af796f9f59cd8ff160fe06a474da40aca03fcc79655ddee1a8b", 608 | "sha256:2c226a06ecb8cdef28845ae976da407917542c5e6e75dcac7cc33eb04aaeb237", 609 | "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4", 610 | "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86", 611 | "sha256:2d9b8d9177afaef80c53c0a9e30fa252ff3036fb1c6494d427c066a4ce6a282f", 612 | "sha256:2dec2d1130a9cda5b904696cec33b2cfb451304ba9081eeda7f90f724097300a", 613 | "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8", 614 | "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f", 615 | "sha256:315f9542011b2c4e1d280e4a20ddcca1761993dda3afc7a73b01235f8641e903", 616 | "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03", 617 | "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e", 618 | "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99", 619 | "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7", 620 | "sha256:3eb44520c4724c2e1a57c0af33a379eee41792595023f367ba3952a2d96c2aab", 621 | "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d", 622 | "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22", 623 | "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492", 624 | "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b", 625 | "sha256:482c2f67761868f0108b1743098640fbb2a28a8e15bf3f47ada9fa59d9fe08c3", 626 | "sha256:4b0c7a688944891086ba192e21c5229dea54382f4836a209ff8d0a660fac06be", 627 | "sha256:4c1fefd7e3d00921c44dc9ca80a775af49698bbfd92ea84498e56acffd4c5469", 628 | "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f", 629 | "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a", 630 | "sha256:516f491c834eb320d6c843156440fe7fc0d50b33e44387fcec5b02f0bc118a4c", 631 | "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a", 632 | "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4", 633 | "sha256:56b9861a71575f5795bde89256e7467ece3d339c9b43141dbdd54544566b3b94", 634 | "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442", 635 | "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b", 636 | "sha256:5c54afdcbb0182d06836cc3d1be921e540be3ebdf8b8a51ee3ef987537455f84", 637 | "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c", 638 | "sha256:609251a0ca4770e5a8768ff902aa02bf636339c5a93f9349b48eb1f606f7f3e9", 639 | "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1", 640 | "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be", 641 | "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367", 642 | "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e", 643 | "sha256:68934b242c51eb02907c5b81d138cb977b2129a0a75a8f8b60b01cb8586c7b21", 644 | "sha256:68b87753c784d6acb8a25b05cb526c3406913c9d988d51f80adecc2b0775d6aa", 645 | "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16", 646 | "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d", 647 | "sha256:6b038cc86b285e4f9fea2ba5ee76e89f21ed1ea898e287dc277a25884f3a7dfe", 648 | "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83", 649 | "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba", 650 | "sha256:6ee8c39582d2652dcd516d1b879451500f8db3fe3607ce45d7c5957ab2596040", 651 | "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763", 652 | "sha256:71a8dd38fbd2f2319136d4ae855a7078c69c9a38ae06e0c17c73fd70fc6caad8", 653 | "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff", 654 | "sha256:7437237c6a66b7ca341e868cda48be24b8701862757426852c9b3186de1da8a2", 655 | "sha256:747a3d3e98e24597981ca0be0fd922aebd471fa99d0043a3842d00cdcad7ad6a", 656 | "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b", 657 | "sha256:78d9b952e07aed35fe2e1a7ad26e929595412db48535921c5013edc8aa4a35ce", 658 | "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c", 659 | "sha256:7d3d1ca42870cdb6d0d29939630dbe48fa511c203724820fc0fd507b2fb46577", 660 | "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8", 661 | "sha256:7f41026c1d64043a36fda21d64c5026762d53a77043e73e94b71f0521939cc71", 662 | "sha256:81b4e48da4c69313192d8c8d4311e5d818b8be1afe68ee20f6385d0e96fc9512", 663 | "sha256:86a6b24b19eaebc448dc56b87c4865527855145d851f9fc3891673ff97950540", 664 | "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f", 665 | "sha256:89e043f1d9d341c52bf2af6d02e6adde62e0a46e6755d5eb60dc6e4f0b8aeca2", 666 | "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a", 667 | "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce", 668 | "sha256:8f0de2d390af441fe8b2c12626d103540b5d850d585b18fcada58d972b74a74e", 669 | "sha256:92e67a0be1639c251d21e35fe74df6bcc40cba445c2cda7c4a967656733249e2", 670 | "sha256:94d6c3782907b5e40e21cadf94b13b0842ac421192f26b84c45f13f3c9d5dc27", 671 | "sha256:97acf1e1fd66ab53dacd2c35b319d7e548380c2e9e8c54525c6e76d21b1ae3b1", 672 | "sha256:9ada35dd21dc6c039259596b358caab6b13f4db4d4a7f8665764d616daf9cc1d", 673 | "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1", 674 | "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330", 675 | "sha256:9e4b47ac0f5e749cfc618efdf4726269441014ae1d5583e047b452a32e221920", 676 | "sha256:9fb81d2824dff4f2e297a276297e9031f46d2682cafc484f49de182aa5e5df99", 677 | "sha256:a0eabd0a81625049c5df745209dc7fcef6e2aea7793e5f003ba363610aa0a3ff", 678 | "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18", 679 | "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff", 680 | "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c", 681 | "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179", 682 | "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080", 683 | "sha256:ace2c2326a319a0bb8a8b0e5b570c764962e95818de9f259ce814ee666603f19", 684 | "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d", 685 | "sha256:b11a5d918a6216e521c715b02749240fb07ae5a1fefd4b7bf12f833bc8b4fe70", 686 | "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32", 687 | "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a", 688 | "sha256:b710bc2b8292966b23a6a0121f7a6c51d45d2347edcc75f016ac123b8054d3f2", 689 | "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79", 690 | "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3", 691 | "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5", 692 | "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f", 693 | "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d", 694 | "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3", 695 | "sha256:c300306673aa0f3ed5ed9372b21867690a17dba38c68c44b287437c362ce486b", 696 | "sha256:c56a1d43b2f9ee4786e4658c7903f05da35b923fb53c11025712562d5cc02753", 697 | "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9", 698 | "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957", 699 | "sha256:cb83f8a875b3d9b458cada4f880fa498646874ba4011dc974e071a0a84a1b033", 700 | "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb", 701 | "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656", 702 | "sha256:dd5350b55f9fecddc51385463a4f67a5da829bc741e38cf689f38ec9023f54ab", 703 | "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b", 704 | "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d", 705 | "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd", 706 | "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859", 707 | "sha256:ea2e2f6f801696ad7de8aec061044d6c8c0dd4037608c7cab38a9a4d316bfb11", 708 | "sha256:eafa2c8658f4e560b098fe9fc54539f86528651f61849b22111a9b107d18910c", 709 | "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a", 710 | "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005", 711 | "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654", 712 | "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80", 713 | "sha256:f2901429da1e645ce548bf9171784c0f74f0718c3f6150ce166be39e4dd66c3e", 714 | "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec", 715 | "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7", 716 | "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965", 717 | "sha256:f914c03e6a31deb632e2daa881fe198461f4d06e57ac3d0e05bbcab8eae01945", 718 | "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8" 719 | ], 720 | "markers": "python_version >= '3.6'", 721 | "version": "==5.3.0" 722 | }, 723 | "mammoth": { 724 | "hashes": [ 725 | "sha256:7e8aa7db53f4aa7e9620b22bf8b716f1a16c84e969de1a0b1f920c756184e3d8", 726 | "sha256:b2abf2340809b13a903c8b65a27846466290b869f0dd56e4a1e3072c4be1ea86" 727 | ], 728 | "markers": "python_version >= '3.7'", 729 | "version": "==1.8.0" 730 | }, 731 | "markdown-it-py": { 732 | "hashes": [ 733 | "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", 734 | "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb" 735 | ], 736 | "markers": "python_version >= '3.8'", 737 | "version": "==3.0.0" 738 | }, 739 | "markdownify": { 740 | "hashes": [ 741 | "sha256:4c46a6c0c12c6005ddcd49b45a5a890398b002ef51380cd319db62df5e09bc2a", 742 | "sha256:a62a7a216947ed0b8dafb95b99b2ef4a0edd1e18d5653c656f68f03db2bfb2f1" 743 | ], 744 | "version": "==0.14.1" 745 | }, 746 | "markitdown": { 747 | "hashes": [ 748 | "sha256:6efcab2f05714675486dc2ddf912415734b1caa0343f73f75d852046f04e5f37", 749 | "sha256:f6c8f5f7f5541e91c6c535218318968fefd71e2a6faa0eb782b3492e04cd023d" 750 | ], 751 | "index": "pypi", 752 | "markers": "python_version >= '3.10'", 753 | "version": "==0.0.1a3" 754 | }, 755 | "markupsafe": { 756 | "hashes": [ 757 | "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", 758 | "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", 759 | "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", 760 | "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", 761 | "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", 762 | "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", 763 | "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", 764 | "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", 765 | "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", 766 | "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", 767 | "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", 768 | "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", 769 | "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", 770 | "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", 771 | "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", 772 | "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", 773 | "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", 774 | "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", 775 | "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", 776 | "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", 777 | "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", 778 | "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", 779 | "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", 780 | "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", 781 | "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", 782 | "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", 783 | "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", 784 | "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", 785 | "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", 786 | "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", 787 | "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", 788 | "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", 789 | "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", 790 | "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", 791 | "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", 792 | "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", 793 | "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", 794 | "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", 795 | "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", 796 | "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", 797 | "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", 798 | "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", 799 | "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", 800 | "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", 801 | "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", 802 | "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", 803 | "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", 804 | "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", 805 | "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", 806 | "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", 807 | "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", 808 | "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", 809 | "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", 810 | "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", 811 | "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", 812 | "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", 813 | "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", 814 | "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", 815 | "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", 816 | "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", 817 | "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50" 818 | ], 819 | "markers": "python_version >= '3.9'", 820 | "version": "==3.0.2" 821 | }, 822 | "mdurl": { 823 | "hashes": [ 824 | "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", 825 | "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" 826 | ], 827 | "markers": "python_version >= '3.7'", 828 | "version": "==0.1.2" 829 | }, 830 | "numpy": { 831 | "hashes": [ 832 | "sha256:0557eebc699c1c34cccdd8c3778c9294e8196df27d713706895edc6f57d29608", 833 | "sha256:0798b138c291d792f8ea40fe3768610f3c7dd2574389e37c3f26573757c8f7ef", 834 | "sha256:0da8495970f6b101ddd0c38ace92edea30e7e12b9a926b57f5fabb1ecc25bb90", 835 | "sha256:0f0986e917aca18f7a567b812ef7ca9391288e2acb7a4308aa9d265bd724bdae", 836 | "sha256:122fd2fcfafdefc889c64ad99c228d5a1f9692c3a83f56c292618a59aa60ae83", 837 | "sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0", 838 | "sha256:16757cf28621e43e252c560d25b15f18a2f11da94fea344bf26c599b9cf54b73", 839 | "sha256:18142b497d70a34b01642b9feabb70156311b326fdddd875a9981f34a369b671", 840 | "sha256:1c92113619f7b272838b8d6702a7f8ebe5edea0df48166c47929611d0b4dea69", 841 | "sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa", 842 | "sha256:30bf971c12e4365153afb31fc73f441d4da157153f3400b82db32d04de1e4066", 843 | "sha256:3579eaeb5e07f3ded59298ce22b65f877a86ba8e9fe701f5576c99bb17c283da", 844 | "sha256:36b2b43146f646642b425dd2027730f99bac962618ec2052932157e213a040e9", 845 | "sha256:3905a5fffcc23e597ee4d9fb3fcd209bd658c352657548db7316e810ca80458e", 846 | "sha256:3a4199f519e57d517ebd48cb76b36c82da0360781c6a0353e64c0cac30ecaad3", 847 | "sha256:3f2f5cddeaa4424a0a118924b988746db6ffa8565e5829b1841a8a3bd73eb59a", 848 | "sha256:40deb10198bbaa531509aad0cd2f9fadb26c8b94070831e2208e7df543562b74", 849 | "sha256:440cfb3db4c5029775803794f8638fbdbf71ec702caf32735f53b008e1eaece3", 850 | "sha256:4723a50e1523e1de4fccd1b9a6dcea750c2102461e9a02b2ac55ffeae09a4410", 851 | "sha256:4bddbaa30d78c86329b26bd6aaaea06b1e47444da99eddac7bf1e2fab717bd72", 852 | "sha256:4e58666988605e251d42c2818c7d3d8991555381be26399303053b58a5bbf30d", 853 | "sha256:54dc1d6d66f8d37843ed281773c7174f03bf7ad826523f73435deb88ba60d2d4", 854 | "sha256:57fcc997ffc0bef234b8875a54d4058afa92b0b0c4223fc1f62f24b3b5e86038", 855 | "sha256:58b92a5828bd4d9aa0952492b7de803135038de47343b2aa3cc23f3b71a3dc4e", 856 | "sha256:5a145e956b374e72ad1dff82779177d4a3c62bc8248f41b80cb5122e68f22d13", 857 | "sha256:6ab153263a7c5ccaf6dfe7e53447b74f77789f28ecb278c3b5d49db7ece10d6d", 858 | "sha256:7832f9e8eb00be32f15fdfb9a981d6955ea9adc8574c521d48710171b6c55e95", 859 | "sha256:7fe4bb0695fe986a9e4deec3b6857003b4cfe5c5e4aac0b95f6a658c14635e31", 860 | "sha256:7fe8f3583e0607ad4e43a954e35c1748b553bfe9fdac8635c02058023277d1b3", 861 | "sha256:85ad7d11b309bd132d74397fcf2920933c9d1dc865487128f5c03d580f2c3d03", 862 | "sha256:9874bc2ff574c40ab7a5cbb7464bf9b045d617e36754a7bc93f933d52bd9ffc6", 863 | "sha256:a184288538e6ad699cbe6b24859206e38ce5fba28f3bcfa51c90d0502c1582b2", 864 | "sha256:a222d764352c773aa5ebde02dd84dba3279c81c6db2e482d62a3fa54e5ece69b", 865 | "sha256:a50aeff71d0f97b6450d33940c7181b08be1441c6c193e678211bff11aa725e7", 866 | "sha256:a55dc7a7f0b6198b07ec0cd445fbb98b05234e8b00c5ac4874a63372ba98d4ab", 867 | "sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219", 868 | "sha256:a7d41d1612c1a82b64697e894b75db6758d4f21c3ec069d841e60ebe54b5b571", 869 | "sha256:a98f6f20465e7618c83252c02041517bd2f7ea29be5378f09667a8f654a5918d", 870 | "sha256:afe8fb968743d40435c3827632fd36c5fbde633b0423da7692e426529b1759b1", 871 | "sha256:b0b227dcff8cdc3efbce66d4e50891f04d0a387cce282fe1e66199146a6a8fca", 872 | "sha256:b30042fe92dbd79f1ba7f6898fada10bdaad1847c44f2dff9a16147e00a93661", 873 | "sha256:b606b1aaf802e6468c2608c65ff7ece53eae1a6874b3765f69b8ceb20c5fa78e", 874 | "sha256:b6207dc8fb3c8cb5668e885cef9ec7f70189bec4e276f0ff70d5aa078d32c88e", 875 | "sha256:c2aed8fcf8abc3020d6a9ccb31dbc9e7d7819c56a348cc88fd44be269b37427e", 876 | "sha256:cb24cca1968b21355cc6f3da1a20cd1cebd8a023e3c5b09b432444617949085a", 877 | "sha256:cff210198bb4cae3f3c100444c5eaa573a823f05c253e7188e1362a5555235b3", 878 | "sha256:d35717333b39d1b6bb8433fa758a55f1081543de527171543a2b710551d40881", 879 | "sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221", 880 | "sha256:e09d40edfdb4e260cb1567d8ae770ccf3b8b7e9f0d9b5c2a9992696b30ce2742", 881 | "sha256:e12c6c1ce84628c52d6367863773f7c8c8241be554e8b79686e91a43f1733773", 882 | "sha256:e2b8cd48a9942ed3f85b95ca4105c45758438c7ed28fff1e4ce3e57c3b589d8e", 883 | "sha256:e500aba968a48e9019e42c0c199b7ec0696a97fa69037bea163b55398e390529", 884 | "sha256:ebe5e59545401fbb1b24da76f006ab19734ae71e703cdb4a8b347e84a0cece67", 885 | "sha256:f0dd071b95bbca244f4cb7f70b77d2ff3aaaba7fa16dc41f58d14854a6204e6c", 886 | "sha256:f8c8b141ef9699ae777c6278b52c706b653bf15d135d302754f6b2e90eb30367" 887 | ], 888 | "markers": "python_version >= '3.10'", 889 | "version": "==2.2.0" 890 | }, 891 | "openai": { 892 | "hashes": [ 893 | "sha256:e2910b1170a6b7f88ef491ac3a42c387f08bd3db533411f7ee391d166571d63c", 894 | "sha256:f5a035fd01e141fc743f4b0e02c41ca49be8fab0866d3b67f5f29b4f4d3c0973" 895 | ], 896 | "markers": "python_version >= '3.8'", 897 | "version": "==1.58.1" 898 | }, 899 | "openpyxl": { 900 | "hashes": [ 901 | "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", 902 | "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050" 903 | ], 904 | "markers": "python_version >= '3.8'", 905 | "version": "==3.1.5" 906 | }, 907 | "packaging": { 908 | "hashes": [ 909 | "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", 910 | "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" 911 | ], 912 | "markers": "python_version >= '3.8'", 913 | "version": "==24.2" 914 | }, 915 | "pandas": { 916 | "hashes": [ 917 | "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", 918 | "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", 919 | "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5", 920 | "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", 921 | "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", 922 | "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", 923 | "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea", 924 | "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", 925 | "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f", 926 | "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348", 927 | "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", 928 | "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", 929 | "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", 930 | "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e", 931 | "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", 932 | "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645", 933 | "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", 934 | "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30", 935 | "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", 936 | "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", 937 | "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", 938 | "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", 939 | "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", 940 | "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", 941 | "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", 942 | "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761", 943 | "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", 944 | "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57", 945 | "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c", 946 | "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c", 947 | "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", 948 | "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", 949 | "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", 950 | "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42", 951 | "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", 952 | "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39", 953 | "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", 954 | "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", 955 | "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed", 956 | "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", 957 | "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", 958 | "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319" 959 | ], 960 | "markers": "python_version >= '3.9'", 961 | "version": "==2.2.3" 962 | }, 963 | "pathvalidate": { 964 | "hashes": [ 965 | "sha256:9a6255eb8f63c9e2135b9be97a5ce08f10230128c4ae7b3e935378b82b22c4c9", 966 | "sha256:f5d07b1e2374187040612a1fcd2bcb2919f8db180df254c9581bb90bf903377d" 967 | ], 968 | "markers": "python_version >= '3.7'", 969 | "version": "==3.2.1" 970 | }, 971 | "pdfminer-six": { 972 | "hashes": [ 973 | "sha256:c631a46d5da957a9ffe4460c5dce21e8431dabb615fee5f9f4400603a58d95a6", 974 | "sha256:f4f70e74174b4b3542fcb8406a210b6e2e27cd0f0b5fd04534a8cc0d8951e38c" 975 | ], 976 | "markers": "python_version >= '3.8'", 977 | "version": "==20240706" 978 | }, 979 | "pillow": { 980 | "hashes": [ 981 | "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7", 982 | "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5", 983 | "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903", 984 | "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2", 985 | "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38", 986 | "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2", 987 | "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9", 988 | "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f", 989 | "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc", 990 | "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8", 991 | "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d", 992 | "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2", 993 | "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316", 994 | "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a", 995 | "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25", 996 | "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd", 997 | "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba", 998 | "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc", 999 | "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273", 1000 | "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa", 1001 | "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a", 1002 | "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b", 1003 | "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a", 1004 | "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae", 1005 | "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291", 1006 | "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97", 1007 | "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06", 1008 | "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904", 1009 | "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b", 1010 | "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b", 1011 | "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8", 1012 | "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527", 1013 | "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947", 1014 | "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb", 1015 | "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003", 1016 | "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5", 1017 | "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f", 1018 | "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739", 1019 | "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944", 1020 | "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830", 1021 | "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f", 1022 | "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3", 1023 | "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4", 1024 | "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84", 1025 | "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7", 1026 | "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6", 1027 | "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6", 1028 | "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9", 1029 | "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de", 1030 | "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4", 1031 | "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47", 1032 | "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd", 1033 | "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50", 1034 | "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c", 1035 | "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086", 1036 | "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba", 1037 | "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306", 1038 | "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699", 1039 | "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e", 1040 | "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488", 1041 | "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa", 1042 | "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2", 1043 | "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3", 1044 | "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9", 1045 | "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923", 1046 | "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2", 1047 | "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790", 1048 | "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734", 1049 | "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916", 1050 | "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1", 1051 | "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f", 1052 | "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798", 1053 | "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb", 1054 | "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2", 1055 | "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9" 1056 | ], 1057 | "markers": "python_version >= '3.9'", 1058 | "version": "==11.0.0" 1059 | }, 1060 | "pluggy": { 1061 | "hashes": [ 1062 | "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", 1063 | "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669" 1064 | ], 1065 | "markers": "python_version >= '3.8'", 1066 | "version": "==1.5.0" 1067 | }, 1068 | "puremagic": { 1069 | "hashes": [ 1070 | "sha256:195893fc129657f611b86b959aab337207d6df7f25372209269ed9e303c1a8c0", 1071 | "sha256:e16cb9708ee2007142c37931c58f07f7eca956b3472489106a7245e5c3aa1241" 1072 | ], 1073 | "version": "==1.28" 1074 | }, 1075 | "pycparser": { 1076 | "hashes": [ 1077 | "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", 1078 | "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" 1079 | ], 1080 | "markers": "python_version >= '3.8'", 1081 | "version": "==2.22" 1082 | }, 1083 | "pydantic": { 1084 | "hashes": [ 1085 | "sha256:597e135ea68be3a37552fb524bc7d0d66dcf93d395acd93a00682f1efcb8ee3d", 1086 | "sha256:82f12e9723da6de4fe2ba888b5971157b3be7ad914267dea8f05f82b28254f06" 1087 | ], 1088 | "index": "pypi", 1089 | "markers": "python_version >= '3.8'", 1090 | "version": "==2.10.4" 1091 | }, 1092 | "pydantic-core": { 1093 | "hashes": [ 1094 | "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278", 1095 | "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50", 1096 | "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9", 1097 | "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f", 1098 | "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6", 1099 | "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc", 1100 | "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54", 1101 | "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630", 1102 | "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9", 1103 | "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236", 1104 | "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7", 1105 | "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee", 1106 | "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b", 1107 | "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048", 1108 | "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc", 1109 | "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130", 1110 | "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4", 1111 | "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd", 1112 | "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4", 1113 | "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7", 1114 | "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7", 1115 | "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4", 1116 | "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e", 1117 | "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa", 1118 | "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6", 1119 | "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962", 1120 | "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b", 1121 | "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f", 1122 | "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474", 1123 | "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5", 1124 | "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459", 1125 | "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf", 1126 | "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a", 1127 | "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c", 1128 | "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76", 1129 | "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362", 1130 | "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4", 1131 | "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934", 1132 | "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320", 1133 | "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118", 1134 | "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96", 1135 | "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306", 1136 | "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046", 1137 | "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3", 1138 | "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2", 1139 | "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af", 1140 | "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9", 1141 | "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67", 1142 | "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a", 1143 | "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27", 1144 | "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35", 1145 | "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b", 1146 | "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151", 1147 | "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b", 1148 | "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154", 1149 | "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133", 1150 | "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef", 1151 | "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145", 1152 | "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15", 1153 | "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4", 1154 | "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc", 1155 | "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee", 1156 | "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c", 1157 | "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0", 1158 | "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5", 1159 | "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57", 1160 | "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b", 1161 | "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8", 1162 | "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1", 1163 | "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da", 1164 | "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e", 1165 | "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc", 1166 | "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993", 1167 | "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656", 1168 | "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4", 1169 | "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c", 1170 | "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb", 1171 | "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d", 1172 | "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9", 1173 | "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e", 1174 | "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1", 1175 | "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc", 1176 | "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a", 1177 | "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9", 1178 | "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506", 1179 | "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b", 1180 | "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1", 1181 | "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d", 1182 | "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99", 1183 | "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3", 1184 | "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31", 1185 | "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c", 1186 | "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39", 1187 | "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a", 1188 | "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308", 1189 | "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2", 1190 | "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228", 1191 | "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b", 1192 | "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9", 1193 | "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad" 1194 | ], 1195 | "index": "pypi", 1196 | "markers": "python_version >= '3.8'", 1197 | "version": "==2.27.2" 1198 | }, 1199 | "pydub": { 1200 | "hashes": [ 1201 | "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6", 1202 | "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f" 1203 | ], 1204 | "version": "==0.25.1" 1205 | }, 1206 | "pygments": { 1207 | "hashes": [ 1208 | "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", 1209 | "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a" 1210 | ], 1211 | "markers": "python_version >= '3.8'", 1212 | "version": "==2.18.0" 1213 | }, 1214 | "pytest": { 1215 | "hashes": [ 1216 | "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", 1217 | "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761" 1218 | ], 1219 | "index": "pypi", 1220 | "markers": "python_version >= '3.8'", 1221 | "version": "==8.3.4" 1222 | }, 1223 | "python-dateutil": { 1224 | "hashes": [ 1225 | "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", 1226 | "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" 1227 | ], 1228 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", 1229 | "version": "==2.9.0.post0" 1230 | }, 1231 | "python-dotenv": { 1232 | "hashes": [ 1233 | "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", 1234 | "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a" 1235 | ], 1236 | "markers": "python_version >= '3.8'", 1237 | "version": "==1.0.1" 1238 | }, 1239 | "python-multipart": { 1240 | "hashes": [ 1241 | "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", 1242 | "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13" 1243 | ], 1244 | "index": "pypi", 1245 | "markers": "python_version >= '3.8'", 1246 | "version": "==0.0.20" 1247 | }, 1248 | "python-pptx": { 1249 | "hashes": [ 1250 | "sha256:160838e0b8565a8b1f67947675886e9fea18aa5e795db7ae531606d68e785cba", 1251 | "sha256:479a8af0eaf0f0d76b6f00b0887732874ad2e3188230315290cd1f9dd9cc7095" 1252 | ], 1253 | "markers": "python_version >= '3.8'", 1254 | "version": "==1.0.2" 1255 | }, 1256 | "pytz": { 1257 | "hashes": [ 1258 | "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", 1259 | "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725" 1260 | ], 1261 | "version": "==2024.2" 1262 | }, 1263 | "pyyaml": { 1264 | "hashes": [ 1265 | "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff", 1266 | "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", 1267 | "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", 1268 | "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", 1269 | "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", 1270 | "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", 1271 | "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", 1272 | "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", 1273 | "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", 1274 | "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", 1275 | "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a", 1276 | "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", 1277 | "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", 1278 | "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", 1279 | "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", 1280 | "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", 1281 | "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", 1282 | "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a", 1283 | "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", 1284 | "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", 1285 | "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", 1286 | "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", 1287 | "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", 1288 | "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", 1289 | "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", 1290 | "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", 1291 | "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", 1292 | "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", 1293 | "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", 1294 | "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706", 1295 | "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", 1296 | "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", 1297 | "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", 1298 | "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083", 1299 | "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", 1300 | "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", 1301 | "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", 1302 | "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", 1303 | "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", 1304 | "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", 1305 | "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", 1306 | "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", 1307 | "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", 1308 | "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", 1309 | "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5", 1310 | "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d", 1311 | "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", 1312 | "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", 1313 | "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", 1314 | "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", 1315 | "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", 1316 | "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", 1317 | "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4" 1318 | ], 1319 | "markers": "python_version >= '3.8'", 1320 | "version": "==6.0.2" 1321 | }, 1322 | "requests": { 1323 | "hashes": [ 1324 | "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", 1325 | "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" 1326 | ], 1327 | "markers": "python_version >= '3.8'", 1328 | "version": "==2.32.3" 1329 | }, 1330 | "rich": { 1331 | "hashes": [ 1332 | "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", 1333 | "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90" 1334 | ], 1335 | "markers": "python_full_version >= '3.8.0'", 1336 | "version": "==13.9.4" 1337 | }, 1338 | "rich-toolkit": { 1339 | "hashes": [ 1340 | "sha256:a2da4416384410ae871e890db7edf8623e1f5e983341dbbc8cc03603ce24f0ab", 1341 | "sha256:facb0b40418010309f77abd44e2583b4936656f6ee5c8625da807564806a6c40" 1342 | ], 1343 | "markers": "python_version >= '3.8'", 1344 | "version": "==0.12.0" 1345 | }, 1346 | "shellingham": { 1347 | "hashes": [ 1348 | "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", 1349 | "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de" 1350 | ], 1351 | "markers": "python_version >= '3.7'", 1352 | "version": "==1.5.4" 1353 | }, 1354 | "six": { 1355 | "hashes": [ 1356 | "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", 1357 | "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" 1358 | ], 1359 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", 1360 | "version": "==1.17.0" 1361 | }, 1362 | "sniffio": { 1363 | "hashes": [ 1364 | "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", 1365 | "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc" 1366 | ], 1367 | "index": "pypi", 1368 | "markers": "python_version >= '3.7'", 1369 | "version": "==1.3.1" 1370 | }, 1371 | "soupsieve": { 1372 | "hashes": [ 1373 | "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb", 1374 | "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9" 1375 | ], 1376 | "markers": "python_version >= '3.8'", 1377 | "version": "==2.6" 1378 | }, 1379 | "speechrecognition": { 1380 | "hashes": [ 1381 | "sha256:248b4c585d11b9168708439f026fb2c0fef0d2a5152d18ee8aaf06abffc82032", 1382 | "sha256:99fc41b12d7b456fce4aebe9bf2b8858ac9c179e1313110005762c67dec24ebb" 1383 | ], 1384 | "markers": "python_version >= '3.9'", 1385 | "version": "==3.12.0" 1386 | }, 1387 | "standard-aifc": { 1388 | "hashes": [ 1389 | "sha256:64e249c7cb4b3daf2fdba4e95721f811bde8bdfc43ad9f936589b7bb2fae2e43", 1390 | "sha256:f7ae09cc57de1224a0dd8e3eb8f73830be7c3d0bc485de4c1f82b4a7f645ac66" 1391 | ], 1392 | "markers": "python_version >= '3.13'", 1393 | "version": "==3.13.0" 1394 | }, 1395 | "standard-chunk": { 1396 | "hashes": [ 1397 | "sha256:17880a26c285189c644bd5bd8f8ed2bdb795d216e3293e6dbe55bbd848e2982c", 1398 | "sha256:4ac345d37d7e686d2755e01836b8d98eda0d1a3ee90375e597ae43aaf064d654" 1399 | ], 1400 | "markers": "python_version >= '3.13'", 1401 | "version": "==3.13.0" 1402 | }, 1403 | "starlette": { 1404 | "hashes": [ 1405 | "sha256:0e4ab3d16522a255be6b28260b938eae2482f98ce5cc934cb08dce8dc3ba5835", 1406 | "sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7" 1407 | ], 1408 | "index": "pypi", 1409 | "markers": "python_version >= '3.8'", 1410 | "version": "==0.41.3" 1411 | }, 1412 | "tqdm": { 1413 | "hashes": [ 1414 | "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", 1415 | "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2" 1416 | ], 1417 | "markers": "python_version >= '3.7'", 1418 | "version": "==4.67.1" 1419 | }, 1420 | "typer": { 1421 | "hashes": [ 1422 | "sha256:7994fb7b8155b64d3402518560648446072864beefd44aa2dc36972a5972e847", 1423 | "sha256:a0588c0a7fa68a1978a069818657778f86abe6ff5ea6abf472f940a08bfe4f0a" 1424 | ], 1425 | "markers": "python_version >= '3.7'", 1426 | "version": "==0.15.1" 1427 | }, 1428 | "typing-extensions": { 1429 | "hashes": [ 1430 | "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", 1431 | "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" 1432 | ], 1433 | "index": "pypi", 1434 | "markers": "python_version >= '3.8'", 1435 | "version": "==4.12.2" 1436 | }, 1437 | "tzdata": { 1438 | "hashes": [ 1439 | "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc", 1440 | "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd" 1441 | ], 1442 | "markers": "python_version >= '2'", 1443 | "version": "==2024.2" 1444 | }, 1445 | "urllib3": { 1446 | "hashes": [ 1447 | "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", 1448 | "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9" 1449 | ], 1450 | "markers": "python_version >= '3.8'", 1451 | "version": "==2.2.3" 1452 | }, 1453 | "uvicorn": { 1454 | "extras": [ 1455 | "standard" 1456 | ], 1457 | "hashes": [ 1458 | "sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4", 1459 | "sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9" 1460 | ], 1461 | "index": "pypi", 1462 | "markers": "python_version >= '3.9'", 1463 | "version": "==0.34.0" 1464 | }, 1465 | "uvloop": { 1466 | "hashes": [ 1467 | "sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0", 1468 | "sha256:10d66943def5fcb6e7b37310eb6b5639fd2ccbc38df1177262b0640c3ca68c1f", 1469 | "sha256:10da8046cc4a8f12c91a1c39d1dd1585c41162a15caaef165c2174db9ef18bdc", 1470 | "sha256:17df489689befc72c39a08359efac29bbee8eee5209650d4b9f34df73d22e414", 1471 | "sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f", 1472 | "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d", 1473 | "sha256:221f4f2a1f46032b403bf3be628011caf75428ee3cc204a22addf96f586b19fd", 1474 | "sha256:2d1f581393673ce119355d56da84fe1dd9d2bb8b3d13ce792524e1607139feff", 1475 | "sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c", 1476 | "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3", 1477 | "sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d", 1478 | "sha256:460def4412e473896ef179a1671b40c039c7012184b627898eea5072ef6f017a", 1479 | "sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb", 1480 | "sha256:46923b0b5ee7fc0020bef24afe7836cb068f5050ca04caf6b487c513dc1a20b2", 1481 | "sha256:53e420a3afe22cdcf2a0f4846e377d16e718bc70103d7088a4f7623567ba5fb0", 1482 | "sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6", 1483 | "sha256:67dd654b8ca23aed0a8e99010b4c34aca62f4b7fce88f39d452ed7622c94845c", 1484 | "sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af", 1485 | "sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc", 1486 | "sha256:87c43e0f13022b998eb9b973b5e97200c8b90823454d4bc06ab33829e09fb9bb", 1487 | "sha256:88cb67cdbc0e483da00af0b2c3cdad4b7c61ceb1ee0f33fe00e09c81e3a6cb75", 1488 | "sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb", 1489 | "sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553", 1490 | "sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e", 1491 | "sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6", 1492 | "sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d", 1493 | "sha256:bc09f0ff191e61c2d592a752423c767b4ebb2986daa9ed62908e2b1b9a9ae206", 1494 | "sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc", 1495 | "sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281", 1496 | "sha256:c097078b8031190c934ed0ebfee8cc5f9ba9642e6eb88322b9958b649750f72b", 1497 | "sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8", 1498 | "sha256:e678ad6fe52af2c58d2ae3c73dc85524ba8abe637f134bf3564ed07f555c5e79", 1499 | "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f", 1500 | "sha256:f0ce1b49560b1d2d8a2977e3ba4afb2414fb46b86a1b64056bc4ab929efdafbe", 1501 | "sha256:f38b2e090258d051d68a5b14d1da7203a3c3677321cf32a95a6f4db4dd8b6f26", 1502 | "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816", 1503 | "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2" 1504 | ], 1505 | "markers": "python_full_version >= '3.8.0'", 1506 | "version": "==0.21.0" 1507 | }, 1508 | "watchfiles": { 1509 | "hashes": [ 1510 | "sha256:0179252846be03fa97d4d5f8233d1c620ef004855f0717712ae1c558f1974a16", 1511 | "sha256:06ce08549e49ba69ccc36fc5659a3d0ff4e3a07d542b895b8a9013fcab46c2dc", 1512 | "sha256:0b90651b4cf9e158d01faa0833b073e2e37719264bcee3eac49fc3c74e7d304b", 1513 | "sha256:0d1ec043f02ca04bf21b1b32cab155ce90c651aaf5540db8eb8ad7f7e645cba8", 1514 | "sha256:0fe4e740ea94978b2b2ab308cbf9270a246bcbb44401f77cc8740348cbaeac3d", 1515 | "sha256:127de3883bdb29dbd3b21f63126bb8fa6e773b74eaef46521025a9ce390e1073", 1516 | "sha256:1550be1a5cb3be08a3fb84636eaafa9b7119b70c71b0bed48726fd1d5aa9b868", 1517 | "sha256:160eff7d1267d7b025e983ca8460e8cc67b328284967cbe29c05f3c3163711a3", 1518 | "sha256:16db2d7e12f94818cbf16d4c8938e4d8aaecee23826344addfaaa671a1527b07", 1519 | "sha256:1c6cf7709ed3e55704cc06f6e835bf43c03bc8e3cb8ff946bf69a2e0a78d9d77", 1520 | "sha256:1da46bb1eefb5a37a8fb6fd52ad5d14822d67c498d99bda8754222396164ae42", 1521 | "sha256:1df924ba82ae9e77340101c28d56cbaff2c991bd6fe8444a545d24075abb0a87", 1522 | "sha256:1e263cc718545b7f897baeac1f00299ab6fabe3e18caaacacb0edf6d5f35513c", 1523 | "sha256:228e2247de583475d4cebf6b9af5dc9918abb99d1ef5ee737155bb39fb33f3c0", 1524 | "sha256:275c1b0e942d335fccb6014d79267d1b9fa45b5ac0639c297f1e856f2f532552", 1525 | "sha256:29b9cb35b7f290db1c31fb2fdf8fc6d3730cfa4bca4b49761083307f441cac5a", 1526 | "sha256:2b4691234d31686dca133c920f94e478b548a8e7c750f28dbbc2e4333e0d3da9", 1527 | "sha256:2b961b86cd3973f5822826017cad7f5a75795168cb645c3a6b30c349094e02e3", 1528 | "sha256:2dcc3f60c445f8ce14156854a072ceb36b83807ed803d37fdea2a50e898635d6", 1529 | "sha256:2f492d2907263d6d0d52f897a68647195bc093dafed14508a8d6817973586b6b", 1530 | "sha256:310505ad305e30cb6c5f55945858cdbe0eb297fc57378f29bacceb534ac34199", 1531 | "sha256:34e87c7b3464d02af87f1059fedda5484e43b153ef519e4085fe1a03dd94801e", 1532 | "sha256:418c5ce332f74939ff60691e5293e27c206c8164ce2b8ce0d9abf013003fb7fe", 1533 | "sha256:46e86ed457c3486080a72bc837300dd200e18d08183f12b6ca63475ab64ed651", 1534 | "sha256:48681c86f2cb08348631fed788a116c89c787fdf1e6381c5febafd782f6c3b44", 1535 | "sha256:489b80812f52a8d8c7b0d10f0d956db0efed25df2821c7a934f6143f76938bd6", 1536 | "sha256:48c9f3bc90c556a854f4cab6a79c16974099ccfa3e3e150673d82d47a4bc92c9", 1537 | "sha256:49bc1bc26abf4f32e132652f4b3bfeec77d8f8f62f57652703ef127e85a3e38d", 1538 | "sha256:52bb50a4c4ca2a689fdba84ba8ecc6a4e6210f03b6af93181bb61c4ec3abaf86", 1539 | "sha256:5691340f259b8f76b45fb31b98e594d46c36d1dc8285efa7975f7f50230c9093", 1540 | "sha256:62691f1c0894b001c7cde1195c03b7801aaa794a837bd6eef24da87d1542838d", 1541 | "sha256:632a52dcaee44792d0965c17bdfe5dc0edad5b86d6a29e53d6ad4bf92dc0ff49", 1542 | "sha256:65ab1fb635476f6170b07e8e21db0424de94877e4b76b7feabfe11f9a5fc12b5", 1543 | "sha256:6a5bc3ca468bb58a2ef50441f953e1f77b9a61bd1b8c347c8223403dc9b4ac9a", 1544 | "sha256:6a76494d2c5311584f22416c5a87c1e2cb954ff9b5f0988027bc4ef2a8a67181", 1545 | "sha256:6f8dc09ae69af50bead60783180f656ad96bd33ffbf6e7a6fce900f6d53b08f1", 1546 | "sha256:703aa5e50e465be901e0e0f9d5739add15e696d8c26c53bc6fc00eb65d7b9469", 1547 | "sha256:713f67132346bdcb4c12df185c30cf04bdf4bf6ea3acbc3ace0912cab6b7cb8c", 1548 | "sha256:75d3bcfa90454dba8df12adc86b13b6d85fda97d90e708efc036c2760cc6ba44", 1549 | "sha256:7ca05cacf2e5c4a97d02a2878a24020daca21dbb8823b023b978210a75c79098", 1550 | "sha256:80bf4b459d94a0387617a1b499f314aa04d8a64b7a0747d15d425b8c8b151da0", 1551 | "sha256:84fac88278f42d61c519a6c75fb5296fd56710b05bbdcc74bdf85db409a03780", 1552 | "sha256:889a37e2acf43c377b5124166bece139b4c731b61492ab22e64d371cce0e6e80", 1553 | "sha256:8af4b582d5fc1b8465d1d2483e5e7b880cc1a4e99f6ff65c23d64d070867ac58", 1554 | "sha256:90b0fe1fcea9bd6e3084b44875e179b4adcc4057a3b81402658d0eb58c98edf8", 1555 | "sha256:93436ed550e429da007fbafb723e0769f25bae178fbb287a94cb4ccdf42d3af3", 1556 | "sha256:995c374e86fa82126c03c5b4630c4e312327ecfe27761accb25b5e1d7ab50ec8", 1557 | "sha256:9af037d3df7188ae21dc1c7624501f2f90d81be6550904e07869d8d0e6766655", 1558 | "sha256:9e080cf917b35b20c889225a13f290f2716748362f6071b859b60b8847a6aa43", 1559 | "sha256:a2ec98e31e1844eac860e70d9247db9d75440fc8f5f679c37d01914568d18721", 1560 | "sha256:abd85de513eb83f5ec153a802348e7a5baa4588b818043848247e3e8986094e8", 1561 | "sha256:ac1be85fe43b4bf9a251978ce5c3bb30e1ada9784290441f5423a28633a958a7", 1562 | "sha256:be37f9b1f8934cd9e7eccfcb5612af9fb728fecbe16248b082b709a9d1b348bf", 1563 | "sha256:bfcae6aecd9e0cb425f5145afee871465b98b75862e038d42fe91fd753ddd780", 1564 | "sha256:c05b021f7b5aa333124f2a64d56e4cb9963b6efdf44e8d819152237bbd93ba15", 1565 | "sha256:c14a07bdb475eb696f85c715dbd0f037918ccbb5248290448488a0b4ef201aad", 1566 | "sha256:c18f3502ad0737813c7dad70e3e1cc966cc147fbaeef47a09463bbffe70b0a00", 1567 | "sha256:c2e9fe695ff151b42ab06501820f40d01310fbd58ba24da8923ace79cf6d702d", 1568 | "sha256:c68be72b1666d93b266714f2d4092d78dc53bd11cf91ed5a3c16527587a52e29", 1569 | "sha256:ca94c85911601b097d53caeeec30201736ad69a93f30d15672b967558df02885", 1570 | "sha256:cf745cbfad6389c0e331786e5fe9ae3f06e9d9c2ce2432378e1267954793975c", 1571 | "sha256:d9dd2b89a16cf7ab9c1170b5863e68de6bf83db51544875b25a5f05a7269e678", 1572 | "sha256:ddff3f8b9fa24a60527c137c852d0d9a7da2a02cf2151650029fdc97c852c974", 1573 | "sha256:e153a690b7255c5ced17895394b4f109d5dcc2a4f35cb809374da50f0e5c456a", 1574 | "sha256:ea2b51c5f38bad812da2ec0cd7eec09d25f521a8b6b6843cbccedd9a1d8a5c15", 1575 | "sha256:ef9ec8068cf23458dbf36a08e0c16f0a2df04b42a8827619646637be1769300a", 1576 | "sha256:f280b02827adc9d87f764972fbeb701cf5611f80b619c20568e1982a277d6146", 1577 | "sha256:f3ff7da165c99a5412fe5dd2304dd2dbaaaa5da718aad942dcb3a178eaa70c56", 1578 | "sha256:f58d3bfafecf3d81c15d99fc0ecf4319e80ac712c77cf0ce2661c8cf8bf84066", 1579 | "sha256:f79fe7993e230a12172ce7d7c7db061f046f672f2b946431c81aff8f60b2758b", 1580 | "sha256:ffe709b1d0bc2e9921257569675674cafb3a5f8af689ab9f3f2b3f88775b960f" 1581 | ], 1582 | "markers": "python_version >= '3.9'", 1583 | "version": "==1.0.3" 1584 | }, 1585 | "websockets": { 1586 | "hashes": [ 1587 | "sha256:00fe5da3f037041da1ee0cf8e308374e236883f9842c7c465aa65098b1c9af59", 1588 | "sha256:01bb2d4f0a6d04538d3c5dfd27c0643269656c28045a53439cbf1c004f90897a", 1589 | "sha256:034feb9f4286476f273b9a245fb15f02c34d9586a5bc936aff108c3ba1b21beb", 1590 | "sha256:04a97aca96ca2acedf0d1f332c861c5a4486fdcba7bcef35873820f940c4231e", 1591 | "sha256:0d4290d559d68288da9f444089fd82490c8d2744309113fc26e2da6e48b65da6", 1592 | "sha256:1288369a6a84e81b90da5dbed48610cd7e5d60af62df9851ed1d1d23a9069f10", 1593 | "sha256:14839f54786987ccd9d03ed7f334baec0f02272e7ec4f6e9d427ff584aeea8b4", 1594 | "sha256:1d045cbe1358d76b24d5e20e7b1878efe578d9897a25c24e6006eef788c0fdf0", 1595 | "sha256:1f874ba705deea77bcf64a9da42c1f5fc2466d8f14daf410bc7d4ceae0a9fcb0", 1596 | "sha256:205f672a6c2c671a86d33f6d47c9b35781a998728d2c7c2a3e1cf3333fcb62b7", 1597 | "sha256:2177ee3901075167f01c5e335a6685e71b162a54a89a56001f1c3e9e3d2ad250", 1598 | "sha256:219c8187b3ceeadbf2afcf0f25a4918d02da7b944d703b97d12fb01510869078", 1599 | "sha256:25225cc79cfebc95ba1d24cd3ab86aaa35bcd315d12fa4358939bd55e9bd74a5", 1600 | "sha256:3630b670d5057cd9e08b9c4dab6493670e8e762a24c2c94ef312783870736ab9", 1601 | "sha256:368a05465f49c5949e27afd6fbe0a77ce53082185bbb2ac096a3a8afaf4de52e", 1602 | "sha256:36ebd71db3b89e1f7b1a5deaa341a654852c3518ea7a8ddfdf69cc66acc2db1b", 1603 | "sha256:39450e6215f7d9f6f7bc2a6da21d79374729f5d052333da4d5825af8a97e6735", 1604 | "sha256:398b10c77d471c0aab20a845e7a60076b6390bfdaac7a6d2edb0d2c59d75e8d8", 1605 | "sha256:3c3deac3748ec73ef24fc7be0b68220d14d47d6647d2f85b2771cb35ea847aa1", 1606 | "sha256:3f14a96a0034a27f9d47fd9788913924c89612225878f8078bb9d55f859272b0", 1607 | "sha256:3fc753451d471cff90b8f467a1fc0ae64031cf2d81b7b34e1811b7e2691bc4bc", 1608 | "sha256:414ffe86f4d6f434a8c3b7913655a1a5383b617f9bf38720e7c0799fac3ab1c6", 1609 | "sha256:449d77d636f8d9c17952628cc7e3b8faf6e92a17ec581ec0c0256300717e1512", 1610 | "sha256:4b6caec8576e760f2c7dd878ba817653144d5f369200b6ddf9771d64385b84d4", 1611 | "sha256:4d4fc827a20abe6d544a119896f6b78ee13fe81cbfef416f3f2ddf09a03f0e2e", 1612 | "sha256:5a42d3ecbb2db5080fc578314439b1d79eef71d323dc661aa616fb492436af5d", 1613 | "sha256:5b918d288958dc3fa1c5a0b9aa3256cb2b2b84c54407f4813c45d52267600cd3", 1614 | "sha256:5ef440054124728cc49b01c33469de06755e5a7a4e83ef61934ad95fc327fbb0", 1615 | "sha256:660c308dabd2b380807ab64b62985eaccf923a78ebc572bd485375b9ca2b7dc7", 1616 | "sha256:6a6c9bcf7cdc0fd41cc7b7944447982e8acfd9f0d560ea6d6845428ed0562058", 1617 | "sha256:6d24fc337fc055c9e83414c94e1ee0dee902a486d19d2a7f0929e49d7d604b09", 1618 | "sha256:7048eb4415d46368ef29d32133134c513f507fff7d953c18c91104738a68c3b3", 1619 | "sha256:77569d19a13015e840b81550922056acabc25e3f52782625bc6843cfa034e1da", 1620 | "sha256:8149a0f5a72ca36720981418eeffeb5c2729ea55fa179091c81a0910a114a5d2", 1621 | "sha256:836bef7ae338a072e9d1863502026f01b14027250a4545672673057997d5c05a", 1622 | "sha256:8621a07991add373c3c5c2cf89e1d277e49dc82ed72c75e3afc74bd0acc446f0", 1623 | "sha256:87e31011b5c14a33b29f17eb48932e63e1dcd3fa31d72209848652310d3d1f0d", 1624 | "sha256:88cf9163ef674b5be5736a584c999e98daf3aabac6e536e43286eb74c126b9c7", 1625 | "sha256:8fda642151d5affdee8a430bd85496f2e2517be3a2b9d2484d633d5712b15c56", 1626 | "sha256:90b5d9dfbb6d07a84ed3e696012610b6da074d97453bd01e0e30744b472c8179", 1627 | "sha256:90f4c7a069c733d95c308380aae314f2cb45bd8a904fb03eb36d1a4983a4993f", 1628 | "sha256:9481a6de29105d73cf4515f2bef8eb71e17ac184c19d0b9918a3701c6c9c4f23", 1629 | "sha256:9607b9a442392e690a57909c362811184ea429585a71061cd5d3c2b98065c199", 1630 | "sha256:9777564c0a72a1d457f0848977a1cbe15cfa75fa2f67ce267441e465717dcf1a", 1631 | "sha256:a032855dc7db987dff813583d04f4950d14326665d7e714d584560b140ae6b8b", 1632 | "sha256:a0adf84bc2e7c86e8a202537b4fd50e6f7f0e4a6b6bf64d7ccb96c4cd3330b29", 1633 | "sha256:a35f704be14768cea9790d921c2c1cc4fc52700410b1c10948511039be824aac", 1634 | "sha256:a3dfff83ca578cada2d19e665e9c8368e1598d4e787422a460ec70e531dbdd58", 1635 | "sha256:a4c805c6034206143fbabd2d259ec5e757f8b29d0a2f0bf3d2fe5d1f60147a4a", 1636 | "sha256:a655bde548ca98f55b43711b0ceefd2a88a71af6350b0c168aa77562104f3f45", 1637 | "sha256:ad2ab2547761d79926effe63de21479dfaf29834c50f98c4bf5b5480b5838434", 1638 | "sha256:b1f3628a0510bd58968c0f60447e7a692933589b791a6b572fcef374053ca280", 1639 | "sha256:b7e7ea2f782408c32d86b87a0d2c1fd8871b0399dd762364c731d86c86069a78", 1640 | "sha256:bc6ccf7d54c02ae47a48ddf9414c54d48af9c01076a2e1023e3b486b6e72c707", 1641 | "sha256:bea45f19b7ca000380fbd4e02552be86343080120d074b87f25593ce1700ad58", 1642 | "sha256:cc1fc87428c1d18b643479caa7b15db7d544652e5bf610513d4a3478dbe823d0", 1643 | "sha256:cd7c11968bc3860d5c78577f0dbc535257ccec41750675d58d8dc66aa47fe52c", 1644 | "sha256:ceada5be22fa5a5a4cdeec74e761c2ee7db287208f54c718f2df4b7e200b8d4a", 1645 | "sha256:cf5201a04550136ef870aa60ad3d29d2a59e452a7f96b94193bee6d73b8ad9a9", 1646 | "sha256:d9fd19ecc3a4d5ae82ddbfb30962cf6d874ff943e56e0c81f5169be2fda62979", 1647 | "sha256:ddaa4a390af911da6f680be8be4ff5aaf31c4c834c1a9147bc21cbcbca2d4370", 1648 | "sha256:df174ece723b228d3e8734a6f2a6febbd413ddec39b3dc592f5a4aa0aff28098", 1649 | "sha256:e0744623852f1497d825a49a99bfbec9bea4f3f946df6eb9d8a2f0c37a2fec2e", 1650 | "sha256:e5dc25a9dbd1a7f61eca4b7cb04e74ae4b963d658f9e4f9aad9cd00b688692c8", 1651 | "sha256:e7591d6f440af7f73c4bd9404f3772bfee064e639d2b6cc8c94076e71b2471c1", 1652 | "sha256:eb6d38971c800ff02e4a6afd791bbe3b923a9a57ca9aeab7314c21c84bf9ff05", 1653 | "sha256:ed907449fe5e021933e46a3e65d651f641975a768d0649fee59f10c2985529ed", 1654 | "sha256:f6cf0ad281c979306a6a34242b371e90e891bce504509fb6bb5246bbbf31e7b6", 1655 | "sha256:f95ba34d71e2fa0c5d225bde3b3bdb152e957150100e75c86bc7f3964c450d89" 1656 | ], 1657 | "markers": "python_version >= '3.9'", 1658 | "version": "==14.1" 1659 | }, 1660 | "xlsxwriter": { 1661 | "hashes": [ 1662 | "sha256:9977d0c661a72866a61f9f7a809e25ebbb0fb7036baa3b9fe74afcfca6b3cb8c", 1663 | "sha256:ecfd5405b3e0e228219bcaf24c2ca0915e012ca9464a14048021d21a995d490e" 1664 | ], 1665 | "markers": "python_version >= '3.6'", 1666 | "version": "==3.2.0" 1667 | }, 1668 | "youtube-transcript-api": { 1669 | "hashes": [ 1670 | "sha256:297a74c1863d9df88f6885229f33a7eda61493d73ecb13ec80e876b65423e9b4", 1671 | "sha256:4d1f6451ae508390a5279f98519efb45e091bf60d3cca5ea0bb122800ab6a011" 1672 | ], 1673 | "markers": "python_version < '3.14' and python_version >= '3.8'", 1674 | "version": "==0.6.3" 1675 | } 1676 | }, 1677 | "develop": {} 1678 | } 1679 | --------------------------------------------------------------------------------