├── .github
└── workflows
│ └── build_and_release.yml
├── .gitignore
├── LICENSE
├── Makefile
├── README.md
├── example
├── imgs
│ ├── client_id.png
│ ├── create.png
│ ├── demo.png
│ ├── ploomber-deploy.png
│ ├── signin.png
│ └── tenant_id.png
├── local
│ ├── .gitignore
│ ├── Dockerfile
│ ├── Makefile
│ ├── README.md
│ ├── app
│ │ └── dashboard.py
│ ├── poetry.lock
│ └── pyproject.toml
└── ploomber
│ ├── .env.example
│ ├── .gitignore
│ ├── README.md
│ ├── app.py
│ └── requirements.txt
├── msal_streamlit_authentication
├── __init__.py
└── frontend
│ ├── index.html
│ ├── package-lock.json
│ ├── package.json
│ ├── src
│ ├── Authentication.tsx
│ ├── auth
│ │ └── msal-auth.tsx
│ ├── index.css
│ ├── main.tsx
│ └── vite-env.d.ts
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ └── vite.config.ts
├── poetry.lock
└── pyproject.toml
/.github/workflows/build_and_release.yml:
--------------------------------------------------------------------------------
1 | name: Build and release
2 | on:
3 | release:
4 | types:
5 | - published
6 | workflow_dispatch:
7 | inputs:
8 | logLevel:
9 | description: 'Log level'
10 | required: true
11 | default: 'warning'
12 | jobs:
13 | build-release:
14 | runs-on: ubuntu-latest
15 | steps:
16 | - name: Check-out repository
17 | uses: actions/checkout@v3
18 | #-------------------------------
19 | # Setup Node.js and React
20 | #-------------------------------
21 | - name: Use Node.js v18.x
22 | uses: actions/setup-node@v3
23 | with:
24 | node-version: 18
25 | - name: Install NPM dependencies
26 | run: npm install --prefix msal_streamlit_authentication/frontend
27 | - name: Build React project
28 | run: npm run build --prefix msal_streamlit_authentication/frontend
29 | #-------------------------------
30 | # Setup python
31 | #-------------------------------
32 | - name: Setup Python
33 | id: setup-python
34 | uses: actions/setup-python@v4
35 | with:
36 | python-version: '3.11'
37 | #-------------------------------
38 | # Install & configure poetry
39 | #-------------------------------
40 | - name: Install Poetry
41 | uses: snok/install-poetry@v1
42 | with:
43 | virtualenvs-create: true
44 | virtualenvs-in-project: true
45 | installer-parallel: true
46 | #-------------------------------
47 | # Build & publish to PyPi
48 | #-------------------------------
49 | - name: Build package distribution
50 | run: poetry build --no-interaction
51 | - name: Publish a Python distribution to PyPI
52 | uses: pypa/gh-action-pypi-publish@release/v1
53 | with:
54 | user: __token__
55 | password: ${{ secrets.PYPI_API_TOKEN }}
56 |
57 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Python things
2 | __pycache__
3 |
4 | # JS misc
5 | node_modules
6 | build/
7 | dist/
8 |
9 | # IDE stuff
10 | .vscode
11 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Michael Staal-Olsen
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 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | #############
2 | # k8s setup #
3 | #############
4 |
5 | .PHONY: download-install-poetry
6 | download-install-poetry:
7 | curl -sSL https://install.python-poetry.org/ | python -
8 |
9 | # TODO: Pin to stable instead of preview once poetry 1.2 is released
10 | poetry_setup: ## Setup virtual env and install dependencies
11 | deactivate || true
12 | poetry self update --preview || true
13 | poetry config virtualenvs.create true
14 | poetry config virtualenvs.in-project true
15 | poetry install --with dev --no-interaction -v
16 | .PHONY: poetry_setup
17 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
Streamlit - Microsoft MSAL Authentication
3 |
4 |
5 | A Streamlit component for Microsoft Authentication Library (MSAL) integration
6 |
7 |
8 | [](https://badge.fury.io/py/msal-streamlit-authentication)
9 |
10 | ```sh
11 | pip install msal-streamlit-authentication
12 | ```
13 |
14 | [Example: Local Project With Docker](./example/local/) | [Example: Deploy MSAL on Ploomber](./example/ploomber/) | [Enterprise Support](https://calendly.com/edubr/ploomber-customer-support)
15 |
16 | [Deploy Streamlit on Ploomber Cloud for Free](https://www.platform.ploomber.io/register/?utm_medium=github&utm_source=msal)
17 |
18 |
19 |
20 | ## Overview
21 |
22 | > [!IMPORTANT]
23 | > 🏢 **Enterprise Support Available**: Looking for advanced features, SLA, or dedicated support?
24 | Contact our team →
25 |
26 | This Streamlit component enables seamless client-side authentication using:
27 | - Azure Active Directory (AAD) work and school accounts
28 | - Microsoft personal accounts (MSA)
29 | - Social identity providers (Facebook, Google, LinkedIn, etc.) through Azure AD B2C
30 |
31 | Built on the [Microsoft MSAL JS Library](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-browser), it supports any provider using OpenID Connect Authorization Code Flow (PKCE).
32 |
33 |
34 |
35 |
36 |
37 | ## Quick Start
38 |
39 | 1. **Register Your Application**
40 | - [Register a Single Page Application in Azure AD](https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-spa-app-registration)
41 | - Note your Client ID and configure redirect URIs for targeted final URI
42 |
43 | 2. **Install the Package**
44 | ```sh
45 | pip install msal-streamlit-authentication
46 | ```
47 |
48 | 3. **Implementation Example**
49 | ```python
50 | value = msal_authentication(
51 | auth={
52 | "clientId": "YOUR_CLIENT_ID",
53 | "authority": "https://login.microsoftonline.com/YOUR_TENANT_ID",
54 | "redirectUri": "/",
55 | "postLogoutRedirectUri": "/"
56 | },
57 | cache={
58 | "cacheLocation": "sessionStorage",
59 | "storeAuthStateInCookie": False
60 | },
61 | login_request={
62 | "scopes": ["YOUR_SCOPE/.default"]
63 | }
64 | )
65 | ```
66 |
67 | ## Configuration Guide
68 |
69 | ### Required Configuration
70 | - **Client ID**: Found in Azure Portal under "Application (client) ID"
71 |
72 | 📷 Where to find Client ID
73 |
74 |
75 |
76 | - **Tenant ID**: Found in Azure Portal under "Directory (tenant) ID"
77 |
78 | 📷 Where to find Tenant ID
79 |
80 |
81 |
82 | ### Optional Parameters
83 | ```python
84 | msal_authentication(
85 | # ... required config ...
86 | login_button_text="Login", # Default: "Login"
87 | logout_button_text="Logout", # Default: "Logout"
88 | class_name="css_button_class", # CSS class selector
89 | html_id="button_id", # HTML ID
90 | key="1" # Streamlit component key
91 | )
92 | ```
93 |
94 | ### Scopes Configuration
95 | For more information on configuring scopes and permissions, see the [official documentation](https://learn.microsoft.com/en-us/entra/identity-platform/scopes-oidc).
96 |
97 | Basic scope example:
98 | ```python
99 | login_request={
100 | "scopes": ["https://graph.microsoft.com/.default"]
101 | }
102 | ```
103 |
104 | ### Redirect URI
105 | By default, MSAL uses the current page as the redirect URI. To customize:
106 | ```python
107 | auth={
108 | # ... other config ...
109 | "redirectUri": "/custom-path",
110 | }
111 | ```
112 | ⚠️ All redirect URIs must be registered in your Azure portal application settings.
113 |
114 | ## Additional Resources
115 | - [MSAL Documentation](https://learn.microsoft.com/en-us/azure/active-directory/develop/msal-overview)
116 | - [Azure AD B2C Overview](https://docs.microsoft.com/azure/active-directory-b2c/active-directory-b2c-overview#identity-providers)
117 | - [MSAL JS GitHub Repository](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-browser)
118 | - [Deploy on Ploomber](./example/ploomber/)
119 |
120 | > [!TIP]
121 | > Deploy Streamlit apps for free on [Ploomber Cloud!](https://www.platform.ploomber.io/register/?utm_medium=github&utm_source=msal)
122 |
123 | ## Acknowledgments
124 | Built with inspiration from:
125 | - [Official Streamlit Component Template](https://github.com/streamlit/component-template)
126 | - [Streamlit NPM Component Library](https://github.com/streamlit/streamlit/tree/develop/component-lib)
127 |
--------------------------------------------------------------------------------
/example/imgs/client_id.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ploomber/msal_streamlit_authentication/b3318ed08232f5dbabce64448f8668cc50d00624/example/imgs/client_id.png
--------------------------------------------------------------------------------
/example/imgs/create.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ploomber/msal_streamlit_authentication/b3318ed08232f5dbabce64448f8668cc50d00624/example/imgs/create.png
--------------------------------------------------------------------------------
/example/imgs/demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ploomber/msal_streamlit_authentication/b3318ed08232f5dbabce64448f8668cc50d00624/example/imgs/demo.png
--------------------------------------------------------------------------------
/example/imgs/ploomber-deploy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ploomber/msal_streamlit_authentication/b3318ed08232f5dbabce64448f8668cc50d00624/example/imgs/ploomber-deploy.png
--------------------------------------------------------------------------------
/example/imgs/signin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ploomber/msal_streamlit_authentication/b3318ed08232f5dbabce64448f8668cc50d00624/example/imgs/signin.png
--------------------------------------------------------------------------------
/example/imgs/tenant_id.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ploomber/msal_streamlit_authentication/b3318ed08232f5dbabce64448f8668cc50d00624/example/imgs/tenant_id.png
--------------------------------------------------------------------------------
/example/local/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | pip-wheel-metadata/
24 | share/python-wheels/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 | MANIFEST
29 |
30 | # PyInstaller
31 | # Usually these files are written by a python script from a template
32 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
33 | *.manifest
34 | *.spec
35 |
36 | # Installer logs
37 | pip-log.txt
38 | pip-delete-this-directory.txt
39 |
40 | # Unit test / coverage reports
41 | htmlcov/
42 | .tox/
43 | .nox/
44 | .coverage
45 | .coverage.*
46 | .cache
47 | nosetests.xml
48 | coverage.xml
49 | *.cover
50 | *.py,cover
51 | .hypothesis/
52 | .pytest_cache/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | target/
76 |
77 | # Jupyter Notebook
78 | .ipynb_checkpoints
79 |
80 | # IPython
81 | profile_default/
82 | ipython_config.py
83 |
84 | # pyenv
85 | .python-version
86 |
87 | # pipenv
88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
91 | # install all needed dependencies.
92 | #Pipfile.lock
93 |
94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95 | __pypackages__/
96 |
97 | # Celery stuff
98 | celerybeat-schedule
99 | celerybeat.pid
100 |
101 | # SageMath parsed files
102 | *.sage.py
103 |
104 | # Environments
105 | .env
106 | .venv
107 | env/
108 | venv/
109 | ENV/
110 | env.bak/
111 | venv.bak/
112 |
113 | # Spyder project settings
114 | .spyderproject
115 | .spyproject
116 |
117 | # Rope project settings
118 | .ropeproject
119 |
120 | # mkdocs documentation
121 | /site
122 |
123 | # mypy
124 | .mypy_cache/
125 | .dmypy.json
126 | dmypy.json
127 |
128 | # Pyre type checker
129 | .pyre/
130 |
--------------------------------------------------------------------------------
/example/local/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:3.9-slim
2 |
3 | # Create user to avoid running as root
4 | RUN useradd --create-home app
5 |
6 | ENV POETRY_HOME="/opt/poetry" \
7 | POETRY_VIRTUALENVS_CREATE=false \
8 | POETRY_VIRTUALENVS_IN_PROJECT=false \
9 | POETRY_NO_INTERACTION=1 \
10 | POETRY_VERSION=1.4.0
11 |
12 | # Update pip
13 | RUN pip install --upgrade pip
14 |
15 | # Install poetry
16 | RUN pip install "poetry==$POETRY_VERSION"
17 |
18 | # Copy project files
19 | COPY app ./app
20 | COPY pyproject.toml poetry.lock ./
21 |
22 | # Install application
23 | RUN poetry install
24 |
25 | EXPOSE 8501
26 | HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health
27 | ENTRYPOINT ["streamlit", "run", "app/dashboard.py", "--server.port=8501", "--server.address=0.0.0.0"]
28 |
--------------------------------------------------------------------------------
/example/local/Makefile:
--------------------------------------------------------------------------------
1 | #############
2 | # setup #
3 | #############
4 |
5 | docker_build: ## build docker image
6 | docker build -t streamlit .
7 | .PHONY: docker_build
8 |
9 |
10 | docker_run: ## run docker image
11 | docker run -p 8501:8501 streamlit
12 | .PHONY: docker_run
13 |
--------------------------------------------------------------------------------
/example/local/README.md:
--------------------------------------------------------------------------------
1 | # streamlit_msal_sample
2 | Reference project for using [msal-streamlit-authentication](https://github.com/ploomber/msal_streamlit_authentication)
3 |
4 | # Get Started
5 |
6 | 1. Configure the application
7 | Edit [dashboard.py](./app/dashboard.py), by providing the `msal_authentication` with your Single Page Application config. Don't forget to set the callback url to `https://localhost:8501`
8 |
9 | ```python
10 | value = msal_authentication(
11 | auth={
12 | "clientId": "CLIENT_ID",
13 | "authority": "https://login.microsoftonline.com/TENANT_ID",
14 | "redirectUri": "http://localhost:8501/",
15 | "postLogoutRedirectUri": "/"
16 | },
17 | cache={
18 | "cacheLocation": "sessionStorage",
19 | "storeAuthStateInCookie": False
20 | },
21 | login_request={
22 | "scopes": ["https://graph.microsoft.com/.default"]
23 | },
24 | key=1
25 | )
26 | ```
27 |
28 | 2. Build the Docker container
29 | ```sh
30 | docker build -t streamlit .
31 | ```
32 |
33 | 3. Run the container
34 | ```sh
35 | docker run -p 8501:8501 streamlit
36 | ```
37 |
38 | 4. Naviguate to `https://localhost:8501` to see the demo
39 |
--------------------------------------------------------------------------------
/example/local/app/dashboard.py:
--------------------------------------------------------------------------------
1 | import streamlit as st
2 |
3 | from msal_streamlit_authentication import msal_authentication
4 |
5 | st.title("Streamlit MSAL Anthentication 🔒")
6 |
7 | value = msal_authentication(
8 | auth={
9 | "clientId": "{CLIENT_ID_HERE}",
10 | "authority": "https://login.microsoftonline.com/{TENANT_ID_HERE}",
11 | "redirectUri": "http://localhost:8501/",
12 | "postLogoutRedirectUri": "/"
13 | },
14 | cache={
15 | "cacheLocation": "sessionStorage",
16 | "storeAuthStateInCookie": False
17 | },
18 | login_request={
19 | "scopes": ["https://graph.microsoft.com/.default"]
20 | },
21 | key=1)
22 |
23 | st.write("Received", value)
24 |
--------------------------------------------------------------------------------
/example/local/poetry.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand.
2 |
3 | [[package]]
4 | name = "altair"
5 | version = "4.2.2"
6 | description = "Altair: A declarative statistical visualization library for Python."
7 | category = "main"
8 | optional = false
9 | python-versions = ">=3.7"
10 | files = [
11 | {file = "altair-4.2.2-py3-none-any.whl", hash = "sha256:8b45ebeaf8557f2d760c5c77b79f02ae12aee7c46c27c06014febab6f849bc87"},
12 | {file = "altair-4.2.2.tar.gz", hash = "sha256:39399a267c49b30d102c10411e67ab26374156a84b1aeb9fcd15140429ba49c5"},
13 | ]
14 |
15 | [package.dependencies]
16 | entrypoints = "*"
17 | jinja2 = "*"
18 | jsonschema = ">=3.0"
19 | numpy = "*"
20 | pandas = ">=0.18"
21 | toolz = "*"
22 |
23 | [package.extras]
24 | dev = ["black", "docutils", "flake8", "ipython", "m2r", "mistune (<2.0.0)", "pytest", "recommonmark", "sphinx", "vega-datasets"]
25 |
26 | [[package]]
27 | name = "atomicwrites"
28 | version = "1.4.1"
29 | description = "Atomic file writes."
30 | category = "dev"
31 | optional = false
32 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
33 | files = [
34 | {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"},
35 | ]
36 |
37 | [[package]]
38 | name = "attrs"
39 | version = "22.2.0"
40 | description = "Classes Without Boilerplate"
41 | category = "main"
42 | optional = false
43 | python-versions = ">=3.6"
44 | files = [
45 | {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"},
46 | {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"},
47 | ]
48 |
49 | [package.extras]
50 | cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"]
51 | dev = ["attrs[docs,tests]"]
52 | docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"]
53 | tests = ["attrs[tests-no-zope]", "zope.interface"]
54 | tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"]
55 |
56 | [[package]]
57 | name = "blinker"
58 | version = "1.5"
59 | description = "Fast, simple object-to-object and broadcast signaling"
60 | category = "main"
61 | optional = false
62 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
63 | files = [
64 | {file = "blinker-1.5-py2.py3-none-any.whl", hash = "sha256:1eb563df6fdbc39eeddc177d953203f99f097e9bf0e2b8f9f3cf18b6ca425e36"},
65 | {file = "blinker-1.5.tar.gz", hash = "sha256:923e5e2f69c155f2cc42dafbbd70e16e3fde24d2d4aa2ab72fbe386238892462"},
66 | ]
67 |
68 | [[package]]
69 | name = "cachetools"
70 | version = "5.3.0"
71 | description = "Extensible memoizing collections and decorators"
72 | category = "main"
73 | optional = false
74 | python-versions = "~=3.7"
75 | files = [
76 | {file = "cachetools-5.3.0-py3-none-any.whl", hash = "sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4"},
77 | {file = "cachetools-5.3.0.tar.gz", hash = "sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14"},
78 | ]
79 |
80 | [[package]]
81 | name = "certifi"
82 | version = "2022.12.7"
83 | description = "Python package for providing Mozilla's CA Bundle."
84 | category = "main"
85 | optional = false
86 | python-versions = ">=3.6"
87 | files = [
88 | {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"},
89 | {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"},
90 | ]
91 |
92 | [[package]]
93 | name = "charset-normalizer"
94 | version = "3.1.0"
95 | description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
96 | category = "main"
97 | optional = false
98 | python-versions = ">=3.7.0"
99 | files = [
100 | {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"},
101 | {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"},
102 | {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"},
103 | {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"},
104 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"},
105 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"},
106 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"},
107 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"},
108 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"},
109 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"},
110 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"},
111 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"},
112 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"},
113 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"},
114 | {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"},
115 | {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"},
116 | {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"},
117 | {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"},
118 | {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"},
119 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"},
120 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"},
121 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"},
122 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"},
123 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"},
124 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"},
125 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"},
126 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"},
127 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"},
128 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"},
129 | {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"},
130 | {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"},
131 | {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"},
132 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"},
133 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"},
134 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"},
135 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"},
136 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"},
137 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"},
138 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"},
139 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"},
140 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"},
141 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"},
142 | {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"},
143 | {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"},
144 | {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"},
145 | {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"},
146 | {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"},
147 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"},
148 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"},
149 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"},
150 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"},
151 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"},
152 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"},
153 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"},
154 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"},
155 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"},
156 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"},
157 | {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"},
158 | {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"},
159 | {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"},
160 | {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"},
161 | {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"},
162 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"},
163 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"},
164 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"},
165 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"},
166 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"},
167 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"},
168 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"},
169 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"},
170 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"},
171 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"},
172 | {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"},
173 | {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"},
174 | {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"},
175 | ]
176 |
177 | [[package]]
178 | name = "click"
179 | version = "8.1.3"
180 | description = "Composable command line interface toolkit"
181 | category = "main"
182 | optional = false
183 | python-versions = ">=3.7"
184 | files = [
185 | {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
186 | {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
187 | ]
188 |
189 | [package.dependencies]
190 | colorama = {version = "*", markers = "platform_system == \"Windows\""}
191 |
192 | [[package]]
193 | name = "colorama"
194 | version = "0.4.6"
195 | description = "Cross-platform colored terminal text."
196 | category = "main"
197 | optional = false
198 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
199 | files = [
200 | {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
201 | {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
202 | ]
203 |
204 | [[package]]
205 | name = "decorator"
206 | version = "5.1.1"
207 | description = "Decorators for Humans"
208 | category = "main"
209 | optional = false
210 | python-versions = ">=3.5"
211 | files = [
212 | {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
213 | {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
214 | ]
215 |
216 | [[package]]
217 | name = "entrypoints"
218 | version = "0.4"
219 | description = "Discover and load entry points from installed packages."
220 | category = "main"
221 | optional = false
222 | python-versions = ">=3.6"
223 | files = [
224 | {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"},
225 | {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"},
226 | ]
227 |
228 | [[package]]
229 | name = "gitdb"
230 | version = "4.0.10"
231 | description = "Git Object Database"
232 | category = "main"
233 | optional = false
234 | python-versions = ">=3.7"
235 | files = [
236 | {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"},
237 | {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"},
238 | ]
239 |
240 | [package.dependencies]
241 | smmap = ">=3.0.1,<6"
242 |
243 | [[package]]
244 | name = "gitpython"
245 | version = "3.1.31"
246 | description = "GitPython is a Python library used to interact with Git repositories"
247 | category = "main"
248 | optional = false
249 | python-versions = ">=3.7"
250 | files = [
251 | {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"},
252 | {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"},
253 | ]
254 |
255 | [package.dependencies]
256 | gitdb = ">=4.0.1,<5"
257 |
258 | [[package]]
259 | name = "idna"
260 | version = "3.4"
261 | description = "Internationalized Domain Names in Applications (IDNA)"
262 | category = "main"
263 | optional = false
264 | python-versions = ">=3.5"
265 | files = [
266 | {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
267 | {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
268 | ]
269 |
270 | [[package]]
271 | name = "importlib-metadata"
272 | version = "6.0.0"
273 | description = "Read metadata from Python packages"
274 | category = "main"
275 | optional = false
276 | python-versions = ">=3.7"
277 | files = [
278 | {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"},
279 | {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"},
280 | ]
281 |
282 | [package.dependencies]
283 | zipp = ">=0.5"
284 |
285 | [package.extras]
286 | docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
287 | perf = ["ipython"]
288 | testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"]
289 |
290 | [[package]]
291 | name = "iniconfig"
292 | version = "2.0.0"
293 | description = "brain-dead simple config-ini parsing"
294 | category = "dev"
295 | optional = false
296 | python-versions = ">=3.7"
297 | files = [
298 | {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
299 | {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
300 | ]
301 |
302 | [[package]]
303 | name = "jinja2"
304 | version = "3.1.2"
305 | description = "A very fast and expressive template engine."
306 | category = "main"
307 | optional = false
308 | python-versions = ">=3.7"
309 | files = [
310 | {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"},
311 | {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"},
312 | ]
313 |
314 | [package.dependencies]
315 | MarkupSafe = ">=2.0"
316 |
317 | [package.extras]
318 | i18n = ["Babel (>=2.7)"]
319 |
320 | [[package]]
321 | name = "jsonschema"
322 | version = "4.17.3"
323 | description = "An implementation of JSON Schema validation for Python"
324 | category = "main"
325 | optional = false
326 | python-versions = ">=3.7"
327 | files = [
328 | {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"},
329 | {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"},
330 | ]
331 |
332 | [package.dependencies]
333 | attrs = ">=17.4.0"
334 | pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
335 |
336 | [package.extras]
337 | format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
338 | format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
339 |
340 | [[package]]
341 | name = "markdown-it-py"
342 | version = "2.2.0"
343 | description = "Python port of markdown-it. Markdown parsing, done right!"
344 | category = "main"
345 | optional = false
346 | python-versions = ">=3.7"
347 | files = [
348 | {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"},
349 | {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"},
350 | ]
351 |
352 | [package.dependencies]
353 | mdurl = ">=0.1,<1.0"
354 |
355 | [package.extras]
356 | benchmarking = ["psutil", "pytest", "pytest-benchmark"]
357 | code-style = ["pre-commit (>=3.0,<4.0)"]
358 | compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"]
359 | linkify = ["linkify-it-py (>=1,<3)"]
360 | plugins = ["mdit-py-plugins"]
361 | profiling = ["gprof2dot"]
362 | rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"]
363 | testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
364 |
365 | [[package]]
366 | name = "markupsafe"
367 | version = "2.1.2"
368 | description = "Safely add untrusted strings to HTML/XML markup."
369 | category = "main"
370 | optional = false
371 | python-versions = ">=3.7"
372 | files = [
373 | {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"},
374 | {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"},
375 | {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"},
376 | {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"},
377 | {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"},
378 | {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"},
379 | {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"},
380 | {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"},
381 | {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"},
382 | {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"},
383 | {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"},
384 | {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"},
385 | {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"},
386 | {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"},
387 | {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"},
388 | {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"},
389 | {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"},
390 | {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"},
391 | {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"},
392 | {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"},
393 | {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"},
394 | {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"},
395 | {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"},
396 | {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"},
397 | {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"},
398 | {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"},
399 | {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"},
400 | {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"},
401 | {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"},
402 | {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"},
403 | {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"},
404 | {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"},
405 | {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"},
406 | {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"},
407 | {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"},
408 | {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"},
409 | {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"},
410 | {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"},
411 | {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"},
412 | {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"},
413 | {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"},
414 | {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"},
415 | {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"},
416 | {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"},
417 | {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"},
418 | {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"},
419 | {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"},
420 | {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"},
421 | {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"},
422 | {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"},
423 | ]
424 |
425 | [[package]]
426 | name = "mdurl"
427 | version = "0.1.2"
428 | description = "Markdown URL utilities"
429 | category = "main"
430 | optional = false
431 | python-versions = ">=3.7"
432 | files = [
433 | {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"},
434 | {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
435 | ]
436 |
437 | [[package]]
438 | name = "more-itertools"
439 | version = "9.1.0"
440 | description = "More routines for operating on iterables, beyond itertools"
441 | category = "dev"
442 | optional = false
443 | python-versions = ">=3.7"
444 | files = [
445 | {file = "more-itertools-9.1.0.tar.gz", hash = "sha256:cabaa341ad0389ea83c17a94566a53ae4c9d07349861ecb14dc6d0345cf9ac5d"},
446 | {file = "more_itertools-9.1.0-py3-none-any.whl", hash = "sha256:d2bc7f02446e86a68911e58ded76d6561eea00cddfb2a91e7019bbb586c799f3"},
447 | ]
448 |
449 | [[package]]
450 | name = "msal-streamlit-authentication"
451 | version = "1.0.7"
452 | description = "Streamlit Authentication library based on MSAL.JS"
453 | category = "main"
454 | optional = false
455 | python-versions = ">=3.7"
456 | files = [
457 | {file = "msal_streamlit_authentication-1.0.7-py3-none-any.whl", hash = "sha256:3d50cd0b587f5380cad5e38da9452d7d3cffed6aabb36e5d1b2a924d12f7db6e"},
458 | {file = "msal_streamlit_authentication-1.0.7.tar.gz", hash = "sha256:79f8363ddac005675eb56f32700a03193f883a9b7d0c105c7c8e1723a65a3a9b"},
459 | ]
460 |
461 | [package.dependencies]
462 | streamlit = "*"
463 |
464 | [[package]]
465 | name = "numpy"
466 | version = "1.24.2"
467 | description = "Fundamental package for array computing in Python"
468 | category = "main"
469 | optional = false
470 | python-versions = ">=3.8"
471 | files = [
472 | {file = "numpy-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eef70b4fc1e872ebddc38cddacc87c19a3709c0e3e5d20bf3954c147b1dd941d"},
473 | {file = "numpy-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8d2859428712785e8a8b7d2b3ef0a1d1565892367b32f915c4a4df44d0e64f5"},
474 | {file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6524630f71631be2dabe0c541e7675db82651eb998496bbe16bc4f77f0772253"},
475 | {file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a51725a815a6188c662fb66fb32077709a9ca38053f0274640293a14fdd22978"},
476 | {file = "numpy-1.24.2-cp310-cp310-win32.whl", hash = "sha256:2620e8592136e073bd12ee4536149380695fbe9ebeae845b81237f986479ffc9"},
477 | {file = "numpy-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:97cf27e51fa078078c649a51d7ade3c92d9e709ba2bfb97493007103c741f1d0"},
478 | {file = "numpy-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7de8fdde0003f4294655aa5d5f0a89c26b9f22c0a58790c38fae1ed392d44a5a"},
479 | {file = "numpy-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4173bde9fa2a005c2c6e2ea8ac1618e2ed2c1c6ec8a7657237854d42094123a0"},
480 | {file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cecaed30dc14123020f77b03601559fff3e6cd0c048f8b5289f4eeabb0eb281"},
481 | {file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a23f8440561a633204a67fb44617ce2a299beecf3295f0d13c495518908e910"},
482 | {file = "numpy-1.24.2-cp311-cp311-win32.whl", hash = "sha256:e428c4fbfa085f947b536706a2fc349245d7baa8334f0c5723c56a10595f9b95"},
483 | {file = "numpy-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:557d42778a6869c2162deb40ad82612645e21d79e11c1dc62c6e82a2220ffb04"},
484 | {file = "numpy-1.24.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d0a2db9d20117bf523dde15858398e7c0858aadca7c0f088ac0d6edd360e9ad2"},
485 | {file = "numpy-1.24.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c72a6b2f4af1adfe193f7beb91ddf708ff867a3f977ef2ec53c0ffb8283ab9f5"},
486 | {file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29e6bd0ec49a44d7690ecb623a8eac5ab8a923bce0bea6293953992edf3a76a"},
487 | {file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eabd64ddb96a1239791da78fa5f4e1693ae2dadc82a76bc76a14cbb2b966e96"},
488 | {file = "numpy-1.24.2-cp38-cp38-win32.whl", hash = "sha256:e3ab5d32784e843fc0dd3ab6dcafc67ef806e6b6828dc6af2f689be0eb4d781d"},
489 | {file = "numpy-1.24.2-cp38-cp38-win_amd64.whl", hash = "sha256:76807b4063f0002c8532cfeac47a3068a69561e9c8715efdad3c642eb27c0756"},
490 | {file = "numpy-1.24.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4199e7cfc307a778f72d293372736223e39ec9ac096ff0a2e64853b866a8e18a"},
491 | {file = "numpy-1.24.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:adbdce121896fd3a17a77ab0b0b5eedf05a9834a18699db6829a64e1dfccca7f"},
492 | {file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:889b2cc88b837d86eda1b17008ebeb679d82875022200c6e8e4ce6cf549b7acb"},
493 | {file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f64bb98ac59b3ea3bf74b02f13836eb2e24e48e0ab0145bbda646295769bd780"},
494 | {file = "numpy-1.24.2-cp39-cp39-win32.whl", hash = "sha256:63e45511ee4d9d976637d11e6c9864eae50e12dc9598f531c035265991910468"},
495 | {file = "numpy-1.24.2-cp39-cp39-win_amd64.whl", hash = "sha256:a77d3e1163a7770164404607b7ba3967fb49b24782a6ef85d9b5f54126cc39e5"},
496 | {file = "numpy-1.24.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:92011118955724465fb6853def593cf397b4a1367495e0b59a7e69d40c4eb71d"},
497 | {file = "numpy-1.24.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9006288bcf4895917d02583cf3411f98631275bc67cce355a7f39f8c14338fa"},
498 | {file = "numpy-1.24.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:150947adbdfeceec4e5926d956a06865c1c690f2fd902efede4ca6fe2e657c3f"},
499 | {file = "numpy-1.24.2.tar.gz", hash = "sha256:003a9f530e880cb2cd177cba1af7220b9aa42def9c4afc2a2fc3ee6be7eb2b22"},
500 | ]
501 |
502 | [[package]]
503 | name = "packaging"
504 | version = "23.0"
505 | description = "Core utilities for Python packages"
506 | category = "main"
507 | optional = false
508 | python-versions = ">=3.7"
509 | files = [
510 | {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"},
511 | {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"},
512 | ]
513 |
514 | [[package]]
515 | name = "pandas"
516 | version = "1.5.3"
517 | description = "Powerful data structures for data analysis, time series, and statistics"
518 | category = "main"
519 | optional = false
520 | python-versions = ">=3.8"
521 | files = [
522 | {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406"},
523 | {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572"},
524 | {file = "pandas-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996"},
525 | {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354"},
526 | {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23"},
527 | {file = "pandas-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328"},
528 | {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc"},
529 | {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d"},
530 | {file = "pandas-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc"},
531 | {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae"},
532 | {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6"},
533 | {file = "pandas-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003"},
534 | {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813"},
535 | {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31"},
536 | {file = "pandas-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792"},
537 | {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7"},
538 | {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf"},
539 | {file = "pandas-1.5.3-cp38-cp38-win32.whl", hash = "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51"},
540 | {file = "pandas-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373"},
541 | {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa"},
542 | {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee"},
543 | {file = "pandas-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a"},
544 | {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0"},
545 | {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5"},
546 | {file = "pandas-1.5.3-cp39-cp39-win32.whl", hash = "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a"},
547 | {file = "pandas-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9"},
548 | {file = "pandas-1.5.3.tar.gz", hash = "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1"},
549 | ]
550 |
551 | [package.dependencies]
552 | numpy = [
553 | {version = ">=1.20.3", markers = "python_version < \"3.10\""},
554 | {version = ">=1.21.0", markers = "python_version >= \"3.10\""},
555 | {version = ">=1.23.2", markers = "python_version >= \"3.11\""},
556 | ]
557 | python-dateutil = ">=2.8.1"
558 | pytz = ">=2020.1"
559 |
560 | [package.extras]
561 | test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"]
562 |
563 | [[package]]
564 | name = "pillow"
565 | version = "9.4.0"
566 | description = "Python Imaging Library (Fork)"
567 | category = "main"
568 | optional = false
569 | python-versions = ">=3.7"
570 | files = [
571 | {file = "Pillow-9.4.0-1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b4b4e9dda4f4e4c4e6896f93e84a8f0bcca3b059de9ddf67dac3c334b1195e1"},
572 | {file = "Pillow-9.4.0-1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:fb5c1ad6bad98c57482236a21bf985ab0ef42bd51f7ad4e4538e89a997624e12"},
573 | {file = "Pillow-9.4.0-1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:f0caf4a5dcf610d96c3bd32932bfac8aee61c96e60481c2a0ea58da435e25acd"},
574 | {file = "Pillow-9.4.0-1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:3f4cc516e0b264c8d4ccd6b6cbc69a07c6d582d8337df79be1e15a5056b258c9"},
575 | {file = "Pillow-9.4.0-1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b8c2f6eb0df979ee99433d8b3f6d193d9590f735cf12274c108bd954e30ca858"},
576 | {file = "Pillow-9.4.0-1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b70756ec9417c34e097f987b4d8c510975216ad26ba6e57ccb53bc758f490dab"},
577 | {file = "Pillow-9.4.0-1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:43521ce2c4b865d385e78579a082b6ad1166ebed2b1a2293c3be1d68dd7ca3b9"},
578 | {file = "Pillow-9.4.0-2-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:9d9a62576b68cd90f7075876f4e8444487db5eeea0e4df3ba298ee38a8d067b0"},
579 | {file = "Pillow-9.4.0-2-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:87708d78a14d56a990fbf4f9cb350b7d89ee8988705e58e39bdf4d82c149210f"},
580 | {file = "Pillow-9.4.0-2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8a2b5874d17e72dfb80d917213abd55d7e1ed2479f38f001f264f7ce7bae757c"},
581 | {file = "Pillow-9.4.0-2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:83125753a60cfc8c412de5896d10a0a405e0bd88d0470ad82e0869ddf0cb3848"},
582 | {file = "Pillow-9.4.0-2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9e5f94742033898bfe84c93c831a6f552bb629448d4072dd312306bab3bd96f1"},
583 | {file = "Pillow-9.4.0-2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:013016af6b3a12a2f40b704677f8b51f72cb007dac785a9933d5c86a72a7fe33"},
584 | {file = "Pillow-9.4.0-2-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:99d92d148dd03fd19d16175b6d355cc1b01faf80dae93c6c3eb4163709edc0a9"},
585 | {file = "Pillow-9.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:2968c58feca624bb6c8502f9564dd187d0e1389964898f5e9e1fbc8533169157"},
586 | {file = "Pillow-9.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c5c1362c14aee73f50143d74389b2c158707b4abce2cb055b7ad37ce60738d47"},
587 | {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd752c5ff1b4a870b7661234694f24b1d2b9076b8bf337321a814c612665f343"},
588 | {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3049a10261d7f2b6514d35bbb7a4dfc3ece4c4de14ef5876c4b7a23a0e566d"},
589 | {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16a8df99701f9095bea8a6c4b3197da105df6f74e6176c5b410bc2df2fd29a57"},
590 | {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:94cdff45173b1919350601f82d61365e792895e3c3a3443cf99819e6fbf717a5"},
591 | {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ed3e4b4e1e6de75fdc16d3259098de7c6571b1a6cc863b1a49e7d3d53e036070"},
592 | {file = "Pillow-9.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5b2f8a31bd43e0f18172d8ac82347c8f37ef3e0b414431157718aa234991b28"},
593 | {file = "Pillow-9.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:09b89ddc95c248ee788328528e6a2996e09eaccddeeb82a5356e92645733be35"},
594 | {file = "Pillow-9.4.0-cp310-cp310-win32.whl", hash = "sha256:f09598b416ba39a8f489c124447b007fe865f786a89dbfa48bb5cf395693132a"},
595 | {file = "Pillow-9.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6e78171be3fb7941f9910ea15b4b14ec27725865a73c15277bc39f5ca4f8391"},
596 | {file = "Pillow-9.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:3fa1284762aacca6dc97474ee9c16f83990b8eeb6697f2ba17140d54b453e133"},
597 | {file = "Pillow-9.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eaef5d2de3c7e9b21f1e762f289d17b726c2239a42b11e25446abf82b26ac132"},
598 | {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4dfdae195335abb4e89cc9762b2edc524f3c6e80d647a9a81bf81e17e3fb6f0"},
599 | {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6abfb51a82e919e3933eb137e17c4ae9c0475a25508ea88993bb59faf82f3b35"},
600 | {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:451f10ef963918e65b8869e17d67db5e2f4ab40e716ee6ce7129b0cde2876eab"},
601 | {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6663977496d616b618b6cfa43ec86e479ee62b942e1da76a2c3daa1c75933ef4"},
602 | {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:60e7da3a3ad1812c128750fc1bc14a7ceeb8d29f77e0a2356a8fb2aa8925287d"},
603 | {file = "Pillow-9.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:19005a8e58b7c1796bc0167862b1f54a64d3b44ee5d48152b06bb861458bc0f8"},
604 | {file = "Pillow-9.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f715c32e774a60a337b2bb8ad9839b4abf75b267a0f18806f6f4f5f1688c4b5a"},
605 | {file = "Pillow-9.4.0-cp311-cp311-win32.whl", hash = "sha256:b222090c455d6d1a64e6b7bb5f4035c4dff479e22455c9eaa1bdd4c75b52c80c"},
606 | {file = "Pillow-9.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba6612b6548220ff5e9df85261bddc811a057b0b465a1226b39bfb8550616aee"},
607 | {file = "Pillow-9.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5f532a2ad4d174eb73494e7397988e22bf427f91acc8e6ebf5bb10597b49c493"},
608 | {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dd5a9c3091a0f414a963d427f920368e2b6a4c2f7527fdd82cde8ef0bc7a327"},
609 | {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef21af928e807f10bf4141cad4746eee692a0dd3ff56cfb25fce076ec3cc8abe"},
610 | {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:847b114580c5cc9ebaf216dd8c8dbc6b00a3b7ab0131e173d7120e6deade1f57"},
611 | {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:653d7fb2df65efefbcbf81ef5fe5e5be931f1ee4332c2893ca638c9b11a409c4"},
612 | {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:46f39cab8bbf4a384ba7cb0bc8bae7b7062b6a11cfac1ca4bc144dea90d4a9f5"},
613 | {file = "Pillow-9.4.0-cp37-cp37m-win32.whl", hash = "sha256:7ac7594397698f77bce84382929747130765f66406dc2cd8b4ab4da68ade4c6e"},
614 | {file = "Pillow-9.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:46c259e87199041583658457372a183636ae8cd56dbf3f0755e0f376a7f9d0e6"},
615 | {file = "Pillow-9.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:0e51f608da093e5d9038c592b5b575cadc12fd748af1479b5e858045fff955a9"},
616 | {file = "Pillow-9.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:765cb54c0b8724a7c12c55146ae4647e0274a839fb6de7bcba841e04298e1011"},
617 | {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:519e14e2c49fcf7616d6d2cfc5c70adae95682ae20f0395e9280db85e8d6c4df"},
618 | {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d197df5489004db87d90b918033edbeee0bd6df3848a204bca3ff0a903bef837"},
619 | {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0845adc64fe9886db00f5ab68c4a8cd933ab749a87747555cec1c95acea64b0b"},
620 | {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:e1339790c083c5a4de48f688b4841f18df839eb3c9584a770cbd818b33e26d5d"},
621 | {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:a96e6e23f2b79433390273eaf8cc94fec9c6370842e577ab10dabdcc7ea0a66b"},
622 | {file = "Pillow-9.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7cfc287da09f9d2a7ec146ee4d72d6ea1342e770d975e49a8621bf54eaa8f30f"},
623 | {file = "Pillow-9.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d7081c084ceb58278dd3cf81f836bc818978c0ccc770cbbb202125ddabec6628"},
624 | {file = "Pillow-9.4.0-cp38-cp38-win32.whl", hash = "sha256:df41112ccce5d47770a0c13651479fbcd8793f34232a2dd9faeccb75eb5d0d0d"},
625 | {file = "Pillow-9.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:7a21222644ab69ddd9967cfe6f2bb420b460dae4289c9d40ff9a4896e7c35c9a"},
626 | {file = "Pillow-9.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0f3269304c1a7ce82f1759c12ce731ef9b6e95b6df829dccd9fe42912cc48569"},
627 | {file = "Pillow-9.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cb362e3b0976dc994857391b776ddaa8c13c28a16f80ac6522c23d5257156bed"},
628 | {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2e0f87144fcbbe54297cae708c5e7f9da21a4646523456b00cc956bd4c65815"},
629 | {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28676836c7796805914b76b1837a40f76827ee0d5398f72f7dcc634bae7c6264"},
630 | {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0884ba7b515163a1a05440a138adeb722b8a6ae2c2b33aea93ea3118dd3a899e"},
631 | {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:53dcb50fbdc3fb2c55431a9b30caeb2f7027fcd2aeb501459464f0214200a503"},
632 | {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:e8c5cf126889a4de385c02a2c3d3aba4b00f70234bfddae82a5eaa3ee6d5e3e6"},
633 | {file = "Pillow-9.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6c6b1389ed66cdd174d040105123a5a1bc91d0aa7059c7261d20e583b6d8cbd2"},
634 | {file = "Pillow-9.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0dd4c681b82214b36273c18ca7ee87065a50e013112eea7d78c7a1b89a739153"},
635 | {file = "Pillow-9.4.0-cp39-cp39-win32.whl", hash = "sha256:6d9dfb9959a3b0039ee06c1a1a90dc23bac3b430842dcb97908ddde05870601c"},
636 | {file = "Pillow-9.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:54614444887e0d3043557d9dbc697dbb16cfb5a35d672b7a0fcc1ed0cf1c600b"},
637 | {file = "Pillow-9.4.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b9b752ab91e78234941e44abdecc07f1f0d8f51fb62941d32995b8161f68cfe5"},
638 | {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3b56206244dc8711f7e8b7d6cad4663917cd5b2d950799425076681e8766286"},
639 | {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aabdab8ec1e7ca7f1434d042bf8b1e92056245fb179790dc97ed040361f16bfd"},
640 | {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db74f5562c09953b2c5f8ec4b7dfd3f5421f31811e97d1dbc0a7c93d6e3a24df"},
641 | {file = "Pillow-9.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e9d7747847c53a16a729b6ee5e737cf170f7a16611c143d95aa60a109a59c336"},
642 | {file = "Pillow-9.4.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b52ff4f4e002f828ea6483faf4c4e8deea8d743cf801b74910243c58acc6eda3"},
643 | {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:575d8912dca808edd9acd6f7795199332696d3469665ef26163cd090fa1f8bfa"},
644 | {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c4ed2ff6760e98d262e0cc9c9a7f7b8a9f61aa4d47c58835cdaf7b0b8811bb"},
645 | {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e621b0246192d3b9cb1dc62c78cfa4c6f6d2ddc0ec207d43c0dedecb914f152a"},
646 | {file = "Pillow-9.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8f127e7b028900421cad64f51f75c051b628db17fb00e099eb148761eed598c9"},
647 | {file = "Pillow-9.4.0.tar.gz", hash = "sha256:a1c2d7780448eb93fbcc3789bf3916aa5720d942e37945f4056680317f1cd23e"},
648 | ]
649 |
650 | [package.extras]
651 | docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"]
652 | tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
653 |
654 | [[package]]
655 | name = "pluggy"
656 | version = "0.13.1"
657 | description = "plugin and hook calling mechanisms for python"
658 | category = "dev"
659 | optional = false
660 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
661 | files = [
662 | {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
663 | {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
664 | ]
665 |
666 | [package.extras]
667 | dev = ["pre-commit", "tox"]
668 |
669 | [[package]]
670 | name = "protobuf"
671 | version = "3.20.3"
672 | description = "Protocol Buffers"
673 | category = "main"
674 | optional = false
675 | python-versions = ">=3.7"
676 | files = [
677 | {file = "protobuf-3.20.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99"},
678 | {file = "protobuf-3.20.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e"},
679 | {file = "protobuf-3.20.3-cp310-cp310-win32.whl", hash = "sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c"},
680 | {file = "protobuf-3.20.3-cp310-cp310-win_amd64.whl", hash = "sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7"},
681 | {file = "protobuf-3.20.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469"},
682 | {file = "protobuf-3.20.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4"},
683 | {file = "protobuf-3.20.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4"},
684 | {file = "protobuf-3.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454"},
685 | {file = "protobuf-3.20.3-cp37-cp37m-win32.whl", hash = "sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905"},
686 | {file = "protobuf-3.20.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c"},
687 | {file = "protobuf-3.20.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7"},
688 | {file = "protobuf-3.20.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee"},
689 | {file = "protobuf-3.20.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050"},
690 | {file = "protobuf-3.20.3-cp38-cp38-win32.whl", hash = "sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86"},
691 | {file = "protobuf-3.20.3-cp38-cp38-win_amd64.whl", hash = "sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9"},
692 | {file = "protobuf-3.20.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b"},
693 | {file = "protobuf-3.20.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b"},
694 | {file = "protobuf-3.20.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402"},
695 | {file = "protobuf-3.20.3-cp39-cp39-win32.whl", hash = "sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480"},
696 | {file = "protobuf-3.20.3-cp39-cp39-win_amd64.whl", hash = "sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7"},
697 | {file = "protobuf-3.20.3-py2.py3-none-any.whl", hash = "sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db"},
698 | {file = "protobuf-3.20.3.tar.gz", hash = "sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2"},
699 | ]
700 |
701 | [[package]]
702 | name = "py"
703 | version = "1.11.0"
704 | description = "library with cross-python path, ini-parsing, io, code, log facilities"
705 | category = "dev"
706 | optional = false
707 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
708 | files = [
709 | {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
710 | {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
711 | ]
712 |
713 | [[package]]
714 | name = "pyarrow"
715 | version = "11.0.0"
716 | description = "Python library for Apache Arrow"
717 | category = "main"
718 | optional = false
719 | python-versions = ">=3.7"
720 | files = [
721 | {file = "pyarrow-11.0.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:40bb42afa1053c35c749befbe72f6429b7b5f45710e85059cdd534553ebcf4f2"},
722 | {file = "pyarrow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7c28b5f248e08dea3b3e0c828b91945f431f4202f1a9fe84d1012a761324e1ba"},
723 | {file = "pyarrow-11.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a37bc81f6c9435da3c9c1e767324ac3064ffbe110c4e460660c43e144be4ed85"},
724 | {file = "pyarrow-11.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad7c53def8dbbc810282ad308cc46a523ec81e653e60a91c609c2233ae407689"},
725 | {file = "pyarrow-11.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:25aa11c443b934078bfd60ed63e4e2d42461682b5ac10f67275ea21e60e6042c"},
726 | {file = "pyarrow-11.0.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:e217d001e6389b20a6759392a5ec49d670757af80101ee6b5f2c8ff0172e02ca"},
727 | {file = "pyarrow-11.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ad42bb24fc44c48f74f0d8c72a9af16ba9a01a2ccda5739a517aa860fa7e3d56"},
728 | {file = "pyarrow-11.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d942c690ff24a08b07cb3df818f542a90e4d359381fbff71b8f2aea5bf58841"},
729 | {file = "pyarrow-11.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f010ce497ca1b0f17a8243df3048055c0d18dcadbcc70895d5baf8921f753de5"},
730 | {file = "pyarrow-11.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:2f51dc7ca940fdf17893227edb46b6784d37522ce08d21afc56466898cb213b2"},
731 | {file = "pyarrow-11.0.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:1cbcfcbb0e74b4d94f0b7dde447b835a01bc1d16510edb8bb7d6224b9bf5bafc"},
732 | {file = "pyarrow-11.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaee8f79d2a120bf3e032d6d64ad20b3af6f56241b0ffc38d201aebfee879d00"},
733 | {file = "pyarrow-11.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:410624da0708c37e6a27eba321a72f29d277091c8f8d23f72c92bada4092eb5e"},
734 | {file = "pyarrow-11.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2d53ba72917fdb71e3584ffc23ee4fcc487218f8ff29dd6df3a34c5c48fe8c06"},
735 | {file = "pyarrow-11.0.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:f12932e5a6feb5c58192209af1d2607d488cb1d404fbc038ac12ada60327fa34"},
736 | {file = "pyarrow-11.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:41a1451dd895c0b2964b83d91019e46f15b5564c7ecd5dcb812dadd3f05acc97"},
737 | {file = "pyarrow-11.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:becc2344be80e5dce4e1b80b7c650d2fc2061b9eb339045035a1baa34d5b8f1c"},
738 | {file = "pyarrow-11.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f40be0d7381112a398b93c45a7e69f60261e7b0269cc324e9f739ce272f4f70"},
739 | {file = "pyarrow-11.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:362a7c881b32dc6b0eccf83411a97acba2774c10edcec715ccaab5ebf3bb0835"},
740 | {file = "pyarrow-11.0.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:ccbf29a0dadfcdd97632b4f7cca20a966bb552853ba254e874c66934931b9841"},
741 | {file = "pyarrow-11.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e99be85973592051e46412accea31828da324531a060bd4585046a74ba45854"},
742 | {file = "pyarrow-11.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69309be84dcc36422574d19c7d3a30a7ea43804f12552356d1ab2a82a713c418"},
743 | {file = "pyarrow-11.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da93340fbf6f4e2a62815064383605b7ffa3e9eeb320ec839995b1660d69f89b"},
744 | {file = "pyarrow-11.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:caad867121f182d0d3e1a0d36f197df604655d0b466f1bc9bafa903aa95083e4"},
745 | {file = "pyarrow-11.0.0.tar.gz", hash = "sha256:5461c57dbdb211a632a48facb9b39bbeb8a7905ec95d768078525283caef5f6d"},
746 | ]
747 |
748 | [package.dependencies]
749 | numpy = ">=1.16.6"
750 |
751 | [[package]]
752 | name = "pydeck"
753 | version = "0.8.0"
754 | description = "Widget for deck.gl maps"
755 | category = "main"
756 | optional = false
757 | python-versions = ">=3.7"
758 | files = [
759 | {file = "pydeck-0.8.0-py2.py3-none-any.whl", hash = "sha256:a8fa7757c6f24bba033af39db3147cb020eef44012ba7e60d954de187f9ed4d5"},
760 | {file = "pydeck-0.8.0.tar.gz", hash = "sha256:07edde833f7cfcef6749124351195aa7dcd24663d4909fd7898dbd0b6fbc01ec"},
761 | ]
762 |
763 | [package.dependencies]
764 | jinja2 = ">=2.10.1"
765 | numpy = ">=1.16.4"
766 |
767 | [package.extras]
768 | carto = ["pydeck-carto"]
769 | jupyter = ["ipykernel (>=5.1.2)", "ipython (>=5.8.0)", "ipywidgets (>=7,<8)", "traitlets (>=4.3.2)"]
770 |
771 | [[package]]
772 | name = "pygments"
773 | version = "2.14.0"
774 | description = "Pygments is a syntax highlighting package written in Python."
775 | category = "main"
776 | optional = false
777 | python-versions = ">=3.6"
778 | files = [
779 | {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"},
780 | {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"},
781 | ]
782 |
783 | [package.extras]
784 | plugins = ["importlib-metadata"]
785 |
786 | [[package]]
787 | name = "pympler"
788 | version = "1.0.1"
789 | description = "A development tool to measure, monitor and analyze the memory behavior of Python objects."
790 | category = "main"
791 | optional = false
792 | python-versions = ">=3.6"
793 | files = [
794 | {file = "Pympler-1.0.1-py3-none-any.whl", hash = "sha256:d260dda9ae781e1eab6ea15bacb84015849833ba5555f141d2d9b7b7473b307d"},
795 | {file = "Pympler-1.0.1.tar.gz", hash = "sha256:993f1a3599ca3f4fcd7160c7545ad06310c9e12f70174ae7ae8d4e25f6c5d3fa"},
796 | ]
797 |
798 | [[package]]
799 | name = "pyrsistent"
800 | version = "0.19.3"
801 | description = "Persistent/Functional/Immutable data structures"
802 | category = "main"
803 | optional = false
804 | python-versions = ">=3.7"
805 | files = [
806 | {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"},
807 | {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"},
808 | {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"},
809 | {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"},
810 | {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"},
811 | {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"},
812 | {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"},
813 | {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"},
814 | {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"},
815 | {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"},
816 | {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"},
817 | {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"},
818 | {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"},
819 | {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"},
820 | {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"},
821 | {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"},
822 | {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"},
823 | {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"},
824 | {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"},
825 | {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"},
826 | {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"},
827 | {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"},
828 | {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"},
829 | {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"},
830 | {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"},
831 | {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"},
832 | {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"},
833 | ]
834 |
835 | [[package]]
836 | name = "pytest"
837 | version = "6.0.1"
838 | description = "pytest: simple powerful testing with Python"
839 | category = "dev"
840 | optional = false
841 | python-versions = ">=3.5"
842 | files = [
843 | {file = "pytest-6.0.1-py3-none-any.whl", hash = "sha256:8b6007800c53fdacd5a5c192203f4e531eb2a1540ad9c752e052ec0f7143dbad"},
844 | {file = "pytest-6.0.1.tar.gz", hash = "sha256:85228d75db9f45e06e57ef9bf4429267f81ac7c0d742cc9ed63d09886a9fe6f4"},
845 | ]
846 |
847 | [package.dependencies]
848 | atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
849 | attrs = ">=17.4.0"
850 | colorama = {version = "*", markers = "sys_platform == \"win32\""}
851 | iniconfig = "*"
852 | more-itertools = ">=4.0.0"
853 | packaging = "*"
854 | pluggy = ">=0.12,<1.0"
855 | py = ">=1.8.2"
856 | toml = "*"
857 |
858 | [package.extras]
859 | checkqa-mypy = ["mypy (==0.780)"]
860 | testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
861 |
862 | [[package]]
863 | name = "python-dateutil"
864 | version = "2.8.2"
865 | description = "Extensions to the standard Python datetime module"
866 | category = "main"
867 | optional = false
868 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
869 | files = [
870 | {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
871 | {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
872 | ]
873 |
874 | [package.dependencies]
875 | six = ">=1.5"
876 |
877 | [[package]]
878 | name = "pytz"
879 | version = "2022.7.1"
880 | description = "World timezone definitions, modern and historical"
881 | category = "main"
882 | optional = false
883 | python-versions = "*"
884 | files = [
885 | {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"},
886 | {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"},
887 | ]
888 |
889 | [[package]]
890 | name = "pytz-deprecation-shim"
891 | version = "0.1.0.post0"
892 | description = "Shims to make deprecation of pytz easier"
893 | category = "main"
894 | optional = false
895 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
896 | files = [
897 | {file = "pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl", hash = "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6"},
898 | {file = "pytz_deprecation_shim-0.1.0.post0.tar.gz", hash = "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"},
899 | ]
900 |
901 | [package.dependencies]
902 | tzdata = {version = "*", markers = "python_version >= \"3.6\""}
903 |
904 | [[package]]
905 | name = "requests"
906 | version = "2.28.2"
907 | description = "Python HTTP for Humans."
908 | category = "main"
909 | optional = false
910 | python-versions = ">=3.7, <4"
911 | files = [
912 | {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"},
913 | {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"},
914 | ]
915 |
916 | [package.dependencies]
917 | certifi = ">=2017.4.17"
918 | charset-normalizer = ">=2,<4"
919 | idna = ">=2.5,<4"
920 | urllib3 = ">=1.21.1,<1.27"
921 |
922 | [package.extras]
923 | socks = ["PySocks (>=1.5.6,!=1.5.7)"]
924 | use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
925 |
926 | [[package]]
927 | name = "rich"
928 | version = "13.3.2"
929 | description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
930 | category = "main"
931 | optional = false
932 | python-versions = ">=3.7.0"
933 | files = [
934 | {file = "rich-13.3.2-py3-none-any.whl", hash = "sha256:a104f37270bf677148d8acb07d33be1569eeee87e2d1beb286a4e9113caf6f2f"},
935 | {file = "rich-13.3.2.tar.gz", hash = "sha256:91954fe80cfb7985727a467ca98a7618e5dd15178cc2da10f553b36a93859001"},
936 | ]
937 |
938 | [package.dependencies]
939 | markdown-it-py = ">=2.2.0,<3.0.0"
940 | pygments = ">=2.13.0,<3.0.0"
941 |
942 | [package.extras]
943 | jupyter = ["ipywidgets (>=7.5.1,<9)"]
944 |
945 | [[package]]
946 | name = "semver"
947 | version = "2.13.0"
948 | description = "Python helper for Semantic Versioning (http://semver.org/)"
949 | category = "main"
950 | optional = false
951 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
952 | files = [
953 | {file = "semver-2.13.0-py2.py3-none-any.whl", hash = "sha256:ced8b23dceb22134307c1b8abfa523da14198793d9787ac838e70e29e77458d4"},
954 | {file = "semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f"},
955 | ]
956 |
957 | [[package]]
958 | name = "six"
959 | version = "1.16.0"
960 | description = "Python 2 and 3 compatibility utilities"
961 | category = "main"
962 | optional = false
963 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
964 | files = [
965 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
966 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
967 | ]
968 |
969 | [[package]]
970 | name = "smmap"
971 | version = "5.0.0"
972 | description = "A pure Python implementation of a sliding window memory map manager"
973 | category = "main"
974 | optional = false
975 | python-versions = ">=3.6"
976 | files = [
977 | {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"},
978 | {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"},
979 | ]
980 |
981 | [[package]]
982 | name = "streamlit"
983 | version = "1.20.0"
984 | description = "The fastest way to build data apps in Python"
985 | category = "main"
986 | optional = false
987 | python-versions = ">=3.7, !=3.9.7"
988 | files = [
989 | {file = "streamlit-1.20.0-py2.py3-none-any.whl", hash = "sha256:41a544b8dc618ee65726da3ac76149c5b2bf3da7bde6d50625c4f7ec95e6c9e8"},
990 | {file = "streamlit-1.20.0.tar.gz", hash = "sha256:f6e257e033a2532ce9b37c425717a4e885fa4d0e339fa5dcdbbda8d75ec191e9"},
991 | ]
992 |
993 | [package.dependencies]
994 | altair = ">=3.2.0,<5"
995 | blinker = ">=1.0.0"
996 | cachetools = ">=4.0"
997 | click = ">=7.0"
998 | gitpython = "!=3.1.19"
999 | importlib-metadata = ">=1.4"
1000 | numpy = "*"
1001 | packaging = ">=14.1"
1002 | pandas = ">=0.25,<2"
1003 | pillow = ">=6.2.0"
1004 | protobuf = ">=3.12,<4"
1005 | pyarrow = ">=4.0"
1006 | pydeck = ">=0.1.dev5"
1007 | pympler = ">=0.9"
1008 | python-dateutil = "*"
1009 | requests = ">=2.4"
1010 | rich = ">=10.11.0"
1011 | semver = "*"
1012 | toml = "*"
1013 | tornado = ">=6.0.3"
1014 | typing-extensions = ">=3.10.0.0"
1015 | tzlocal = ">=1.1"
1016 | validators = ">=0.2"
1017 | watchdog = {version = "*", markers = "platform_system != \"Darwin\""}
1018 |
1019 | [package.extras]
1020 | snowflake = ["snowflake-snowpark-python"]
1021 |
1022 | [[package]]
1023 | name = "toml"
1024 | version = "0.10.2"
1025 | description = "Python Library for Tom's Obvious, Minimal Language"
1026 | category = "main"
1027 | optional = false
1028 | python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
1029 | files = [
1030 | {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
1031 | {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
1032 | ]
1033 |
1034 | [[package]]
1035 | name = "toolz"
1036 | version = "0.12.0"
1037 | description = "List processing tools and functional utilities"
1038 | category = "main"
1039 | optional = false
1040 | python-versions = ">=3.5"
1041 | files = [
1042 | {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"},
1043 | {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"},
1044 | ]
1045 |
1046 | [[package]]
1047 | name = "tornado"
1048 | version = "6.2"
1049 | description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
1050 | category = "main"
1051 | optional = false
1052 | python-versions = ">= 3.7"
1053 | files = [
1054 | {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"},
1055 | {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"},
1056 | {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"},
1057 | {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"},
1058 | {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"},
1059 | {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"},
1060 | {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"},
1061 | {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"},
1062 | {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"},
1063 | {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"},
1064 | {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"},
1065 | ]
1066 |
1067 | [[package]]
1068 | name = "typing-extensions"
1069 | version = "4.5.0"
1070 | description = "Backported and Experimental Type Hints for Python 3.7+"
1071 | category = "main"
1072 | optional = false
1073 | python-versions = ">=3.7"
1074 | files = [
1075 | {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"},
1076 | {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"},
1077 | ]
1078 |
1079 | [[package]]
1080 | name = "tzdata"
1081 | version = "2022.7"
1082 | description = "Provider of IANA time zone data"
1083 | category = "main"
1084 | optional = false
1085 | python-versions = ">=2"
1086 | files = [
1087 | {file = "tzdata-2022.7-py2.py3-none-any.whl", hash = "sha256:2b88858b0e3120792a3c0635c23daf36a7d7eeeca657c323da299d2094402a0d"},
1088 | {file = "tzdata-2022.7.tar.gz", hash = "sha256:fe5f866eddd8b96e9fcba978f8e503c909b19ea7efda11e52e39494bad3a7bfa"},
1089 | ]
1090 |
1091 | [[package]]
1092 | name = "tzlocal"
1093 | version = "4.2"
1094 | description = "tzinfo object for the local timezone"
1095 | category = "main"
1096 | optional = false
1097 | python-versions = ">=3.6"
1098 | files = [
1099 | {file = "tzlocal-4.2-py3-none-any.whl", hash = "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745"},
1100 | {file = "tzlocal-4.2.tar.gz", hash = "sha256:ee5842fa3a795f023514ac2d801c4a81d1743bbe642e3940143326b3a00addd7"},
1101 | ]
1102 |
1103 | [package.dependencies]
1104 | pytz-deprecation-shim = "*"
1105 | tzdata = {version = "*", markers = "platform_system == \"Windows\""}
1106 |
1107 | [package.extras]
1108 | devenv = ["black", "pyroma", "pytest-cov", "zest.releaser"]
1109 | test = ["pytest (>=4.3)", "pytest-mock (>=3.3)"]
1110 |
1111 | [[package]]
1112 | name = "urllib3"
1113 | version = "1.26.15"
1114 | description = "HTTP library with thread-safe connection pooling, file post, and more."
1115 | category = "main"
1116 | optional = false
1117 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
1118 | files = [
1119 | {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"},
1120 | {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"},
1121 | ]
1122 |
1123 | [package.extras]
1124 | brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
1125 | secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
1126 | socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
1127 |
1128 | [[package]]
1129 | name = "validators"
1130 | version = "0.20.0"
1131 | description = "Python Data Validation for Humans™."
1132 | category = "main"
1133 | optional = false
1134 | python-versions = ">=3.4"
1135 | files = [
1136 | {file = "validators-0.20.0.tar.gz", hash = "sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a"},
1137 | ]
1138 |
1139 | [package.dependencies]
1140 | decorator = ">=3.4.0"
1141 |
1142 | [package.extras]
1143 | test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"]
1144 |
1145 | [[package]]
1146 | name = "watchdog"
1147 | version = "2.3.1"
1148 | description = "Filesystem events monitoring"
1149 | category = "main"
1150 | optional = false
1151 | python-versions = ">=3.6"
1152 | files = [
1153 | {file = "watchdog-2.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1f1200d4ec53b88bf04ab636f9133cb703eb19768a39351cee649de21a33697"},
1154 | {file = "watchdog-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:564e7739abd4bd348aeafbf71cc006b6c0ccda3160c7053c4a53b67d14091d42"},
1155 | {file = "watchdog-2.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:95ad708a9454050a46f741ba5e2f3468655ea22da1114e4c40b8cbdaca572565"},
1156 | {file = "watchdog-2.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a073c91a6ef0dda488087669586768195c3080c66866144880f03445ca23ef16"},
1157 | {file = "watchdog-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa8b028750b43e80eea9946d01925168eeadb488dfdef1d82be4b1e28067f375"},
1158 | {file = "watchdog-2.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:964fd236cd443933268ae49b59706569c8b741073dbfd7ca705492bae9d39aab"},
1159 | {file = "watchdog-2.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:91fd146d723392b3e6eb1ac21f122fcce149a194a2ba0a82c5e4d0ee29cd954c"},
1160 | {file = "watchdog-2.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:efe3252137392a471a2174d721e1037a0e6a5da7beb72a021e662b7000a9903f"},
1161 | {file = "watchdog-2.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:85bf2263290591b7c5fa01140601b64c831be88084de41efbcba6ea289874f44"},
1162 | {file = "watchdog-2.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f2df370cd8e4e18499dd0bfdef476431bcc396108b97195d9448d90924e3131"},
1163 | {file = "watchdog-2.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ea5d86d1bcf4a9d24610aa2f6f25492f441960cf04aed2bd9a97db439b643a7b"},
1164 | {file = "watchdog-2.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6f5d0f7eac86807275eba40b577c671b306f6f335ba63a5c5a348da151aba0fc"},
1165 | {file = "watchdog-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b848c71ef2b15d0ef02f69da8cc120d335cec0ed82a3fa7779e27a5a8527225"},
1166 | {file = "watchdog-2.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0d9878be36d2b9271e3abaa6f4f051b363ff54dbbe7e7df1af3c920e4311ee43"},
1167 | {file = "watchdog-2.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cd61f98cb37143206818cb1786d2438626aa78d682a8f2ecee239055a9771d5"},
1168 | {file = "watchdog-2.3.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3d2dbcf1acd96e7a9c9aefed201c47c8e311075105d94ce5e899f118155709fd"},
1169 | {file = "watchdog-2.3.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03f342a9432fe08107defbe8e405a2cb922c5d00c4c6c168c68b633c64ce6190"},
1170 | {file = "watchdog-2.3.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7a596f9415a378d0339681efc08d2249e48975daae391d58f2e22a3673b977cf"},
1171 | {file = "watchdog-2.3.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:0e1dd6d449267cc7d6935d7fe27ee0426af6ee16578eed93bacb1be9ff824d2d"},
1172 | {file = "watchdog-2.3.1-py3-none-manylinux2014_i686.whl", hash = "sha256:7a1876f660e32027a1a46f8a0fa5747ad4fcf86cb451860eae61a26e102c8c79"},
1173 | {file = "watchdog-2.3.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:2caf77ae137935c1466f8cefd4a3aec7017b6969f425d086e6a528241cba7256"},
1174 | {file = "watchdog-2.3.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:53f3e95081280898d9e4fc51c5c69017715929e4eea1ab45801d5e903dd518ad"},
1175 | {file = "watchdog-2.3.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:9da7acb9af7e4a272089bd2af0171d23e0d6271385c51d4d9bde91fe918c53ed"},
1176 | {file = "watchdog-2.3.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8a4d484e846dcd75e96b96d80d80445302621be40e293bfdf34a631cab3b33dc"},
1177 | {file = "watchdog-2.3.1-py3-none-win32.whl", hash = "sha256:a74155398434937ac2780fd257c045954de5b11b5c52fc844e2199ce3eecf4cf"},
1178 | {file = "watchdog-2.3.1-py3-none-win_amd64.whl", hash = "sha256:5defe4f0918a2a1a4afbe4dbb967f743ac3a93d546ea4674567806375b024adb"},
1179 | {file = "watchdog-2.3.1-py3-none-win_ia64.whl", hash = "sha256:4109cccf214b7e3462e8403ab1e5b17b302ecce6c103eb2fc3afa534a7f27b96"},
1180 | {file = "watchdog-2.3.1.tar.gz", hash = "sha256:d9f9ed26ed22a9d331820a8432c3680707ea8b54121ddcc9dc7d9f2ceeb36906"},
1181 | ]
1182 |
1183 | [package.extras]
1184 | watchmedo = ["PyYAML (>=3.10)"]
1185 |
1186 | [[package]]
1187 | name = "zipp"
1188 | version = "3.15.0"
1189 | description = "Backport of pathlib-compatible object wrapper for zip files"
1190 | category = "main"
1191 | optional = false
1192 | python-versions = ">=3.7"
1193 | files = [
1194 | {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"},
1195 | {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"},
1196 | ]
1197 |
1198 | [package.extras]
1199 | docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
1200 | testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"]
1201 |
1202 | [metadata]
1203 | lock-version = "2.0"
1204 | python-versions = ">=3.9.12,<3.12"
1205 | content-hash = "8c6ced18bb2c06db2f41ee6a2b8f0f12aada7c31a46a4ab94b5deaae17a2f99f"
1206 |
--------------------------------------------------------------------------------
/example/local/pyproject.toml:
--------------------------------------------------------------------------------
1 | [tool.poetry]
2 | name = "streamlit-msal-dashboard"
3 | version = "1.0.1"
4 | description = ""
5 | authors = ["Michael Staal-Olsen"]
6 | packages=[{ include="app"},]
7 |
8 | [tool.poetry.dependencies]
9 | python = ">=3.9.12,<=3.12"
10 | streamlit = "*"
11 | msal-streamlit-authentication="1.0.7"
12 |
13 | [tool.poetry.group.dev.dependencies]
14 | pytest = "6.0.1"
15 |
16 | [build-system]
17 | requires = ["poetry-core>=1.0.0"]
18 | build-backend = "poetry.core.masonry.api"
19 |
--------------------------------------------------------------------------------
/example/ploomber/.env.example:
--------------------------------------------------------------------------------
1 | ENTRA_CLIENT_ID=
2 | ENTRA_TENANT_ID=
3 | ENTRA_REDIRECT_URI=
4 |
--------------------------------------------------------------------------------
/example/ploomber/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | pip-wheel-metadata/
24 | share/python-wheels/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 | MANIFEST
29 |
30 | # PyInstaller
31 | # Usually these files are written by a python script from a template
32 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
33 | *.manifest
34 | *.spec
35 |
36 | # Installer logs
37 | pip-log.txt
38 | pip-delete-this-directory.txt
39 |
40 | # Unit test / coverage reports
41 | htmlcov/
42 | .tox/
43 | .nox/
44 | .coverage
45 | .coverage.*
46 | .cache
47 | nosetests.xml
48 | coverage.xml
49 | *.cover
50 | *.py,cover
51 | .hypothesis/
52 | .pytest_cache/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | target/
76 |
77 | # Jupyter Notebook
78 | .ipynb_checkpoints
79 |
80 | # IPython
81 | profile_default/
82 | ipython_config.py
83 |
84 | # pyenv
85 | .python-version
86 |
87 | # pipenv
88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
91 | # install all needed dependencies.
92 | #Pipfile.lock
93 |
94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95 | __pypackages__/
96 |
97 | # Celery stuff
98 | celerybeat-schedule
99 | celerybeat.pid
100 |
101 | # SageMath parsed files
102 | *.sage.py
103 |
104 | # Environments
105 | .env
106 | .venv
107 | env/
108 | venv/
109 | ENV/
110 | env.bak/
111 | venv.bak/
112 |
113 | # Spyder project settings
114 | .spyderproject
115 | .spyproject
116 |
117 | # Rope project settings
118 | .ropeproject
119 |
120 | # mkdocs documentation
121 | /site
122 |
123 | # mypy
124 | .mypy_cache/
125 | .dmypy.json
126 | dmypy.json
127 |
128 | # Pyre type checker
129 | .pyre/
130 |
--------------------------------------------------------------------------------
/example/ploomber/README.md:
--------------------------------------------------------------------------------
1 | # Deploy Streamlit with MSAL Protection on Ploomber
2 |
3 | This guide walks you through protecting your Streamlit application with Microsoft Authentication Library (MSAL) using Ploomber deployment.
4 |
5 | ## Prerequisites
6 | - An active Azure/Microsoft Entra ID account
7 | - A Ploomber Cloud account
8 |
9 | ## Step 1: Configure Azure/Microsoft Entra ID
10 |
11 | 1. Register a new Single Page Application in [Microsoft Entra ID](https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-spa-app-registration)
12 | 2. During registration:
13 | - For your callback URI, enter your domain or your Ploomber URL (e.g., `https://entra-demo.ploomber.app`. See 2. to know more about Ploomber URL)
14 |
15 |
16 |
17 |
18 |
19 | ## Step 2: Deploy on Ploomber Cloud
20 |
21 | 1. Navigate to [Ploomber Cloud Platform](https://www.platform.ploomber.io/applications/create?utm_medium=github&utm_source=msal)
22 | 2. Click "New" to create a new deployment
23 | 3. Configure the following:
24 | - Upload this folder as a Zip, and choose the Streamlit Deployment
25 | - Application Name: Match the name entered in Entra ID so your URL match
26 | - If no name is provided, a random one will be assigned
27 | - You'll need to deploy once to get your domain in this case, then redeploy after completing all steps
28 | 4. Add the following secrets in the secrets section as shown bellow:
29 | ```
30 | ENTRA_CLIENT_ID=
31 | ENTRA_TENANT_ID=
32 | ENTRA_REDIRECT_URI=https://entra-demo.ploomber.app
33 | ```
34 |
35 |
36 |
37 |
38 |
39 | > [!TIP]
40 | > **Ploomber supports custom domains & subdomains**: you can bring your own and set it up in the
41 | > application settings after the first deployment. If you choose to do so, instead of `https://entra-demo.ploomber.app`,
42 | > enter your custom domain.
43 |
44 | ## Step 3: Deploy and Verify
45 |
46 | 1. Click "CREATE" to deploy your application
47 | 2. Once the URL is up, navigate to your app, and it will be protected
48 |
49 |
50 |
51 |
52 |
53 | ## Ressources:
54 |
55 | - [Ploomber Documentation](https://docs.cloud.ploomber.io/en/latest/intro.html?utm_medium=github&utm_source=msal)
56 | - [Ploomber Community](https://ploomber.io/community/?utm_medium=github&utm_source=msal)
57 |
58 | ## Local Development Setup
59 |
60 | 1. Install the required package:
61 | ```bash
62 | pip install python-dotenv
63 | ```
64 |
65 | 2. Load environment variables at the beginning of your file:
66 | ```python
67 | from dotenv import load_dotenv
68 | load_dotenv()
69 | ```
70 |
71 | > [!IMPORTANT]
72 | > Don't forget to add your `.env` to your `.gitignore`
73 |
--------------------------------------------------------------------------------
/example/ploomber/app.py:
--------------------------------------------------------------------------------
1 | import streamlit as st
2 | import os
3 |
4 | from msal_streamlit_authentication import msal_authentication
5 |
6 | st.title("Streamlit MSAL Anthentication 🔒")
7 |
8 | value = msal_authentication(
9 | auth={
10 | "clientId": os.getenv("ENTRA_CLIENT_ID"),
11 | "authority": f"https://login.microsoftonline.com/{os.getenv('ENTRA_TENANT_ID')}",
12 | "redirectUri": os.getenv("ENTRA_REDIRECT_URI"),
13 | "postLogoutRedirectUri": "/"
14 | },
15 | cache={
16 | "cacheLocation": "sessionStorage",
17 | "storeAuthStateInCookie": False
18 | },
19 | login_request={
20 | "scopes": ["https://graph.microsoft.com/.default"]
21 | },
22 | key="1")
23 |
24 | st.write("Received", value)
25 |
--------------------------------------------------------------------------------
/example/ploomber/requirements.txt:
--------------------------------------------------------------------------------
1 | streamlit
2 | msal-streamlit-authentication==1.0.7
3 |
--------------------------------------------------------------------------------
/msal_streamlit_authentication/__init__.py:
--------------------------------------------------------------------------------
1 | import os
2 | from pathlib import Path
3 | import streamlit.components.v1 as components
4 |
5 |
6 | _USE_WEB_DEV_SERVER = os.getenv("USE_WEB_DEV_SERVER", False)
7 | _WEB_DEV_SERVER_URL = os.getenv("WEB_DEV_SERVER_URL", "http://localhost:5173")
8 | COMPONENT_NAME = "msal_authentication"
9 |
10 | if _USE_WEB_DEV_SERVER:
11 | _component_func = components.declare_component(name=COMPONENT_NAME, url=_WEB_DEV_SERVER_URL)
12 | else:
13 | build_dir = str(Path(__file__).parent / "frontend" / "dist")
14 | _component_func = components.declare_component(name=COMPONENT_NAME, path=build_dir)
15 |
16 |
17 | def msal_authentication(
18 | auth,
19 | cache,
20 | login_request=None,
21 | logout_request=None,
22 | login_button_text="Login",
23 | logout_button_text="Logout",
24 | class_name=None,
25 | html_id=None,
26 | key=None
27 | ):
28 | authenticated_user_profile = _component_func(
29 | auth=auth,
30 | cache=cache,
31 | login_request=login_request,
32 | logout_request=logout_request,
33 | login_button_text=login_button_text,
34 | logout_button_text=logout_button_text,
35 | class_name=class_name,
36 | html_id=html_id,
37 | default=None,
38 | key=str(key)
39 | )
40 | return authenticated_user_profile
41 |
--------------------------------------------------------------------------------
/msal_streamlit_authentication/frontend/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | MSAL Authentication
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/msal_streamlit_authentication/frontend/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "msal-streamlit-component",
3 | "version": "1.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "msal-streamlit-component",
9 | "version": "1.0.0",
10 | "license": "MIT",
11 | "dependencies": {
12 | "@azure/msal-browser": "^3.26.1",
13 | "react": "^18.3.1",
14 | "react-dom": "^18.3.1",
15 | "streamlit-component-lib": "^2.0.0"
16 | },
17 | "devDependencies": {
18 | "@types/react": "^18.3.12",
19 | "@types/react-dom": "^18.3.1",
20 | "@vitejs/plugin-react": "^4.3.3",
21 | "typescript": "^5.6.3",
22 | "vite": "^5.4.10"
23 | }
24 | },
25 | "node_modules/@ampproject/remapping": {
26 | "version": "2.3.0",
27 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
28 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
29 | "dev": true,
30 | "dependencies": {
31 | "@jridgewell/gen-mapping": "^0.3.5",
32 | "@jridgewell/trace-mapping": "^0.3.24"
33 | },
34 | "engines": {
35 | "node": ">=6.0.0"
36 | }
37 | },
38 | "node_modules/@azure/msal-browser": {
39 | "version": "3.26.1",
40 | "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.26.1.tgz",
41 | "integrity": "sha512-y78sr9g61aCAH9fcLO1um+oHFXc1/5Ap88RIsUSuzkm0BHzFnN+PXGaQeuM1h5Qf5dTnWNOd6JqkskkMPAhh7Q==",
42 | "dependencies": {
43 | "@azure/msal-common": "14.15.0"
44 | },
45 | "engines": {
46 | "node": ">=0.8.0"
47 | }
48 | },
49 | "node_modules/@azure/msal-common": {
50 | "version": "14.15.0",
51 | "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.15.0.tgz",
52 | "integrity": "sha512-ImAQHxmpMneJ/4S8BRFhjt1MZ3bppmpRPYYNyzeQPeFN288YKbb8TmmISQEbtfkQ1BPASvYZU5doIZOPBAqENQ==",
53 | "engines": {
54 | "node": ">=0.8.0"
55 | }
56 | },
57 | "node_modules/@babel/code-frame": {
58 | "version": "7.26.0",
59 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.0.tgz",
60 | "integrity": "sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==",
61 | "dev": true,
62 | "dependencies": {
63 | "@babel/helper-validator-identifier": "^7.25.9",
64 | "js-tokens": "^4.0.0",
65 | "picocolors": "^1.0.0"
66 | },
67 | "engines": {
68 | "node": ">=6.9.0"
69 | }
70 | },
71 | "node_modules/@babel/compat-data": {
72 | "version": "7.26.0",
73 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.0.tgz",
74 | "integrity": "sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==",
75 | "dev": true,
76 | "engines": {
77 | "node": ">=6.9.0"
78 | }
79 | },
80 | "node_modules/@babel/core": {
81 | "version": "7.26.0",
82 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz",
83 | "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==",
84 | "dev": true,
85 | "dependencies": {
86 | "@ampproject/remapping": "^2.2.0",
87 | "@babel/code-frame": "^7.26.0",
88 | "@babel/generator": "^7.26.0",
89 | "@babel/helper-compilation-targets": "^7.25.9",
90 | "@babel/helper-module-transforms": "^7.26.0",
91 | "@babel/helpers": "^7.26.0",
92 | "@babel/parser": "^7.26.0",
93 | "@babel/template": "^7.25.9",
94 | "@babel/traverse": "^7.25.9",
95 | "@babel/types": "^7.26.0",
96 | "convert-source-map": "^2.0.0",
97 | "debug": "^4.1.0",
98 | "gensync": "^1.0.0-beta.2",
99 | "json5": "^2.2.3",
100 | "semver": "^6.3.1"
101 | },
102 | "engines": {
103 | "node": ">=6.9.0"
104 | },
105 | "funding": {
106 | "type": "opencollective",
107 | "url": "https://opencollective.com/babel"
108 | }
109 | },
110 | "node_modules/@babel/generator": {
111 | "version": "7.26.0",
112 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.0.tgz",
113 | "integrity": "sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==",
114 | "dev": true,
115 | "dependencies": {
116 | "@babel/parser": "^7.26.0",
117 | "@babel/types": "^7.26.0",
118 | "@jridgewell/gen-mapping": "^0.3.5",
119 | "@jridgewell/trace-mapping": "^0.3.25",
120 | "jsesc": "^3.0.2"
121 | },
122 | "engines": {
123 | "node": ">=6.9.0"
124 | }
125 | },
126 | "node_modules/@babel/helper-compilation-targets": {
127 | "version": "7.25.9",
128 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
129 | "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
130 | "dev": true,
131 | "dependencies": {
132 | "@babel/compat-data": "^7.25.9",
133 | "@babel/helper-validator-option": "^7.25.9",
134 | "browserslist": "^4.24.0",
135 | "lru-cache": "^5.1.1",
136 | "semver": "^6.3.1"
137 | },
138 | "engines": {
139 | "node": ">=6.9.0"
140 | }
141 | },
142 | "node_modules/@babel/helper-module-imports": {
143 | "version": "7.25.9",
144 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
145 | "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
146 | "dev": true,
147 | "dependencies": {
148 | "@babel/traverse": "^7.25.9",
149 | "@babel/types": "^7.25.9"
150 | },
151 | "engines": {
152 | "node": ">=6.9.0"
153 | }
154 | },
155 | "node_modules/@babel/helper-module-transforms": {
156 | "version": "7.26.0",
157 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
158 | "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
159 | "dev": true,
160 | "dependencies": {
161 | "@babel/helper-module-imports": "^7.25.9",
162 | "@babel/helper-validator-identifier": "^7.25.9",
163 | "@babel/traverse": "^7.25.9"
164 | },
165 | "engines": {
166 | "node": ">=6.9.0"
167 | },
168 | "peerDependencies": {
169 | "@babel/core": "^7.0.0"
170 | }
171 | },
172 | "node_modules/@babel/helper-plugin-utils": {
173 | "version": "7.25.9",
174 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
175 | "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==",
176 | "dev": true,
177 | "engines": {
178 | "node": ">=6.9.0"
179 | }
180 | },
181 | "node_modules/@babel/helper-string-parser": {
182 | "version": "7.25.9",
183 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
184 | "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
185 | "dev": true,
186 | "engines": {
187 | "node": ">=6.9.0"
188 | }
189 | },
190 | "node_modules/@babel/helper-validator-identifier": {
191 | "version": "7.25.9",
192 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
193 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
194 | "dev": true,
195 | "engines": {
196 | "node": ">=6.9.0"
197 | }
198 | },
199 | "node_modules/@babel/helper-validator-option": {
200 | "version": "7.25.9",
201 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
202 | "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
203 | "dev": true,
204 | "engines": {
205 | "node": ">=6.9.0"
206 | }
207 | },
208 | "node_modules/@babel/helpers": {
209 | "version": "7.26.0",
210 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz",
211 | "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
212 | "dev": true,
213 | "dependencies": {
214 | "@babel/template": "^7.25.9",
215 | "@babel/types": "^7.26.0"
216 | },
217 | "engines": {
218 | "node": ">=6.9.0"
219 | }
220 | },
221 | "node_modules/@babel/parser": {
222 | "version": "7.26.1",
223 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.1.tgz",
224 | "integrity": "sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==",
225 | "dev": true,
226 | "dependencies": {
227 | "@babel/types": "^7.26.0"
228 | },
229 | "bin": {
230 | "parser": "bin/babel-parser.js"
231 | },
232 | "engines": {
233 | "node": ">=6.0.0"
234 | }
235 | },
236 | "node_modules/@babel/plugin-transform-react-jsx-self": {
237 | "version": "7.25.9",
238 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz",
239 | "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==",
240 | "dev": true,
241 | "dependencies": {
242 | "@babel/helper-plugin-utils": "^7.25.9"
243 | },
244 | "engines": {
245 | "node": ">=6.9.0"
246 | },
247 | "peerDependencies": {
248 | "@babel/core": "^7.0.0-0"
249 | }
250 | },
251 | "node_modules/@babel/plugin-transform-react-jsx-source": {
252 | "version": "7.25.9",
253 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz",
254 | "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==",
255 | "dev": true,
256 | "dependencies": {
257 | "@babel/helper-plugin-utils": "^7.25.9"
258 | },
259 | "engines": {
260 | "node": ">=6.9.0"
261 | },
262 | "peerDependencies": {
263 | "@babel/core": "^7.0.0-0"
264 | }
265 | },
266 | "node_modules/@babel/template": {
267 | "version": "7.25.9",
268 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz",
269 | "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==",
270 | "dev": true,
271 | "dependencies": {
272 | "@babel/code-frame": "^7.25.9",
273 | "@babel/parser": "^7.25.9",
274 | "@babel/types": "^7.25.9"
275 | },
276 | "engines": {
277 | "node": ">=6.9.0"
278 | }
279 | },
280 | "node_modules/@babel/traverse": {
281 | "version": "7.25.9",
282 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz",
283 | "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==",
284 | "dev": true,
285 | "dependencies": {
286 | "@babel/code-frame": "^7.25.9",
287 | "@babel/generator": "^7.25.9",
288 | "@babel/parser": "^7.25.9",
289 | "@babel/template": "^7.25.9",
290 | "@babel/types": "^7.25.9",
291 | "debug": "^4.3.1",
292 | "globals": "^11.1.0"
293 | },
294 | "engines": {
295 | "node": ">=6.9.0"
296 | }
297 | },
298 | "node_modules/@babel/types": {
299 | "version": "7.26.0",
300 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
301 | "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
302 | "dev": true,
303 | "dependencies": {
304 | "@babel/helper-string-parser": "^7.25.9",
305 | "@babel/helper-validator-identifier": "^7.25.9"
306 | },
307 | "engines": {
308 | "node": ">=6.9.0"
309 | }
310 | },
311 | "node_modules/@esbuild/aix-ppc64": {
312 | "version": "0.21.5",
313 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
314 | "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
315 | "cpu": [
316 | "ppc64"
317 | ],
318 | "dev": true,
319 | "optional": true,
320 | "os": [
321 | "aix"
322 | ],
323 | "engines": {
324 | "node": ">=12"
325 | }
326 | },
327 | "node_modules/@esbuild/android-arm": {
328 | "version": "0.21.5",
329 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
330 | "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
331 | "cpu": [
332 | "arm"
333 | ],
334 | "dev": true,
335 | "optional": true,
336 | "os": [
337 | "android"
338 | ],
339 | "engines": {
340 | "node": ">=12"
341 | }
342 | },
343 | "node_modules/@esbuild/android-arm64": {
344 | "version": "0.21.5",
345 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
346 | "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
347 | "cpu": [
348 | "arm64"
349 | ],
350 | "dev": true,
351 | "optional": true,
352 | "os": [
353 | "android"
354 | ],
355 | "engines": {
356 | "node": ">=12"
357 | }
358 | },
359 | "node_modules/@esbuild/android-x64": {
360 | "version": "0.21.5",
361 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
362 | "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
363 | "cpu": [
364 | "x64"
365 | ],
366 | "dev": true,
367 | "optional": true,
368 | "os": [
369 | "android"
370 | ],
371 | "engines": {
372 | "node": ">=12"
373 | }
374 | },
375 | "node_modules/@esbuild/darwin-arm64": {
376 | "version": "0.21.5",
377 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
378 | "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
379 | "cpu": [
380 | "arm64"
381 | ],
382 | "dev": true,
383 | "optional": true,
384 | "os": [
385 | "darwin"
386 | ],
387 | "engines": {
388 | "node": ">=12"
389 | }
390 | },
391 | "node_modules/@esbuild/darwin-x64": {
392 | "version": "0.21.5",
393 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
394 | "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
395 | "cpu": [
396 | "x64"
397 | ],
398 | "dev": true,
399 | "optional": true,
400 | "os": [
401 | "darwin"
402 | ],
403 | "engines": {
404 | "node": ">=12"
405 | }
406 | },
407 | "node_modules/@esbuild/freebsd-arm64": {
408 | "version": "0.21.5",
409 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
410 | "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
411 | "cpu": [
412 | "arm64"
413 | ],
414 | "dev": true,
415 | "optional": true,
416 | "os": [
417 | "freebsd"
418 | ],
419 | "engines": {
420 | "node": ">=12"
421 | }
422 | },
423 | "node_modules/@esbuild/freebsd-x64": {
424 | "version": "0.21.5",
425 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
426 | "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
427 | "cpu": [
428 | "x64"
429 | ],
430 | "dev": true,
431 | "optional": true,
432 | "os": [
433 | "freebsd"
434 | ],
435 | "engines": {
436 | "node": ">=12"
437 | }
438 | },
439 | "node_modules/@esbuild/linux-arm": {
440 | "version": "0.21.5",
441 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
442 | "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
443 | "cpu": [
444 | "arm"
445 | ],
446 | "dev": true,
447 | "optional": true,
448 | "os": [
449 | "linux"
450 | ],
451 | "engines": {
452 | "node": ">=12"
453 | }
454 | },
455 | "node_modules/@esbuild/linux-arm64": {
456 | "version": "0.21.5",
457 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
458 | "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
459 | "cpu": [
460 | "arm64"
461 | ],
462 | "dev": true,
463 | "optional": true,
464 | "os": [
465 | "linux"
466 | ],
467 | "engines": {
468 | "node": ">=12"
469 | }
470 | },
471 | "node_modules/@esbuild/linux-ia32": {
472 | "version": "0.21.5",
473 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
474 | "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
475 | "cpu": [
476 | "ia32"
477 | ],
478 | "dev": true,
479 | "optional": true,
480 | "os": [
481 | "linux"
482 | ],
483 | "engines": {
484 | "node": ">=12"
485 | }
486 | },
487 | "node_modules/@esbuild/linux-loong64": {
488 | "version": "0.21.5",
489 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
490 | "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
491 | "cpu": [
492 | "loong64"
493 | ],
494 | "dev": true,
495 | "optional": true,
496 | "os": [
497 | "linux"
498 | ],
499 | "engines": {
500 | "node": ">=12"
501 | }
502 | },
503 | "node_modules/@esbuild/linux-mips64el": {
504 | "version": "0.21.5",
505 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
506 | "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
507 | "cpu": [
508 | "mips64el"
509 | ],
510 | "dev": true,
511 | "optional": true,
512 | "os": [
513 | "linux"
514 | ],
515 | "engines": {
516 | "node": ">=12"
517 | }
518 | },
519 | "node_modules/@esbuild/linux-ppc64": {
520 | "version": "0.21.5",
521 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
522 | "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
523 | "cpu": [
524 | "ppc64"
525 | ],
526 | "dev": true,
527 | "optional": true,
528 | "os": [
529 | "linux"
530 | ],
531 | "engines": {
532 | "node": ">=12"
533 | }
534 | },
535 | "node_modules/@esbuild/linux-riscv64": {
536 | "version": "0.21.5",
537 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
538 | "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
539 | "cpu": [
540 | "riscv64"
541 | ],
542 | "dev": true,
543 | "optional": true,
544 | "os": [
545 | "linux"
546 | ],
547 | "engines": {
548 | "node": ">=12"
549 | }
550 | },
551 | "node_modules/@esbuild/linux-s390x": {
552 | "version": "0.21.5",
553 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
554 | "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
555 | "cpu": [
556 | "s390x"
557 | ],
558 | "dev": true,
559 | "optional": true,
560 | "os": [
561 | "linux"
562 | ],
563 | "engines": {
564 | "node": ">=12"
565 | }
566 | },
567 | "node_modules/@esbuild/linux-x64": {
568 | "version": "0.21.5",
569 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
570 | "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
571 | "cpu": [
572 | "x64"
573 | ],
574 | "dev": true,
575 | "optional": true,
576 | "os": [
577 | "linux"
578 | ],
579 | "engines": {
580 | "node": ">=12"
581 | }
582 | },
583 | "node_modules/@esbuild/netbsd-x64": {
584 | "version": "0.21.5",
585 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
586 | "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
587 | "cpu": [
588 | "x64"
589 | ],
590 | "dev": true,
591 | "optional": true,
592 | "os": [
593 | "netbsd"
594 | ],
595 | "engines": {
596 | "node": ">=12"
597 | }
598 | },
599 | "node_modules/@esbuild/openbsd-x64": {
600 | "version": "0.21.5",
601 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
602 | "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
603 | "cpu": [
604 | "x64"
605 | ],
606 | "dev": true,
607 | "optional": true,
608 | "os": [
609 | "openbsd"
610 | ],
611 | "engines": {
612 | "node": ">=12"
613 | }
614 | },
615 | "node_modules/@esbuild/sunos-x64": {
616 | "version": "0.21.5",
617 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
618 | "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
619 | "cpu": [
620 | "x64"
621 | ],
622 | "dev": true,
623 | "optional": true,
624 | "os": [
625 | "sunos"
626 | ],
627 | "engines": {
628 | "node": ">=12"
629 | }
630 | },
631 | "node_modules/@esbuild/win32-arm64": {
632 | "version": "0.21.5",
633 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
634 | "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
635 | "cpu": [
636 | "arm64"
637 | ],
638 | "dev": true,
639 | "optional": true,
640 | "os": [
641 | "win32"
642 | ],
643 | "engines": {
644 | "node": ">=12"
645 | }
646 | },
647 | "node_modules/@esbuild/win32-ia32": {
648 | "version": "0.21.5",
649 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
650 | "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
651 | "cpu": [
652 | "ia32"
653 | ],
654 | "dev": true,
655 | "optional": true,
656 | "os": [
657 | "win32"
658 | ],
659 | "engines": {
660 | "node": ">=12"
661 | }
662 | },
663 | "node_modules/@esbuild/win32-x64": {
664 | "version": "0.21.5",
665 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
666 | "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
667 | "cpu": [
668 | "x64"
669 | ],
670 | "dev": true,
671 | "optional": true,
672 | "os": [
673 | "win32"
674 | ],
675 | "engines": {
676 | "node": ">=12"
677 | }
678 | },
679 | "node_modules/@jridgewell/gen-mapping": {
680 | "version": "0.3.5",
681 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
682 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
683 | "dev": true,
684 | "dependencies": {
685 | "@jridgewell/set-array": "^1.2.1",
686 | "@jridgewell/sourcemap-codec": "^1.4.10",
687 | "@jridgewell/trace-mapping": "^0.3.24"
688 | },
689 | "engines": {
690 | "node": ">=6.0.0"
691 | }
692 | },
693 | "node_modules/@jridgewell/resolve-uri": {
694 | "version": "3.1.2",
695 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
696 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
697 | "dev": true,
698 | "engines": {
699 | "node": ">=6.0.0"
700 | }
701 | },
702 | "node_modules/@jridgewell/set-array": {
703 | "version": "1.2.1",
704 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
705 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
706 | "dev": true,
707 | "engines": {
708 | "node": ">=6.0.0"
709 | }
710 | },
711 | "node_modules/@jridgewell/sourcemap-codec": {
712 | "version": "1.5.0",
713 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
714 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
715 | "dev": true
716 | },
717 | "node_modules/@jridgewell/trace-mapping": {
718 | "version": "0.3.25",
719 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
720 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
721 | "dev": true,
722 | "dependencies": {
723 | "@jridgewell/resolve-uri": "^3.1.0",
724 | "@jridgewell/sourcemap-codec": "^1.4.14"
725 | }
726 | },
727 | "node_modules/@rollup/rollup-android-arm-eabi": {
728 | "version": "4.24.2",
729 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.2.tgz",
730 | "integrity": "sha512-ufoveNTKDg9t/b7nqI3lwbCG/9IJMhADBNjjz/Jn6LxIZxD7T5L8l2uO/wD99945F1Oo8FvgbbZJRguyk/BdzA==",
731 | "cpu": [
732 | "arm"
733 | ],
734 | "dev": true,
735 | "optional": true,
736 | "os": [
737 | "android"
738 | ]
739 | },
740 | "node_modules/@rollup/rollup-android-arm64": {
741 | "version": "4.24.2",
742 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.2.tgz",
743 | "integrity": "sha512-iZoYCiJz3Uek4NI0J06/ZxUgwAfNzqltK0MptPDO4OR0a88R4h0DSELMsflS6ibMCJ4PnLvq8f7O1d7WexUvIA==",
744 | "cpu": [
745 | "arm64"
746 | ],
747 | "dev": true,
748 | "optional": true,
749 | "os": [
750 | "android"
751 | ]
752 | },
753 | "node_modules/@rollup/rollup-darwin-arm64": {
754 | "version": "4.24.2",
755 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.2.tgz",
756 | "integrity": "sha512-/UhrIxobHYCBfhi5paTkUDQ0w+jckjRZDZ1kcBL132WeHZQ6+S5v9jQPVGLVrLbNUebdIRpIt00lQ+4Z7ys4Rg==",
757 | "cpu": [
758 | "arm64"
759 | ],
760 | "dev": true,
761 | "optional": true,
762 | "os": [
763 | "darwin"
764 | ]
765 | },
766 | "node_modules/@rollup/rollup-darwin-x64": {
767 | "version": "4.24.2",
768 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.2.tgz",
769 | "integrity": "sha512-1F/jrfhxJtWILusgx63WeTvGTwE4vmsT9+e/z7cZLKU8sBMddwqw3UV5ERfOV+H1FuRK3YREZ46J4Gy0aP3qDA==",
770 | "cpu": [
771 | "x64"
772 | ],
773 | "dev": true,
774 | "optional": true,
775 | "os": [
776 | "darwin"
777 | ]
778 | },
779 | "node_modules/@rollup/rollup-freebsd-arm64": {
780 | "version": "4.24.2",
781 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.2.tgz",
782 | "integrity": "sha512-1YWOpFcGuC6iGAS4EI+o3BV2/6S0H+m9kFOIlyFtp4xIX5rjSnL3AwbTBxROX0c8yWtiWM7ZI6mEPTI7VkSpZw==",
783 | "cpu": [
784 | "arm64"
785 | ],
786 | "dev": true,
787 | "optional": true,
788 | "os": [
789 | "freebsd"
790 | ]
791 | },
792 | "node_modules/@rollup/rollup-freebsd-x64": {
793 | "version": "4.24.2",
794 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.2.tgz",
795 | "integrity": "sha512-3qAqTewYrCdnOD9Gl9yvPoAoFAVmPJsBvleabvx4bnu1Kt6DrB2OALeRVag7BdWGWLhP1yooeMLEi6r2nYSOjg==",
796 | "cpu": [
797 | "x64"
798 | ],
799 | "dev": true,
800 | "optional": true,
801 | "os": [
802 | "freebsd"
803 | ]
804 | },
805 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
806 | "version": "4.24.2",
807 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.2.tgz",
808 | "integrity": "sha512-ArdGtPHjLqWkqQuoVQ6a5UC5ebdX8INPuJuJNWRe0RGa/YNhVvxeWmCTFQ7LdmNCSUzVZzxAvUznKaYx645Rig==",
809 | "cpu": [
810 | "arm"
811 | ],
812 | "dev": true,
813 | "optional": true,
814 | "os": [
815 | "linux"
816 | ]
817 | },
818 | "node_modules/@rollup/rollup-linux-arm-musleabihf": {
819 | "version": "4.24.2",
820 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.2.tgz",
821 | "integrity": "sha512-B6UHHeNnnih8xH6wRKB0mOcJGvjZTww1FV59HqJoTJ5da9LCG6R4SEBt6uPqzlawv1LoEXSS0d4fBlHNWl6iYw==",
822 | "cpu": [
823 | "arm"
824 | ],
825 | "dev": true,
826 | "optional": true,
827 | "os": [
828 | "linux"
829 | ]
830 | },
831 | "node_modules/@rollup/rollup-linux-arm64-gnu": {
832 | "version": "4.24.2",
833 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.2.tgz",
834 | "integrity": "sha512-kr3gqzczJjSAncwOS6i7fpb4dlqcvLidqrX5hpGBIM1wtt0QEVtf4wFaAwVv8QygFU8iWUMYEoJZWuWxyua4GQ==",
835 | "cpu": [
836 | "arm64"
837 | ],
838 | "dev": true,
839 | "optional": true,
840 | "os": [
841 | "linux"
842 | ]
843 | },
844 | "node_modules/@rollup/rollup-linux-arm64-musl": {
845 | "version": "4.24.2",
846 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.2.tgz",
847 | "integrity": "sha512-TDdHLKCWgPuq9vQcmyLrhg/bgbOvIQ8rtWQK7MRxJ9nvaxKx38NvY7/Lo6cYuEnNHqf6rMqnivOIPIQt6H2AoA==",
848 | "cpu": [
849 | "arm64"
850 | ],
851 | "dev": true,
852 | "optional": true,
853 | "os": [
854 | "linux"
855 | ]
856 | },
857 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
858 | "version": "4.24.2",
859 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.2.tgz",
860 | "integrity": "sha512-xv9vS648T3X4AxFFZGWeB5Dou8ilsv4VVqJ0+loOIgDO20zIhYfDLkk5xoQiej2RiSQkld9ijF/fhLeonrz2mw==",
861 | "cpu": [
862 | "ppc64"
863 | ],
864 | "dev": true,
865 | "optional": true,
866 | "os": [
867 | "linux"
868 | ]
869 | },
870 | "node_modules/@rollup/rollup-linux-riscv64-gnu": {
871 | "version": "4.24.2",
872 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.2.tgz",
873 | "integrity": "sha512-tbtXwnofRoTt223WUZYiUnbxhGAOVul/3StZ947U4A5NNjnQJV5irKMm76G0LGItWs6y+SCjUn/Q0WaMLkEskg==",
874 | "cpu": [
875 | "riscv64"
876 | ],
877 | "dev": true,
878 | "optional": true,
879 | "os": [
880 | "linux"
881 | ]
882 | },
883 | "node_modules/@rollup/rollup-linux-s390x-gnu": {
884 | "version": "4.24.2",
885 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.2.tgz",
886 | "integrity": "sha512-gc97UebApwdsSNT3q79glOSPdfwgwj5ELuiyuiMY3pEWMxeVqLGKfpDFoum4ujivzxn6veUPzkGuSYoh5deQ2Q==",
887 | "cpu": [
888 | "s390x"
889 | ],
890 | "dev": true,
891 | "optional": true,
892 | "os": [
893 | "linux"
894 | ]
895 | },
896 | "node_modules/@rollup/rollup-linux-x64-gnu": {
897 | "version": "4.24.2",
898 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.2.tgz",
899 | "integrity": "sha512-jOG/0nXb3z+EM6SioY8RofqqmZ+9NKYvJ6QQaa9Mvd3RQxlH68/jcB/lpyVt4lCiqr04IyaC34NzhUqcXbB5FQ==",
900 | "cpu": [
901 | "x64"
902 | ],
903 | "dev": true,
904 | "optional": true,
905 | "os": [
906 | "linux"
907 | ]
908 | },
909 | "node_modules/@rollup/rollup-linux-x64-musl": {
910 | "version": "4.24.2",
911 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.2.tgz",
912 | "integrity": "sha512-XAo7cJec80NWx9LlZFEJQxqKOMz/lX3geWs2iNT5CHIERLFfd90f3RYLLjiCBm1IMaQ4VOX/lTC9lWfzzQm14Q==",
913 | "cpu": [
914 | "x64"
915 | ],
916 | "dev": true,
917 | "optional": true,
918 | "os": [
919 | "linux"
920 | ]
921 | },
922 | "node_modules/@rollup/rollup-win32-arm64-msvc": {
923 | "version": "4.24.2",
924 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.2.tgz",
925 | "integrity": "sha512-A+JAs4+EhsTjnPQvo9XY/DC0ztaws3vfqzrMNMKlwQXuniBKOIIvAAI8M0fBYiTCxQnElYu7mLk7JrhlQ+HeOw==",
926 | "cpu": [
927 | "arm64"
928 | ],
929 | "dev": true,
930 | "optional": true,
931 | "os": [
932 | "win32"
933 | ]
934 | },
935 | "node_modules/@rollup/rollup-win32-ia32-msvc": {
936 | "version": "4.24.2",
937 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.2.tgz",
938 | "integrity": "sha512-ZhcrakbqA1SCiJRMKSU64AZcYzlZ/9M5LaYil9QWxx9vLnkQ9Vnkve17Qn4SjlipqIIBFKjBES6Zxhnvh0EAEw==",
939 | "cpu": [
940 | "ia32"
941 | ],
942 | "dev": true,
943 | "optional": true,
944 | "os": [
945 | "win32"
946 | ]
947 | },
948 | "node_modules/@rollup/rollup-win32-x64-msvc": {
949 | "version": "4.24.2",
950 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.2.tgz",
951 | "integrity": "sha512-2mLH46K1u3r6uwc95hU+OR9q/ggYMpnS7pSp83Ece1HUQgF9Nh/QwTK5rcgbFnV9j+08yBrU5sA/P0RK2MSBNA==",
952 | "cpu": [
953 | "x64"
954 | ],
955 | "dev": true,
956 | "optional": true,
957 | "os": [
958 | "win32"
959 | ]
960 | },
961 | "node_modules/@types/babel__core": {
962 | "version": "7.20.5",
963 | "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
964 | "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
965 | "dev": true,
966 | "dependencies": {
967 | "@babel/parser": "^7.20.7",
968 | "@babel/types": "^7.20.7",
969 | "@types/babel__generator": "*",
970 | "@types/babel__template": "*",
971 | "@types/babel__traverse": "*"
972 | }
973 | },
974 | "node_modules/@types/babel__generator": {
975 | "version": "7.6.8",
976 | "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
977 | "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
978 | "dev": true,
979 | "dependencies": {
980 | "@babel/types": "^7.0.0"
981 | }
982 | },
983 | "node_modules/@types/babel__template": {
984 | "version": "7.4.4",
985 | "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
986 | "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
987 | "dev": true,
988 | "dependencies": {
989 | "@babel/parser": "^7.1.0",
990 | "@babel/types": "^7.0.0"
991 | }
992 | },
993 | "node_modules/@types/babel__traverse": {
994 | "version": "7.20.6",
995 | "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
996 | "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
997 | "dev": true,
998 | "dependencies": {
999 | "@babel/types": "^7.20.7"
1000 | }
1001 | },
1002 | "node_modules/@types/command-line-args": {
1003 | "version": "5.2.0",
1004 | "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz",
1005 | "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA=="
1006 | },
1007 | "node_modules/@types/command-line-usage": {
1008 | "version": "5.0.2",
1009 | "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz",
1010 | "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg=="
1011 | },
1012 | "node_modules/@types/estree": {
1013 | "version": "1.0.6",
1014 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
1015 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
1016 | "dev": true
1017 | },
1018 | "node_modules/@types/flatbuffers": {
1019 | "version": "1.10.3",
1020 | "resolved": "https://registry.npmjs.org/@types/flatbuffers/-/flatbuffers-1.10.3.tgz",
1021 | "integrity": "sha512-kwJQsAROanCiMXSLjcTLmYVBIJ9Qyuqs92SaDIcj2EII2KnDgZbiU7it1Z/JfZd1gmxw/lAahMysQ6ZM+j3Ryw=="
1022 | },
1023 | "node_modules/@types/node": {
1024 | "version": "18.7.23",
1025 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz",
1026 | "integrity": "sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg=="
1027 | },
1028 | "node_modules/@types/pad-left": {
1029 | "version": "2.1.1",
1030 | "resolved": "https://registry.npmjs.org/@types/pad-left/-/pad-left-2.1.1.tgz",
1031 | "integrity": "sha512-Xd22WCRBydkGSApl5Bw0PhAOHKSVjNL3E3AwzKaps96IMraPqy5BvZIsBVK6JLwdybUzjHnuWVwpDd0JjTfHXA=="
1032 | },
1033 | "node_modules/@types/prop-types": {
1034 | "version": "15.7.5",
1035 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
1036 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
1037 | "dev": true
1038 | },
1039 | "node_modules/@types/react": {
1040 | "version": "18.3.12",
1041 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz",
1042 | "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==",
1043 | "dev": true,
1044 | "dependencies": {
1045 | "@types/prop-types": "*",
1046 | "csstype": "^3.0.2"
1047 | }
1048 | },
1049 | "node_modules/@types/react-dom": {
1050 | "version": "18.3.1",
1051 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz",
1052 | "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==",
1053 | "dev": true,
1054 | "dependencies": {
1055 | "@types/react": "*"
1056 | }
1057 | },
1058 | "node_modules/@vitejs/plugin-react": {
1059 | "version": "4.3.3",
1060 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz",
1061 | "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==",
1062 | "dev": true,
1063 | "dependencies": {
1064 | "@babel/core": "^7.25.2",
1065 | "@babel/plugin-transform-react-jsx-self": "^7.24.7",
1066 | "@babel/plugin-transform-react-jsx-source": "^7.24.7",
1067 | "@types/babel__core": "^7.20.5",
1068 | "react-refresh": "^0.14.2"
1069 | },
1070 | "engines": {
1071 | "node": "^14.18.0 || >=16.0.0"
1072 | },
1073 | "peerDependencies": {
1074 | "vite": "^4.2.0 || ^5.0.0"
1075 | }
1076 | },
1077 | "node_modules/ansi-styles": {
1078 | "version": "3.2.1",
1079 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1080 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1081 | "dependencies": {
1082 | "color-convert": "^1.9.0"
1083 | },
1084 | "engines": {
1085 | "node": ">=4"
1086 | }
1087 | },
1088 | "node_modules/apache-arrow": {
1089 | "version": "11.0.0",
1090 | "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-11.0.0.tgz",
1091 | "integrity": "sha512-M8J4y+DimIyS44w2KOmVfzNHbTroR1oDpBKK6BYnlu8xVB41lxTz0yLmapo8/WJVAt5XcinAxMm14M771dm/rA==",
1092 | "dependencies": {
1093 | "@types/command-line-args": "5.2.0",
1094 | "@types/command-line-usage": "5.0.2",
1095 | "@types/flatbuffers": "*",
1096 | "@types/node": "18.7.23",
1097 | "@types/pad-left": "2.1.1",
1098 | "command-line-args": "5.2.1",
1099 | "command-line-usage": "6.1.3",
1100 | "flatbuffers": "2.0.4",
1101 | "json-bignum": "^0.0.3",
1102 | "pad-left": "^2.1.0",
1103 | "tslib": "^2.4.0"
1104 | },
1105 | "bin": {
1106 | "arrow2csv": "bin/arrow2csv.js"
1107 | }
1108 | },
1109 | "node_modules/array-back": {
1110 | "version": "3.1.0",
1111 | "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
1112 | "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
1113 | "engines": {
1114 | "node": ">=6"
1115 | }
1116 | },
1117 | "node_modules/browserslist": {
1118 | "version": "4.24.2",
1119 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
1120 | "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
1121 | "dev": true,
1122 | "funding": [
1123 | {
1124 | "type": "opencollective",
1125 | "url": "https://opencollective.com/browserslist"
1126 | },
1127 | {
1128 | "type": "tidelift",
1129 | "url": "https://tidelift.com/funding/github/npm/browserslist"
1130 | },
1131 | {
1132 | "type": "github",
1133 | "url": "https://github.com/sponsors/ai"
1134 | }
1135 | ],
1136 | "dependencies": {
1137 | "caniuse-lite": "^1.0.30001669",
1138 | "electron-to-chromium": "^1.5.41",
1139 | "node-releases": "^2.0.18",
1140 | "update-browserslist-db": "^1.1.1"
1141 | },
1142 | "bin": {
1143 | "browserslist": "cli.js"
1144 | },
1145 | "engines": {
1146 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1147 | }
1148 | },
1149 | "node_modules/caniuse-lite": {
1150 | "version": "1.0.30001674",
1151 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001674.tgz",
1152 | "integrity": "sha512-jOsKlZVRnzfhLojb+Ykb+gyUSp9Xb57So+fAiFlLzzTKpqg8xxSav0e40c8/4F/v9N8QSvrRRaLeVzQbLqomYw==",
1153 | "dev": true,
1154 | "funding": [
1155 | {
1156 | "type": "opencollective",
1157 | "url": "https://opencollective.com/browserslist"
1158 | },
1159 | {
1160 | "type": "tidelift",
1161 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
1162 | },
1163 | {
1164 | "type": "github",
1165 | "url": "https://github.com/sponsors/ai"
1166 | }
1167 | ]
1168 | },
1169 | "node_modules/chalk": {
1170 | "version": "2.4.2",
1171 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1172 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1173 | "dependencies": {
1174 | "ansi-styles": "^3.2.1",
1175 | "escape-string-regexp": "^1.0.5",
1176 | "supports-color": "^5.3.0"
1177 | },
1178 | "engines": {
1179 | "node": ">=4"
1180 | }
1181 | },
1182 | "node_modules/color-convert": {
1183 | "version": "1.9.3",
1184 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
1185 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
1186 | "dependencies": {
1187 | "color-name": "1.1.3"
1188 | }
1189 | },
1190 | "node_modules/color-name": {
1191 | "version": "1.1.3",
1192 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1193 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
1194 | },
1195 | "node_modules/command-line-args": {
1196 | "version": "5.2.1",
1197 | "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz",
1198 | "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==",
1199 | "dependencies": {
1200 | "array-back": "^3.1.0",
1201 | "find-replace": "^3.0.0",
1202 | "lodash.camelcase": "^4.3.0",
1203 | "typical": "^4.0.0"
1204 | },
1205 | "engines": {
1206 | "node": ">=4.0.0"
1207 | }
1208 | },
1209 | "node_modules/command-line-usage": {
1210 | "version": "6.1.3",
1211 | "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz",
1212 | "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==",
1213 | "dependencies": {
1214 | "array-back": "^4.0.2",
1215 | "chalk": "^2.4.2",
1216 | "table-layout": "^1.0.2",
1217 | "typical": "^5.2.0"
1218 | },
1219 | "engines": {
1220 | "node": ">=8.0.0"
1221 | }
1222 | },
1223 | "node_modules/command-line-usage/node_modules/array-back": {
1224 | "version": "4.0.2",
1225 | "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz",
1226 | "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==",
1227 | "engines": {
1228 | "node": ">=8"
1229 | }
1230 | },
1231 | "node_modules/command-line-usage/node_modules/typical": {
1232 | "version": "5.2.0",
1233 | "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
1234 | "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==",
1235 | "engines": {
1236 | "node": ">=8"
1237 | }
1238 | },
1239 | "node_modules/convert-source-map": {
1240 | "version": "2.0.0",
1241 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
1242 | "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
1243 | "dev": true
1244 | },
1245 | "node_modules/csstype": {
1246 | "version": "3.1.1",
1247 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
1248 | "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==",
1249 | "dev": true
1250 | },
1251 | "node_modules/debug": {
1252 | "version": "4.3.7",
1253 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
1254 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
1255 | "dev": true,
1256 | "dependencies": {
1257 | "ms": "^2.1.3"
1258 | },
1259 | "engines": {
1260 | "node": ">=6.0"
1261 | },
1262 | "peerDependenciesMeta": {
1263 | "supports-color": {
1264 | "optional": true
1265 | }
1266 | }
1267 | },
1268 | "node_modules/deep-extend": {
1269 | "version": "0.6.0",
1270 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
1271 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
1272 | "engines": {
1273 | "node": ">=4.0.0"
1274 | }
1275 | },
1276 | "node_modules/electron-to-chromium": {
1277 | "version": "1.5.49",
1278 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz",
1279 | "integrity": "sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==",
1280 | "dev": true
1281 | },
1282 | "node_modules/esbuild": {
1283 | "version": "0.21.5",
1284 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
1285 | "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
1286 | "dev": true,
1287 | "hasInstallScript": true,
1288 | "bin": {
1289 | "esbuild": "bin/esbuild"
1290 | },
1291 | "engines": {
1292 | "node": ">=12"
1293 | },
1294 | "optionalDependencies": {
1295 | "@esbuild/aix-ppc64": "0.21.5",
1296 | "@esbuild/android-arm": "0.21.5",
1297 | "@esbuild/android-arm64": "0.21.5",
1298 | "@esbuild/android-x64": "0.21.5",
1299 | "@esbuild/darwin-arm64": "0.21.5",
1300 | "@esbuild/darwin-x64": "0.21.5",
1301 | "@esbuild/freebsd-arm64": "0.21.5",
1302 | "@esbuild/freebsd-x64": "0.21.5",
1303 | "@esbuild/linux-arm": "0.21.5",
1304 | "@esbuild/linux-arm64": "0.21.5",
1305 | "@esbuild/linux-ia32": "0.21.5",
1306 | "@esbuild/linux-loong64": "0.21.5",
1307 | "@esbuild/linux-mips64el": "0.21.5",
1308 | "@esbuild/linux-ppc64": "0.21.5",
1309 | "@esbuild/linux-riscv64": "0.21.5",
1310 | "@esbuild/linux-s390x": "0.21.5",
1311 | "@esbuild/linux-x64": "0.21.5",
1312 | "@esbuild/netbsd-x64": "0.21.5",
1313 | "@esbuild/openbsd-x64": "0.21.5",
1314 | "@esbuild/sunos-x64": "0.21.5",
1315 | "@esbuild/win32-arm64": "0.21.5",
1316 | "@esbuild/win32-ia32": "0.21.5",
1317 | "@esbuild/win32-x64": "0.21.5"
1318 | }
1319 | },
1320 | "node_modules/escalade": {
1321 | "version": "3.2.0",
1322 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
1323 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
1324 | "dev": true,
1325 | "engines": {
1326 | "node": ">=6"
1327 | }
1328 | },
1329 | "node_modules/escape-string-regexp": {
1330 | "version": "1.0.5",
1331 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1332 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
1333 | "engines": {
1334 | "node": ">=0.8.0"
1335 | }
1336 | },
1337 | "node_modules/find-replace": {
1338 | "version": "3.0.0",
1339 | "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz",
1340 | "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==",
1341 | "dependencies": {
1342 | "array-back": "^3.0.1"
1343 | },
1344 | "engines": {
1345 | "node": ">=4.0.0"
1346 | }
1347 | },
1348 | "node_modules/flatbuffers": {
1349 | "version": "2.0.4",
1350 | "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-2.0.4.tgz",
1351 | "integrity": "sha512-4rUFVDPjSoP0tOII34oQf+72NKU7E088U5oX7kwICahft0UB2kOQ9wUzzCp+OHxByERIfxRDCgX5mP8Pjkfl0g=="
1352 | },
1353 | "node_modules/fsevents": {
1354 | "version": "2.3.3",
1355 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
1356 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1357 | "dev": true,
1358 | "hasInstallScript": true,
1359 | "optional": true,
1360 | "os": [
1361 | "darwin"
1362 | ],
1363 | "engines": {
1364 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1365 | }
1366 | },
1367 | "node_modules/gensync": {
1368 | "version": "1.0.0-beta.2",
1369 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
1370 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
1371 | "dev": true,
1372 | "engines": {
1373 | "node": ">=6.9.0"
1374 | }
1375 | },
1376 | "node_modules/globals": {
1377 | "version": "11.12.0",
1378 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
1379 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
1380 | "dev": true,
1381 | "engines": {
1382 | "node": ">=4"
1383 | }
1384 | },
1385 | "node_modules/has-flag": {
1386 | "version": "3.0.0",
1387 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1388 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
1389 | "engines": {
1390 | "node": ">=4"
1391 | }
1392 | },
1393 | "node_modules/hoist-non-react-statics": {
1394 | "version": "3.3.2",
1395 | "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
1396 | "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
1397 | "dependencies": {
1398 | "react-is": "^16.7.0"
1399 | }
1400 | },
1401 | "node_modules/js-tokens": {
1402 | "version": "4.0.0",
1403 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1404 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1405 | },
1406 | "node_modules/jsesc": {
1407 | "version": "3.0.2",
1408 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
1409 | "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
1410 | "dev": true,
1411 | "bin": {
1412 | "jsesc": "bin/jsesc"
1413 | },
1414 | "engines": {
1415 | "node": ">=6"
1416 | }
1417 | },
1418 | "node_modules/json-bignum": {
1419 | "version": "0.0.3",
1420 | "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz",
1421 | "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==",
1422 | "engines": {
1423 | "node": ">=0.8"
1424 | }
1425 | },
1426 | "node_modules/json5": {
1427 | "version": "2.2.3",
1428 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
1429 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
1430 | "dev": true,
1431 | "bin": {
1432 | "json5": "lib/cli.js"
1433 | },
1434 | "engines": {
1435 | "node": ">=6"
1436 | }
1437 | },
1438 | "node_modules/lodash.camelcase": {
1439 | "version": "4.3.0",
1440 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
1441 | "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
1442 | },
1443 | "node_modules/loose-envify": {
1444 | "version": "1.4.0",
1445 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1446 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1447 | "dependencies": {
1448 | "js-tokens": "^3.0.0 || ^4.0.0"
1449 | },
1450 | "bin": {
1451 | "loose-envify": "cli.js"
1452 | }
1453 | },
1454 | "node_modules/lru-cache": {
1455 | "version": "5.1.1",
1456 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
1457 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
1458 | "dev": true,
1459 | "dependencies": {
1460 | "yallist": "^3.0.2"
1461 | }
1462 | },
1463 | "node_modules/ms": {
1464 | "version": "2.1.3",
1465 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1466 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1467 | "dev": true
1468 | },
1469 | "node_modules/nanoid": {
1470 | "version": "3.3.7",
1471 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
1472 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
1473 | "dev": true,
1474 | "funding": [
1475 | {
1476 | "type": "github",
1477 | "url": "https://github.com/sponsors/ai"
1478 | }
1479 | ],
1480 | "bin": {
1481 | "nanoid": "bin/nanoid.cjs"
1482 | },
1483 | "engines": {
1484 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1485 | }
1486 | },
1487 | "node_modules/node-releases": {
1488 | "version": "2.0.18",
1489 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
1490 | "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
1491 | "dev": true
1492 | },
1493 | "node_modules/object-assign": {
1494 | "version": "4.1.1",
1495 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1496 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1497 | "engines": {
1498 | "node": ">=0.10.0"
1499 | }
1500 | },
1501 | "node_modules/pad-left": {
1502 | "version": "2.1.0",
1503 | "resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz",
1504 | "integrity": "sha512-HJxs9K9AztdIQIAIa/OIazRAUW/L6B9hbQDxO4X07roW3eo9XqZc2ur9bn1StH9CnbbI9EgvejHQX7CBpCF1QA==",
1505 | "dependencies": {
1506 | "repeat-string": "^1.5.4"
1507 | },
1508 | "engines": {
1509 | "node": ">=0.10.0"
1510 | }
1511 | },
1512 | "node_modules/picocolors": {
1513 | "version": "1.1.1",
1514 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1515 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
1516 | "dev": true
1517 | },
1518 | "node_modules/postcss": {
1519 | "version": "8.4.47",
1520 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
1521 | "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
1522 | "dev": true,
1523 | "funding": [
1524 | {
1525 | "type": "opencollective",
1526 | "url": "https://opencollective.com/postcss/"
1527 | },
1528 | {
1529 | "type": "tidelift",
1530 | "url": "https://tidelift.com/funding/github/npm/postcss"
1531 | },
1532 | {
1533 | "type": "github",
1534 | "url": "https://github.com/sponsors/ai"
1535 | }
1536 | ],
1537 | "dependencies": {
1538 | "nanoid": "^3.3.7",
1539 | "picocolors": "^1.1.0",
1540 | "source-map-js": "^1.2.1"
1541 | },
1542 | "engines": {
1543 | "node": "^10 || ^12 || >=14"
1544 | }
1545 | },
1546 | "node_modules/prop-types": {
1547 | "version": "15.8.1",
1548 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
1549 | "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
1550 | "dependencies": {
1551 | "loose-envify": "^1.4.0",
1552 | "object-assign": "^4.1.1",
1553 | "react-is": "^16.13.1"
1554 | }
1555 | },
1556 | "node_modules/react": {
1557 | "version": "18.3.1",
1558 | "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
1559 | "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
1560 | "dependencies": {
1561 | "loose-envify": "^1.1.0"
1562 | },
1563 | "engines": {
1564 | "node": ">=0.10.0"
1565 | }
1566 | },
1567 | "node_modules/react-dom": {
1568 | "version": "18.3.1",
1569 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
1570 | "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
1571 | "dependencies": {
1572 | "loose-envify": "^1.1.0",
1573 | "scheduler": "^0.23.2"
1574 | },
1575 | "peerDependencies": {
1576 | "react": "^18.3.1"
1577 | }
1578 | },
1579 | "node_modules/react-is": {
1580 | "version": "16.13.1",
1581 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
1582 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
1583 | },
1584 | "node_modules/react-refresh": {
1585 | "version": "0.14.2",
1586 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
1587 | "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
1588 | "dev": true,
1589 | "engines": {
1590 | "node": ">=0.10.0"
1591 | }
1592 | },
1593 | "node_modules/reduce-flatten": {
1594 | "version": "2.0.0",
1595 | "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz",
1596 | "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==",
1597 | "engines": {
1598 | "node": ">=6"
1599 | }
1600 | },
1601 | "node_modules/repeat-string": {
1602 | "version": "1.6.1",
1603 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
1604 | "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
1605 | "engines": {
1606 | "node": ">=0.10"
1607 | }
1608 | },
1609 | "node_modules/rollup": {
1610 | "version": "4.24.2",
1611 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.2.tgz",
1612 | "integrity": "sha512-do/DFGq5g6rdDhdpPq5qb2ecoczeK6y+2UAjdJ5trjQJj5f1AiVdLRWRc9A9/fFukfvJRgM0UXzxBIYMovm5ww==",
1613 | "dev": true,
1614 | "dependencies": {
1615 | "@types/estree": "1.0.6"
1616 | },
1617 | "bin": {
1618 | "rollup": "dist/bin/rollup"
1619 | },
1620 | "engines": {
1621 | "node": ">=18.0.0",
1622 | "npm": ">=8.0.0"
1623 | },
1624 | "optionalDependencies": {
1625 | "@rollup/rollup-android-arm-eabi": "4.24.2",
1626 | "@rollup/rollup-android-arm64": "4.24.2",
1627 | "@rollup/rollup-darwin-arm64": "4.24.2",
1628 | "@rollup/rollup-darwin-x64": "4.24.2",
1629 | "@rollup/rollup-freebsd-arm64": "4.24.2",
1630 | "@rollup/rollup-freebsd-x64": "4.24.2",
1631 | "@rollup/rollup-linux-arm-gnueabihf": "4.24.2",
1632 | "@rollup/rollup-linux-arm-musleabihf": "4.24.2",
1633 | "@rollup/rollup-linux-arm64-gnu": "4.24.2",
1634 | "@rollup/rollup-linux-arm64-musl": "4.24.2",
1635 | "@rollup/rollup-linux-powerpc64le-gnu": "4.24.2",
1636 | "@rollup/rollup-linux-riscv64-gnu": "4.24.2",
1637 | "@rollup/rollup-linux-s390x-gnu": "4.24.2",
1638 | "@rollup/rollup-linux-x64-gnu": "4.24.2",
1639 | "@rollup/rollup-linux-x64-musl": "4.24.2",
1640 | "@rollup/rollup-win32-arm64-msvc": "4.24.2",
1641 | "@rollup/rollup-win32-ia32-msvc": "4.24.2",
1642 | "@rollup/rollup-win32-x64-msvc": "4.24.2",
1643 | "fsevents": "~2.3.2"
1644 | }
1645 | },
1646 | "node_modules/scheduler": {
1647 | "version": "0.23.2",
1648 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
1649 | "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
1650 | "dependencies": {
1651 | "loose-envify": "^1.1.0"
1652 | }
1653 | },
1654 | "node_modules/semver": {
1655 | "version": "6.3.1",
1656 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
1657 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
1658 | "dev": true,
1659 | "bin": {
1660 | "semver": "bin/semver.js"
1661 | }
1662 | },
1663 | "node_modules/source-map-js": {
1664 | "version": "1.2.1",
1665 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
1666 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
1667 | "dev": true,
1668 | "engines": {
1669 | "node": ">=0.10.0"
1670 | }
1671 | },
1672 | "node_modules/streamlit-component-lib": {
1673 | "version": "2.0.0",
1674 | "resolved": "https://registry.npmjs.org/streamlit-component-lib/-/streamlit-component-lib-2.0.0.tgz",
1675 | "integrity": "sha512-ekLjskU4Cz+zSLkTC9jpppv2hb8jlA3z2h+TtwGUGuwMKrGLrvTpzLJI1ibPuI+bZ60mLHVI1GP/OyNb7K7UjA==",
1676 | "dependencies": {
1677 | "apache-arrow": "^11.0.0",
1678 | "hoist-non-react-statics": "^3.3.2",
1679 | "react": "^16.14.0",
1680 | "react-dom": "^16.14.0"
1681 | }
1682 | },
1683 | "node_modules/streamlit-component-lib/node_modules/react": {
1684 | "version": "16.14.0",
1685 | "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
1686 | "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
1687 | "dependencies": {
1688 | "loose-envify": "^1.1.0",
1689 | "object-assign": "^4.1.1",
1690 | "prop-types": "^15.6.2"
1691 | },
1692 | "engines": {
1693 | "node": ">=0.10.0"
1694 | }
1695 | },
1696 | "node_modules/streamlit-component-lib/node_modules/react-dom": {
1697 | "version": "16.14.0",
1698 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz",
1699 | "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==",
1700 | "dependencies": {
1701 | "loose-envify": "^1.1.0",
1702 | "object-assign": "^4.1.1",
1703 | "prop-types": "^15.6.2",
1704 | "scheduler": "^0.19.1"
1705 | },
1706 | "peerDependencies": {
1707 | "react": "^16.14.0"
1708 | }
1709 | },
1710 | "node_modules/streamlit-component-lib/node_modules/scheduler": {
1711 | "version": "0.19.1",
1712 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
1713 | "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
1714 | "dependencies": {
1715 | "loose-envify": "^1.1.0",
1716 | "object-assign": "^4.1.1"
1717 | }
1718 | },
1719 | "node_modules/supports-color": {
1720 | "version": "5.5.0",
1721 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1722 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1723 | "dependencies": {
1724 | "has-flag": "^3.0.0"
1725 | },
1726 | "engines": {
1727 | "node": ">=4"
1728 | }
1729 | },
1730 | "node_modules/table-layout": {
1731 | "version": "1.0.2",
1732 | "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz",
1733 | "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==",
1734 | "dependencies": {
1735 | "array-back": "^4.0.1",
1736 | "deep-extend": "~0.6.0",
1737 | "typical": "^5.2.0",
1738 | "wordwrapjs": "^4.0.0"
1739 | },
1740 | "engines": {
1741 | "node": ">=8.0.0"
1742 | }
1743 | },
1744 | "node_modules/table-layout/node_modules/array-back": {
1745 | "version": "4.0.2",
1746 | "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz",
1747 | "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==",
1748 | "engines": {
1749 | "node": ">=8"
1750 | }
1751 | },
1752 | "node_modules/table-layout/node_modules/typical": {
1753 | "version": "5.2.0",
1754 | "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
1755 | "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==",
1756 | "engines": {
1757 | "node": ">=8"
1758 | }
1759 | },
1760 | "node_modules/tslib": {
1761 | "version": "2.8.0",
1762 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz",
1763 | "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA=="
1764 | },
1765 | "node_modules/typescript": {
1766 | "version": "5.6.3",
1767 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
1768 | "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
1769 | "dev": true,
1770 | "bin": {
1771 | "tsc": "bin/tsc",
1772 | "tsserver": "bin/tsserver"
1773 | },
1774 | "engines": {
1775 | "node": ">=14.17"
1776 | }
1777 | },
1778 | "node_modules/typical": {
1779 | "version": "4.0.0",
1780 | "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz",
1781 | "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==",
1782 | "engines": {
1783 | "node": ">=8"
1784 | }
1785 | },
1786 | "node_modules/update-browserslist-db": {
1787 | "version": "1.1.1",
1788 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
1789 | "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
1790 | "dev": true,
1791 | "funding": [
1792 | {
1793 | "type": "opencollective",
1794 | "url": "https://opencollective.com/browserslist"
1795 | },
1796 | {
1797 | "type": "tidelift",
1798 | "url": "https://tidelift.com/funding/github/npm/browserslist"
1799 | },
1800 | {
1801 | "type": "github",
1802 | "url": "https://github.com/sponsors/ai"
1803 | }
1804 | ],
1805 | "dependencies": {
1806 | "escalade": "^3.2.0",
1807 | "picocolors": "^1.1.0"
1808 | },
1809 | "bin": {
1810 | "update-browserslist-db": "cli.js"
1811 | },
1812 | "peerDependencies": {
1813 | "browserslist": ">= 4.21.0"
1814 | }
1815 | },
1816 | "node_modules/vite": {
1817 | "version": "5.4.10",
1818 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz",
1819 | "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==",
1820 | "dev": true,
1821 | "dependencies": {
1822 | "esbuild": "^0.21.3",
1823 | "postcss": "^8.4.43",
1824 | "rollup": "^4.20.0"
1825 | },
1826 | "bin": {
1827 | "vite": "bin/vite.js"
1828 | },
1829 | "engines": {
1830 | "node": "^18.0.0 || >=20.0.0"
1831 | },
1832 | "funding": {
1833 | "url": "https://github.com/vitejs/vite?sponsor=1"
1834 | },
1835 | "optionalDependencies": {
1836 | "fsevents": "~2.3.3"
1837 | },
1838 | "peerDependencies": {
1839 | "@types/node": "^18.0.0 || >=20.0.0",
1840 | "less": "*",
1841 | "lightningcss": "^1.21.0",
1842 | "sass": "*",
1843 | "sass-embedded": "*",
1844 | "stylus": "*",
1845 | "sugarss": "*",
1846 | "terser": "^5.4.0"
1847 | },
1848 | "peerDependenciesMeta": {
1849 | "@types/node": {
1850 | "optional": true
1851 | },
1852 | "less": {
1853 | "optional": true
1854 | },
1855 | "lightningcss": {
1856 | "optional": true
1857 | },
1858 | "sass": {
1859 | "optional": true
1860 | },
1861 | "sass-embedded": {
1862 | "optional": true
1863 | },
1864 | "stylus": {
1865 | "optional": true
1866 | },
1867 | "sugarss": {
1868 | "optional": true
1869 | },
1870 | "terser": {
1871 | "optional": true
1872 | }
1873 | }
1874 | },
1875 | "node_modules/wordwrapjs": {
1876 | "version": "4.0.1",
1877 | "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz",
1878 | "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==",
1879 | "dependencies": {
1880 | "reduce-flatten": "^2.0.0",
1881 | "typical": "^5.2.0"
1882 | },
1883 | "engines": {
1884 | "node": ">=8.0.0"
1885 | }
1886 | },
1887 | "node_modules/wordwrapjs/node_modules/typical": {
1888 | "version": "5.2.0",
1889 | "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
1890 | "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==",
1891 | "engines": {
1892 | "node": ">=8"
1893 | }
1894 | },
1895 | "node_modules/yallist": {
1896 | "version": "3.1.1",
1897 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
1898 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
1899 | "dev": true
1900 | }
1901 | }
1902 | }
1903 |
--------------------------------------------------------------------------------
/msal_streamlit_authentication/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "msal-streamlit-component",
3 | "version": "1.0.0",
4 | "description": "msal-streamlit-component",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "tsc && vite build",
9 | "preview": "vite preview"
10 | },
11 | "author": "",
12 | "license": "MIT",
13 | "dependencies": {
14 | "react": "^18.3.1",
15 | "react-dom": "^18.3.1",
16 | "@azure/msal-browser": "^3.26.1",
17 | "streamlit-component-lib": "^2.0.0"
18 | },
19 | "devDependencies": {
20 | "@types/react": "^18.3.12",
21 | "@types/react-dom": "^18.3.1",
22 | "@vitejs/plugin-react": "^4.3.3",
23 | "typescript": "^5.6.3",
24 | "vite": "^5.4.10"
25 | }
26 | }
--------------------------------------------------------------------------------
/msal_streamlit_authentication/frontend/src/Authentication.tsx:
--------------------------------------------------------------------------------
1 | import React, { useCallback, useEffect, useState } from "react"
2 | import {
3 | withStreamlitConnection,
4 | Streamlit,
5 | ComponentProps,
6 | } from "streamlit-component-lib"
7 | import { useMsalInstance } from "./auth/msal-auth";
8 |
9 | const Authentication = ({ args }: ComponentProps) => {
10 | const msalInstance = useMsalInstance(args["auth"], args["cache"])
11 | const loginRequest = args["login_request"] ?? undefined
12 | const logoutRequest = args["logout_request"] ?? undefined
13 | const loginButtonText = args["login_button_text"] ?? ""
14 | const logoutButtonText = args["logout_button_text"] ?? ""
15 | const buttonClass = args["class_name"] ?? ""
16 | const buttonId = args["html_id"] ?? ""
17 |
18 | const [loginToken, setLoginToken] = useState(null)
19 | const isAuthenticated = useCallback(() => {
20 | return msalInstance.getAllAccounts().length > 0
21 | }, [])
22 |
23 | useEffect(() => {
24 | if (msalInstance.getAllAccounts().length > 0) {
25 | msalInstance.acquireTokenSilent({
26 | ...loginRequest,
27 | account: msalInstance.getAllAccounts()[0]
28 | }).then(function (response) {
29 | // @ts-ignore
30 | setLoginToken(response)
31 | })
32 | } else {
33 | setLoginToken(null)
34 | }
35 | }, [])
36 |
37 | useEffect(() => {
38 | Streamlit.setComponentValue(loginToken)
39 | Streamlit.setFrameHeight()
40 | Streamlit.setComponentReady()
41 | }, [loginToken])
42 |
43 | const loginPopup = useCallback(() => {
44 | msalInstance.loginPopup(loginRequest).then(function (response) {
45 | // @ts-ignore
46 | setLoginToken(response)
47 | }).catch(console.error)
48 | }, [])
49 |
50 | const logoutPopup = useCallback(() => {
51 | // @ts-ignore
52 | msalInstance.logoutPopup(logoutRequest).then(function (response) {
53 | setLoginToken(null)
54 | }).catch(console.error)
55 | }, [])
56 |
57 | return (
58 |
59 |
60 | {isAuthenticated() ? logoutButtonText : loginButtonText}
61 |
62 |
63 | )
64 |
65 | }
66 |
67 | export default withStreamlitConnection(Authentication)
68 |
--------------------------------------------------------------------------------
/msal_streamlit_authentication/frontend/src/auth/msal-auth.tsx:
--------------------------------------------------------------------------------
1 | import {BrowserAuthOptions, CacheOptions, LogLevel, PublicClientApplication} from "@azure/msal-browser";
2 |
3 | export const useMsalInstance = function (auth_config: BrowserAuthOptions, cache_config: CacheOptions) {
4 | const instance = new PublicClientApplication({
5 | auth: auth_config,
6 | cache: cache_config,
7 | system: {
8 | loggerOptions: {
9 | loggerCallback: (level: LogLevel, message: string, containsPii: any) => {
10 | if (containsPii) {
11 | return;
12 | }
13 | switch (level) {
14 | case LogLevel.Error:
15 | console.error(message);
16 | return;
17 | case LogLevel.Info:
18 | return;
19 | case LogLevel.Verbose:
20 | console.debug(message);
21 | return;
22 | case LogLevel.Warning:
23 | console.warn(message);
24 | return;
25 | default:
26 | return;
27 | }
28 | }
29 | }
30 | }
31 | });
32 | instance.initialize()
33 | return instance;
34 | }
35 |
--------------------------------------------------------------------------------
/msal_streamlit_authentication/frontend/src/index.css:
--------------------------------------------------------------------------------
1 | #root {
2 | padding: 0.5rem;
3 | }
4 |
5 | :root {
6 | font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
7 |
8 | color-scheme: light dark;
9 |
10 | }
11 |
12 | button {
13 | border-radius: 8px;
14 | border: 1px solid;
15 | padding: 0.6em 1.2em;
16 | font-size: inherit;
17 | font-weight: inherit;
18 | font-family: inherit;
19 | color: inherit;
20 | background-color: inherit;
21 | cursor: pointer;
22 | }
23 | button:hover {
24 | border-color: #646cff;
25 | }
26 | button:focus,
27 | button:focus-visible {
28 | outline: 4px auto -webkit-focus-ring-color;
29 | }
30 |
--------------------------------------------------------------------------------
/msal_streamlit_authentication/frontend/src/main.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom/client'
3 | import Authentication from './Authentication'
4 | import './index.css'
5 |
6 | ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
7 |
8 |
9 | ,
10 | )
11 |
--------------------------------------------------------------------------------
/msal_streamlit_authentication/frontend/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/msal_streamlit_authentication/frontend/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ESNext",
4 | "useDefineForClassFields": true,
5 | "lib": ["DOM", "DOM.Iterable", "ESNext"],
6 | "allowJs": false,
7 | "skipLibCheck": true,
8 | "esModuleInterop": false,
9 | "allowSyntheticDefaultImports": true,
10 | "strict": true,
11 | "forceConsistentCasingInFileNames": true,
12 | "module": "ESNext",
13 | "moduleResolution": "Node",
14 | "resolveJsonModule": true,
15 | "isolatedModules": true,
16 | "noEmit": true,
17 | "jsx": "react-jsx"
18 | },
19 | "include": ["src"],
20 | "references": [{ "path": "./tsconfig.node.json" }]
21 | }
22 |
--------------------------------------------------------------------------------
/msal_streamlit_authentication/frontend/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "module": "ESNext",
5 | "moduleResolution": "Node",
6 | "allowSyntheticDefaultImports": true
7 | },
8 | "include": ["vite.config.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/msal_streamlit_authentication/frontend/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | base: "./",
7 | plugins: [react()],
8 | })
9 |
--------------------------------------------------------------------------------
/pyproject.toml:
--------------------------------------------------------------------------------
1 | [tool.poetry]
2 | name = "msal_streamlit_authentication"
3 | version = "1.1.0"
4 | description = "Streamlit Authentication library based on MSAL.JS"
5 | readme = "README.md"
6 | repository = "https://github.com/ploomber/msal_streamlit_authentication"
7 | authors = ["Michael Staal-Olsen"]
8 | packages=[
9 | { include="msal_streamlit_authentication" }
10 | ]
11 | include = ["msal_streamlit_authentication/frontend/dist/**/*"]
12 | exclude = [
13 | "msal_streamlit_authentication/frontend/index.html",
14 | "msal_streamlit_authentication/frontend/public",
15 | "msal_streamlit_authentication/frontend/src",
16 | "msal_streamlit_authentication/frontend/tsconfig.json",
17 | "msal_streamlit_authentication/frontend/tsconfig.node.json",
18 | "msal_streamlit_authentication/frontend/package.json",
19 | "msal_streamlit_authentication/frontend/package-lock.json",
20 | "msal_streamlit_authentication/frontend/vite.config.ts",
21 | ]
22 |
23 | [tool.poetry.dependencies]
24 | python = ">=3.9"
25 | streamlit = "*"
26 |
27 | [tool.poetry.group.dev.dependencies]
28 | pytest = "6.0.1"
29 |
30 | [build-system]
31 | requires = ["poetry-core>=1.0.0"]
32 | build-backend = "poetry.core.masonry.api"
33 |
--------------------------------------------------------------------------------